> ## 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.

# Resize a screen

> Change a screen’s resolution.

Resizes a screen in place with `xrandr`, so the X server is not restarted and
every window already open on the screen is kept.

## 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, or `default` for the boot screen.
</ParamField>

## Body parameters

<ParamField body="width" type="integer" required>
  New width in pixels. Must be `1` or greater.
</ParamField>

<ParamField body="height" type="integer" required>
  New height in pixels. Must be `1` or greater.
</ParamField>

Both are required here, unlike [create](/api-reference/screens/create), which
falls back to the size of the boot screen. A resize is an explicit change, so
there is no fallback. A missing, zero, or negative dimension is refused with
`400` and the message `width and height are required`.

## Response

Returns the [screen](/api-reference/screens/list) with its new `width` and
`height`. Every other field is unchanged: resizing does not move a screen to a
different display, and its `vnc_port` and `ws_port` stay where they were.

An extra screen's new size is recorded before the response, so the screen comes
back at that size after a restart, as described in
[Screens after a restart](/api-reference/screens/list#screens-after-a-restart).
The boot screen's size is not recorded: after a restart, `default` is back at
the size the computer boots with.

## Errors

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

| Status | When | Body |
| - | - | - |
| `400` | The computer has nothing running behind it: still being created, or frozen. | `{ "error": "Computer not available" }` |
| `400` | `width` or `height` is missing, zero or negative. | `{ "error": "width and height are required", "request_id": "…", "upstream_status": 400 }` |
| `400` | `width` or `height` is not an integer. | `{ "error": "invalid JSON: …", "request_id": "…", "upstream_status": 400 }` |
| `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 }` |
| `500` | The resize failed on the computer, or the screen ID does not exist. | `{ "error": "…", "request_id": "…", "upstream_status": 500 }` |
| `503` | The computer could not be reached. | `{ "error": "Could not reach the desktop. Try again in a moment.", "request_id": "…", "code": "ECONNREFUSED" }` |

<Warning>
  Resizing a screen ID that does not exist answers `500` with
  `no screen "<id>"`, not `404`. [Get](/api-reference/screens/get) is the
  reliable existence check: it answers `404` for an unknown screen.
</Warning>

<RequestExample>
  ```bash cURL theme={null}
  curl -X PATCH https://www.orgo.ai/api/computers/$COMPUTER_ID/screens/screen-100 \
    -H "Authorization: Bearer $ORGO_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{"width": 1280, "height": 720}'
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "id": "screen-100",
    "display": ":100",
    "width": 1280,
    "height": 720,
    "vnc_port": 6000,
    "ws_port": 6081,
    "default": false
  }
  ```
</ResponseExample>


## OpenAPI

````yaml PATCH /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}:
    patch:
      tags:
        - Screens
      summary: Resize a screen
      description: >-
        Changes a screen's resolution. Both dimensions are required. An extra
        screen's new size is recorded, so it comes back at that size after a
        restart. The boot screen's size is not recorded.
      operationId: resizeScreen
      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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScreenResizeRequest'
            examples:
              resize:
                summary: Resize to 1280x720
                value:
                  width: 1280
                  height: 720
      responses:
        '200':
          description: >-
            The resized screen. Every other field is unchanged: a resize does
            not move a screen to another display, and its ports stay where they
            were.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Screen'
        '400':
          description: >-
            The computer has nothing running behind it, or `width` or `height`
            is missing, zero, negative, or not an integer.
          content:
            application/json:
              schema:
                anyOf:
                  - $ref: '#/components/schemas/Error'
                  - $ref: '#/components/schemas/UpstreamError'
              examples:
                not-available:
                  summary: Nothing running
                  value:
                    error: Computer not available
                missing:
                  summary: Missing dimension
                  value:
                    error: width and height are required
                    request_id: 7c1e0f4a-9b2d-4a51-8f0c-2d6b1e93a4c7
                    upstream_status: 400
        '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
        '500':
          description: >-
            The resize failed on the computer, or the screen ID does not exist.
            An unknown screen answers `500`, not `404`.
          content:
            application/json:
              schema:
                anyOf:
                  - $ref: '#/components/schemas/UpstreamError'
                  - $ref: '#/components/schemas/InternalError'
              example:
                error: no screen "screen-101"
                request_id: 7c1e0f4a-9b2d-4a51-8f0c-2d6b1e93a4c7
                upstream_status: 500
        '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:
    ScreenResizeRequest:
      type: object
      description: >-
        The new size. Both dimensions are required here, unlike creating a
        screen. There is no boot screen to fall back to when the intent is an
        explicit change.
      required:
        - width
        - height
      properties:
        width:
          type: integer
          minimum: 1
          description: New width in pixels.
          example: 1280
        height:
          type: integer
          minimum: 1
          description: New height in pixels.
          example: 720
    Screen:
      type: object
      properties:
        id:
          type: string
          description: Screen identifier. The boot screen is always `default`.
          example: screen-100
        display:
          type: string
          description: X display this screen runs on.
          example: ':100'
        width:
          type: integer
          description: Width in pixels.
          example: 1920
        height:
          type: integer
          description: Height in pixels.
          example: 1080
        vnc_port:
          type: integer
          description: VNC port for this screen.
          example: 6000
        ws_port:
          type: integer
          description: WebSocket port for this screen.
          example: 6081
        default:
          type: boolean
          description: True for the screen the computer boots with. It cannot be destroyed.
          example: false
    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.