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

# Press a button on the camera body

> Press a physical button — menu, enter, the D-pad, C1-C7, playback and so
on — as if someone pressed it on the body. Combined with live view and
`getOSDFrame` this is enough to drive the camera's own menus remotely and
read the result back off the screen.

Omit `action` for a full press. Send `down` and a later `up` to hold a
button, the same contract as `triggerShutter`.

## Not every body exposes every button

The camera reports which keys it will accept, and that list is much
shorter than the full enum. An ILCE-7M4 reports 24: the D-pad and
multi-selector, `enter`, `menu`, `fn`, `playback`, `c1`-`c4`, `movie`,
`ael` and `af-on` — but **not** `delete`, `mode`, `c5`-`c7`, `display`,
`home`, `clips`, `slot-select`, `cancel-back` or `thumbnail`.

A rejected press returns `400` with the camera's own supported list in
`data.supported_buttons`, so you can discover the real set at runtime.

## Held keys block new presses

The SDK only starts a press while the camera reports itself idle, so a
button already held — by this API or by a hand on the body — makes the
next press fail. A release is never blocked: an `up` always goes through,
so a held key can always be let go.

Requires priority key `pc-remote`.




## OpenAPI

````yaml /openapi.yaml post /api/cameras/{cameraId}/actions/button
openapi: 3.1.0
info:
  title: Alpha Camera REST API
  version: 3.0.0
  description: >
    RESTful control for Sony cameras — shooting, settings, live view with OSD
    overlay,

    focus control, and file transfer through a clean HTTP interface.


    Built on the Sony Camera Remote SDK. Supports USB and network camera
    connections

    with multi-camera simultaneous operation.


    ## Connection Modes


    | Mode | Description |

    |------|-------------|

    | `remote` | Full camera control: shooting, settings, live view.
    Auto-transfer images to host PC. |

    | `remote-transfer` | Camera control + explicit SD card file access. Most
    capable mode. |

    | `contents` | SD card file access only. No shooting or settings control. |


    ## Quick Start


    1. `GET /api/cameras` — discover cameras

    2. `POST /api/cameras/{id}/connection` — connect

    3. `PUT /api/cameras/{id}/priority-key` — set to `pc-remote`

    4. `PUT /api/cameras/{id}/properties/{name}` — configure settings

    5. `POST /api/cameras/{id}/actions/af-shutter` — shoot

    6. `DELETE /api/cameras/{id}/connection` — disconnect


    ## Priority Key Requirement


    The camera's priority key **must** be set to `pc-remote` before it accepts
    any

    remote property changes or shooting commands.
  license:
    name: Proprietary
  contact:
    name: Camera Remote SDK
    url: https://github.com/ocjlee888/camera-remote-sdk-project
servers:
  - url: http://{host}:{port}
    description: |
      Local camera server. The server binary runs on the host that has the
      camera physically connected (USB or network). Defaults to
      `http://localhost:8080`; override `host` and `port` when the server
      runs on a different machine (e.g. a Raspberry Pi next to the camera).
    variables:
      host:
        default: localhost
        description: Host running the camera server binary
      port:
        default: '8080'
        description: Port the camera server is listening on
security: []
tags:
  - name: Connection
    description: Camera discovery, connection, and disconnection
  - name: Properties
    description: Read and write camera properties (ISO, aperture, shutter speed, etc.)
  - name: Actions
    description: Shooting commands and motor control (shutter, zoom, focus)
  - name: Live View
    description: Live view streaming and OSD overlay control
  - name: Events
    description: Server-Sent Events for real-time camera callbacks
  - name: SD Card
    description: SD card file browsing and download
  - name: Settings
    description: Save path configuration and camera settings file management
  - name: Server
    description: Server health, status, and log retrieval
paths:
  /api/cameras/{cameraId}/actions/button:
    post:
      tags:
        - Actions
      summary: Press a button on the camera body
      description: >
        Press a physical button — menu, enter, the D-pad, C1-C7, playback and so

        on — as if someone pressed it on the body. Combined with live view and

        `getOSDFrame` this is enough to drive the camera's own menus remotely
        and

        read the result back off the screen.


        Omit `action` for a full press. Send `down` and a later `up` to hold a

        button, the same contract as `triggerShutter`.


        ## Not every body exposes every button


        The camera reports which keys it will accept, and that list is much

        shorter than the full enum. An ILCE-7M4 reports 24: the D-pad and

        multi-selector, `enter`, `menu`, `fn`, `playback`, `c1`-`c4`, `movie`,

        `ael` and `af-on` — but **not** `delete`, `mode`, `c5`-`c7`, `display`,

        `home`, `clips`, `slot-select`, `cancel-back` or `thumbnail`.


        A rejected press returns `400` with the camera's own supported list in

        `data.supported_buttons`, so you can discover the real set at runtime.


        ## Held keys block new presses


        The SDK only starts a press while the camera reports itself idle, so a

        button already held — by this API or by a hand on the body — makes the

        next press fail. A release is never blocked: an `up` always goes
        through,

        so a held key can always be let go.


        Requires priority key `pc-remote`.
      operationId: pressCameraButton
      parameters:
        - $ref: '#/components/parameters/cameraId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ButtonRequest'
      responses:
        '200':
          description: Button press sent
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CameraResponse'
        '400':
          description: >
            Missing or unknown `button`, invalid `action`, or the camera refused

            the press because a key is already held. When the camera reported
            its

            operable keys they are listed in `data.supported_buttons`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  parameters:
    cameraId:
      name: cameraId
      in: path
      required: true
      description: Camera identifier (e.g. `D10F60149B0C`)
      schema:
        type: string
  schemas:
    ButtonRequest:
      type: object
      required:
        - button
      properties:
        button:
          type: string
          description: |
            Which button to press. Not every body accepts every name — a `400`
            response lists what the connected camera reports as operable.
          enum:
            - up
            - down
            - left
            - right
            - enter
            - menu
            - multi-selector-up
            - multi-selector-down
            - multi-selector-left
            - multi-selector-right
            - multi-selector-enter
            - multi-selector-right-up
            - multi-selector-right-down
            - multi-selector-left-up
            - multi-selector-left-down
            - fn
            - playback
            - delete
            - mode
            - c1
            - c2
            - c3
            - c4
            - c5
            - c6
            - c7
            - movie
            - ael
            - af-on
            - home
            - clips
            - slot-select
            - display
            - cancel-back
            - thumbnail
        action:
          type: string
          enum:
            - press
            - down
            - up
          description: >
            `down` to hold and `up` to release. Omit (or send `press`) for a
            full

            down-then-up. An `up` is always accepted so a held key can be

            released.
    CameraResponse:
      type: object
      description: |
        Generic envelope returned by most camera operations. The shape of
        `data` varies per endpoint — most operations return an empty or
        null `data`; operations that return structured data document a
        specific shape. SDK-generated types can treat `data` as an opaque
        map for generic endpoints.
      required:
        - success
      properties:
        success:
          type: boolean
        message:
          type: string
        camera:
          $ref: '#/components/schemas/CameraSummary'
        data:
          type: object
          additionalProperties: true
    ErrorResponse:
      type: object
      description: |
        Standard non-2xx response envelope. The API does not currently expose a
        stable machine-readable error code in the JSON body, so clients should
        branch on HTTP status first and then inspect `message` for the
        human-readable reason.
      example:
        success: false
        message: Camera not connected
        camera:
          connected: false
          model: ILCE-7M4
          id: D06CE05E3323
      required:
        - success
        - message
      properties:
        success:
          type: boolean
          const: false
          example: false
        message:
          type: string
          example: Camera not connected
        camera:
          $ref: '#/components/schemas/CameraSummary'
    CameraSummary:
      type: object
      description: Camera info embedded in API responses
      properties:
        connected:
          type: boolean
          example: false
        model:
          type: string
          example: ILCE-7M4
        id:
          type: string
          example: D06CE05E3323

````