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

# Touch a point in the frame

> Tap a point in the live-view frame, as if someone touched the camera's own
screen there. Send absolute coordinates (`x` 0-639, `y` 0-479) or
`normalized` 0-1 values — the latter is what you want for a tap or click
on a live view.

## This is not `setAFAreaPosition`

`setAFAreaPosition` drags the focus box to a point and leaves it there. A
touch **seeds the camera's subject tracking**: the camera locks onto
whatever is at that point and then follows it on its own. You cannot get
that by rewriting positions from a client. Touch also works in focus areas
that have no movable box — Wide, face priority — where
`setAFAreaPosition` has nothing to move.

Read the result with `getTrackingFrame`.

## The camera decides what a touch does

The SDK property that would select the touch behaviour
(`FunctionOfRemoteTouchOperation`) is unsupported on Alpha bodies
including the ILCE-7M4 — only broadcast bodies can choose. A touch does
whatever the body's own **Touch Func. in Shooting** is set to
(`MENU > Setup > Touch Operation > Touch Panel Settings > Shooting
Screen`), and that setting is not exposed over this API:

| Touch Func. in Shooting | What `remoteTouch` does |
|---|---|
| `Touch Focus` (ILCE-7M4 default) | Moves the AF frame, like `setAFAreaPosition`. `getTrackingFrame` stays empty. |
| `Touch Tracking` | Starts subject tracking at the point. `getTrackingFrame` reports the box. |

Both were measured on an ILCE-7M4. Note the touch is accepted **even when
the body's `Touch Operation` is `Off`** — that setting governs the
physical screen, not the remote property.

## A 200 does not mean tracking started

The camera accepts the write and then decides. With `Touch Tracking` set,
a touch on a point with nothing trackable — measured on flat wall and
blown-out window areas — returns `200` and produces no tracking frame at
all. **Always read `getTrackingFrame` to find out what actually
happened.**

Touches land close to where they are asked for but not exactly: the
camera snaps to the nearest feature it can hold. Measured on an ILCE-7M4,
`320,240` landed at `320,239` and `200,300` at `209,297`, while points
near the edges pulled further in — `0,479` landed at `35,445`.

Leave a beat between touches. Firing several within a second or so, or
immediately after a `cancelRemoteTouch`, made the camera drop tracking
entirely until it was left alone.

## When this returns 400

Touch is gated on the camera reporting it as currently available. On the
ILCE-7SM3 and ILCE-7C it is movie-mode only; other bodies gate it on focus
mode or on live view running. A rejected touch says which gate failed.

Requires priority key `pc-remote`.




## OpenAPI

````yaml /openapi.yaml post /api/cameras/{cameraId}/actions/touch
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/touch:
    post:
      tags:
        - Actions
      summary: Touch a point in the frame
      description: >
        Tap a point in the live-view frame, as if someone touched the camera's
        own

        screen there. Send absolute coordinates (`x` 0-639, `y` 0-479) or

        `normalized` 0-1 values — the latter is what you want for a tap or click

        on a live view.


        ## This is not `setAFAreaPosition`


        `setAFAreaPosition` drags the focus box to a point and leaves it there.
        A

        touch **seeds the camera's subject tracking**: the camera locks onto

        whatever is at that point and then follows it on its own. You cannot get

        that by rewriting positions from a client. Touch also works in focus
        areas

        that have no movable box — Wide, face priority — where

        `setAFAreaPosition` has nothing to move.


        Read the result with `getTrackingFrame`.


        ## The camera decides what a touch does


        The SDK property that would select the touch behaviour

        (`FunctionOfRemoteTouchOperation`) is unsupported on Alpha bodies

        including the ILCE-7M4 — only broadcast bodies can choose. A touch does

        whatever the body's own **Touch Func. in Shooting** is set to

        (`MENU > Setup > Touch Operation > Touch Panel Settings > Shooting

        Screen`), and that setting is not exposed over this API:


        | Touch Func. in Shooting | What `remoteTouch` does |

        |---|---|

        | `Touch Focus` (ILCE-7M4 default) | Moves the AF frame, like
        `setAFAreaPosition`. `getTrackingFrame` stays empty. |

        | `Touch Tracking` | Starts subject tracking at the point.
        `getTrackingFrame` reports the box. |


        Both were measured on an ILCE-7M4. Note the touch is accepted **even
        when

        the body's `Touch Operation` is `Off`** — that setting governs the

        physical screen, not the remote property.


        ## A 200 does not mean tracking started


        The camera accepts the write and then decides. With `Touch Tracking`
        set,

        a touch on a point with nothing trackable — measured on flat wall and

        blown-out window areas — returns `200` and produces no tracking frame at

        all. **Always read `getTrackingFrame` to find out what actually

        happened.**


        Touches land close to where they are asked for but not exactly: the

        camera snaps to the nearest feature it can hold. Measured on an
        ILCE-7M4,

        `320,240` landed at `320,239` and `200,300` at `209,297`, while points

        near the edges pulled further in — `0,479` landed at `35,445`.


        Leave a beat between touches. Firing several within a second or so, or

        immediately after a `cancelRemoteTouch`, made the camera drop tracking

        entirely until it was left alone.


        ## When this returns 400


        Touch is gated on the camera reporting it as currently available. On the

        ILCE-7SM3 and ILCE-7C it is movie-mode only; other bodies gate it on
        focus

        mode or on live view running. A rejected touch says which gate failed.


        Requires priority key `pc-remote`.
      operationId: remoteTouch
      parameters:
        - $ref: '#/components/parameters/cameraId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TouchRequest'
      responses:
        '200':
          description: |
            Touch sent. Confirm what the camera locked onto with
            `getTrackingFrame`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CameraResponse'
        '400':
          description: |
            Missing or malformed coordinates, coordinates out of range, or the
            camera reports remote touch as unavailable right now.
          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:
    TouchRequest:
      type: object
      description: >
        Supply either `x` and `y`, or a `normalized` object. If both are
        present,

        `normalized` wins. Same coordinate space as `AFAreaPositionRequest`.
      properties:
        x:
          type: integer
          minimum: 0
          maximum: 639
          description: Touch point X in the camera's coordinate space.
        'y':
          type: integer
          minimum: 0
          maximum: 479
          description: Touch point Y in the camera's coordinate space.
        normalized:
          type: object
          description: >
            Touch point as 0-1 fractions of the live view — use this for a tap
            or

            click position without converting to the SDK's coordinate space.
          properties:
            x:
              type: number
              minimum: 0
              maximum: 1
            'y':
              type: number
              minimum: 0
              maximum: 1
    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

````