> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orgo.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Destroy a screen

> Stop a screen and everything running on it.

Stops the screen's X server, its window manager, and every window on it. This
is not recoverable. The display number the screen was using is freed. The next
screen you [create](/api-reference/screens/create) takes the lowest free
display number from `:100` up, so it reuses this one when no lower number is
free.

<Warning>
  The boot screen (`default`) cannot be destroyed. A computer with no screen is
  a computer nobody can see, so the request is refused with `409`.
</Warning>

## Path parameters

<ParamField path="id" type="string" required>
  Computer ID (UUID). The computer must be up. One that is still being created,
  or that has been frozen, returns `400`.
</ParamField>

<ParamField path="screenId" type="string" required>
  Screen ID. Must not be `default`.
</ParamField>

## Response

`204 No Content` with an empty body. There is nothing left to describe once the
screen is gone.

The screen is also dropped from the record Orgo keeps of the computer's
screens, so a restart does not bring it back. That record is described in
[Screens after a restart](/api-reference/screens/list#screens-after-a-restart).

## Errors

Failures raised before the request reaches the computer carry `error` alone.
Failures relayed back from the computer add `request_id` and `upstream_status`.

This differs from [get](/api-reference/screens/get): a screen ID that does not
exist answers `409` here, not `404`. Destroying the boot screen and destroying a
screen that was never there are both refusals. Both come back as `409`, and the
message tells them apart.

| Status | When | Body |
| - | - | - |
| `400` | The computer has nothing running behind it: still being created, or frozen. | `{ "error": "Computer not available" }` |
| `401` | The Bearer token starts with `sk_` but is not a known Orgo key. | `{ "error": "Invalid API key" }` |
| `401` | No `Authorization` header, or a Bearer token that is not an `sk_` key. | `{ "error": "Authentication required" }` |
| `401` | You do not own the computer's workspace and are not a member of it. | `{ "error": "You do not have access to this workspace." }` |
| `401` | You have view-only access to the workspace. | `{ "error": "This workspace is view-only. Ask the owner for write access (workspace_read_only)." }` |
| `401` | The API key is scoped to a different workspace. | `{ "error": "This API key cannot access this workspace (workspace_scope_mismatch)." }` |
| `401` | Orgo could not verify the credential because of a server-side fault. Retry. | `{ "error": "Service temporarily unavailable. …" }` |
| `402` | The computer is a free trial computer that can no longer run. | `{ "error": "Choose a plan to continue." }` |
| `402` | The computer is paid for by its own subscription or dedicated purchase, and that payment has lapsed. | `{ "error": "Manage this computer’s payment in Account → Usage." }` |
| `404` | No computer with that ID. | `{ "error": "Desktop not found" }` |
| `404` | The computer runs Windows, whose agent has no screens endpoint. | `{ "error": "…", "request_id": "…", "upstream_status": 404 }` |
| `409` | `screenId` is `default`. | `{ "error": "the default screen cannot be destroyed", "request_id": "…", "upstream_status": 409 }` |
| `409` | No screen with that ID on this computer. | `{ "error": "no screen \"screen-101\"", "request_id": "…", "upstream_status": 409 }` |
| `500` | Unexpected failure. | `{ "error": "…", "request_id": "…" }` |
| `503` | The computer could not be reached. | `{ "error": "Could not reach the desktop. Try again in a moment.", "request_id": "…", "code": "ECONNREFUSED" }` |

<RequestExample>
  ```bash cURL theme={null}
  curl -X DELETE https://www.orgo.ai/api/computers/$COMPUTER_ID/screens/screen-100 \
    -H "Authorization: Bearer $ORGO_API_KEY"
  ```
</RequestExample>

<ResponseExample>
  ```http 204 theme={null}
  HTTP/1.1 204 No Content
  ```

  ```json 409 theme={null}
  {
    "error": "the default screen cannot be destroyed",
    "request_id": "7c1e0f4a-9b2d-4a51-8f0c-2d6b1e93a4c7",
    "upstream_status": 409
  }
  ```
</ResponseExample>


## OpenAPI

````yaml DELETE /computers/{id}/screens/{screenId}
openapi: 3.1.0
info:
  title: Orgo API
  description: >-
    Launch cloud computers that AI agents can control and interact with. Create
    workspaces, provision computers, and control them programmatically.
  version: 2.0.0
  contact:
    name: Orgo Support
    email: spencer@orgo.ai
    url: https://orgo.ai
servers:
  - url: https://www.orgo.ai/api
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Account
    description: >-
      Account capacity: how many computers an account may run, and adding or
      giving back more.
  - name: Clients
    description: >-
      Run Orgo for your clients from your own app: a workspace and scoped key
      each, billed to you or to them.
  - name: Workspaces
    description: Organize computers into named workspaces
  - name: Computers
    description: Provision and manage virtual computers
  - name: Computer Lifecycle
    description: Start, stop, and restart computers
  - name: Computer Actions
    description: Control mouse, keyboard, and execute commands
  - name: Screens
    description: >-
      More than one desktop on a single computer. Each screen is its own X
      server with its own cursor and window manager, so an agent working on one
      cannot disturb another.
  - name: Files
    description: Upload and download files
  - name: Templates
    description: Author, build, and launch reproducible computers from templates
paths:
  /computers/{id}/screens/{screenId}:
    delete:
      tags:
        - Screens
      summary: Destroy a screen
      description: >-
        Stops a screen's X server, its window manager and every window on it.
        This is not recoverable. The display number is freed. The next screen
        you create takes the lowest free display number from `:100` up, so it
        reuses this one when no lower number is free. The boot screen
        (`default`) cannot be destroyed: a computer with no screen is a computer
        nobody can see. A destroyed screen is dropped from the record, so a
        restart does not bring it back.
      operationId: destroyScreen
      parameters:
        - name: id
          in: path
          required: true
          description: Computer ID
          schema:
            type: string
        - name: screenId
          in: path
          required: true
          description: Screen ID, or `default` for the boot screen.
          schema:
            type: string
      responses:
        '204':
          description: Screen destroyed. The response has no body.
        '400':
          description: >-
            The computer has nothing running behind it: still being created, or
            frozen.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: Computer not available
        '401':
          $ref: '#/components/responses/UnauthorizedWithAccess'
        '402':
          $ref: '#/components/responses/TrialInactive'
        '404':
          description: >-
            No computer with that ID, or the computer runs Windows, whose agent
            has no screens endpoints.
          content:
            application/json:
              schema:
                anyOf:
                  - $ref: '#/components/schemas/Error'
                  - $ref: '#/components/schemas/UpstreamError'
              examples:
                no-computer:
                  summary: Unknown computer
                  value:
                    error: Desktop not found
                windows:
                  summary: A Windows computer
                  value:
                    error: |
                      404 page not found
                    request_id: 7c1e0f4a-9b2d-4a51-8f0c-2d6b1e93a4c7
                    upstream_status: 404
        '409':
          description: >-
            `screenId` is `default`, or no screen with that ID exists on this
            computer. An unknown screen answers `409` here, not `404`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UpstreamError'
              examples:
                default:
                  summary: The boot screen
                  value:
                    error: the default screen cannot be destroyed
                    request_id: 7c1e0f4a-9b2d-4a51-8f0c-2d6b1e93a4c7
                    upstream_status: 409
                unknown:
                  summary: No such screen
                  value:
                    error: no screen "screen-101"
                    request_id: 7c1e0f4a-9b2d-4a51-8f0c-2d6b1e93a4c7
                    upstream_status: 409
        '500':
          description: Unexpected failure.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalError'
              example:
                error: …
                request_id: 7c1e0f4a-9b2d-4a51-8f0c-2d6b1e93a4c7
        '503':
          description: >-
            The computer could not be reached. It may be resuming, or its host
            may be unhealthy. Retry in a moment.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnreachableError'
              example:
                error: Could not reach the desktop. Try again in a moment.
                request_id: 7c1e0f4a-9b2d-4a51-8f0c-2d6b1e93a4c7
                code: ECONNREFUSED
components:
  schemas:
    Error:
      type: object
      description: >-
        The base error body. Every failure carries `error`; individual endpoints
        add the fields named in the schemas below.
      required:
        - error
      properties:
        error:
          type: string
          description: Human-readable message.
          example: Access denied
        code:
          type: string
          description: >-
            Machine-readable reason. Present on the failures that define one,
            absent otherwise.
    UpstreamError:
      type: object
      description: >-
        A failure the computer itself returned, relayed with the computer's own
        status.
      required:
        - error
        - request_id
        - upstream_status
      properties:
        error:
          type: string
          description: The message the computer returned.
        request_id:
          type: string
          description: >-
            Correlation id for this failure. The server logged the failure under
            it, so quote it in a support report.
          example: 7c1e0f4a-9b2d-4a51-8f0c-2d6b1e93a4c7
        upstream_status:
          type: integer
          description: >-
            The status the computer returned. Mirrors the status of this
            response.
          example: 409
    InternalError:
      type: object
      description: >-
        An unexpected failure. Retrying is reasonable; if it persists, quote
        `request_id`.
      required:
        - error
      properties:
        error:
          type: string
        request_id:
          type: string
          description: >-
            Present on failures raised by a route that talks to a computer.
            Absent on the others.
          example: 7c1e0f4a-9b2d-4a51-8f0c-2d6b1e93a4c7
    UnreachableError:
      type: object
      description: >-
        The computer could not be reached. The diagnostic fields, present on the
        command endpoints, say how far the request got.
      required:
        - error
        - request_id
        - code
      properties:
        error:
          type: string
          example: Could not reach the desktop. Try again in a moment.
        request_id:
          type: string
          example: 7c1e0f4a-9b2d-4a51-8f0c-2d6b1e93a4c7
        code:
          type: string
          description: >-
            The socket-level error code, or `network_error` when none was
            reported.
          example: ECONNREFUSED
        vm_status:
          type:
            - string
            - 'null'
          description: The computer's recorded status when the request failed.
        desired_status:
          type:
            - string
            - 'null'
          description: >-
            The status the computer was being driven towards, when one was
            recorded.
        host_reachable:
          type:
            - boolean
            - 'null'
          description: Whether the host running the computer answered.
        desktop_api_reachable:
          type:
            - boolean
            - 'null'
          description: Whether the computer's own API answered.
        hint:
          type: string
          description: What to do next, given the two reachability results.
  responses:
    UnauthorizedWithAccess:
      description: >-
        No usable credential, or an access check failed. This endpoint runs its
        workspace access checks during authentication, so it answers a missing
        membership, view-only access, or a key scoped to another workspace with
        `401`, not `403`. A server-side fault while verifying the credential
        also returns `401`, with a `Service temporarily unavailable` message.
        Retry that one; the key is fine.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            invalid-key:
              summary: The key is not one of yours
              value:
                error: Invalid API key
            no-credential:
              summary: No key and no session
              value:
                error: Authentication required
            no-access:
              summary: Not the owner or a member of the workspace
              value:
                error: You do not have access to this workspace.
            view-only:
              summary: View-only member, and the request changes something
              value:
                error: >-
                  This workspace is view-only. Ask the owner for write access
                  (workspace_read_only).
            scope-mismatch:
              summary: The API key is scoped to another workspace
              value:
                error: >-
                  This API key cannot access this workspace
                  (workspace_scope_mismatch).
            service-unavailable:
              summary: Server-side fault while verifying the credential. Retry.
              value:
                error: >-
                  Service temporarily unavailable. The database is not accepting
                  requests. Retry shortly.
    TrialInactive:
      description: >-
        The computer is a free trial computer whose trial is no longer active,
        or it is paid for by its own subscription or dedicated purchase and that
        payment has lapsed.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            trial:
              summary: Trial no longer active
              value:
                error: Choose a plan to continue.
            payment:
              summary: The computer's own payment has lapsed
              value:
                error: Manage this computer’s payment in Account → Usage.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: API key authentication. Get your key at orgo.ai/workspaces

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.