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

# Send key combination

> Send a key combination in XDO-style syntax (e.g., 'ctrl+a', 'alt+tab').

Join keys with `+` to press them together as one chord (e.g. `ctrl+a`); a chord may
combine multiple modifiers (`ctrl`/`alt`/`shift`/`win`) but only one non-modifier key.
Separate keys with spaces to press them one after another (e.g. `down down down`). Using
`+` between repeated or multiple non-modifier keys (e.g. `down+down+down`) is invalid — use
spaces instead (`down down down`).

When `down` is omitted, the key is pressed and released normally. Pass `down=true` to
press and hold the key (without releasing), and `down=false` to release a key that was
previously held.



## OpenAPI

````yaml /openapi.json post /v1/computer/{machine_id}/input/keyboard/key
openapi: 3.1.0
info:
  title: Cyberdesk Cloud
  description: >-
    The Cyberdesk API provides programmatic access to all platform features,
    enabling you to automate desktop tasks at scale.
  version: 1.0.0
servers:
  - url: https://api.cyberdesk.io
    description: Production server
  - url: https://cyberdesk-api-dev.fly.dev
    description: Development server
security: []
paths:
  /v1/computer/{machine_id}/input/keyboard/key:
    post:
      tags:
        - computer
      summary: Send key combination
      description: >-
        Send a key combination in XDO-style syntax (e.g., 'ctrl+a', 'alt+tab').


        Join keys with `+` to press them together as one chord (e.g. `ctrl+a`);
        a chord may

        combine multiple modifiers (`ctrl`/`alt`/`shift`/`win`) but only one
        non-modifier key.

        Separate keys with spaces to press them one after another (e.g. `down
        down down`). Using

        `+` between repeated or multiple non-modifier keys (e.g.
        `down+down+down`) is invalid — use

        spaces instead (`down down down`).


        When `down` is omitted, the key is pressed and released normally. Pass
        `down=true` to

        press and hold the key (without releasing), and `down=false` to release
        a key that was

        previously held.
      operationId: keyboard_key_v1_computer__machine_id__input_keyboard_key_post
      parameters:
        - name: machine_id
          in: path
          required: true
          schema:
            type: string
            title: Machine Id
        - name: Idempotency-Key
          in: header
          required: false
          description: >-
            Unique key for idempotent requests. If provided, the server ensures
            the request is processed at most once. Retries with the same key
            return the original response. SDKs auto-generate this for write
            requests.
          schema:
            type: string
            example: 550e8400-e29b-41d4-a716-446655440000
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/KeyboardKeyRequest'
      responses:
        '204':
          description: Successful Response
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
components:
  schemas:
    KeyboardKeyRequest:
      properties:
        text:
          type: string
          title: Text
        down:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Down
          description: >-
            None = full press (down + up), True = press key down and hold, False
            = release a key previously held with down=True
      type: object
      required:
        - text
      title: KeyboardKeyRequest
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          additionalProperties: true
          title: Context
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
  securitySchemes:
    HTTPBearer:
      type: http
      scheme: bearer

````