priority-key set to pc-remote.
See the auto-generated API reference for full request/response schemas.
Shutter
POST /api/cameras/{cameraId}/actions/shutter — take a single photo, or control continuous shooting with {"action": "down"} / {"action": "up"}.
For continuous shooting, set drive mode to a continuous mode first (e.g.
Continuous Hi).Half-Press (Focus Lock)
POST /api/cameras/{cameraId}/actions/half-press — half-press the shutter button to lock autofocus (S1 press). No body required.
AF + Shutter
POST /api/cameras/{cameraId}/actions/af-shutter — autofocus then immediately capture in one operation. No body required.
Zoom
POST /api/cameras/{cameraId}/actions/zoom — control power zoom lenses. Requires a power zoom lens to be attached.
Body: direction (in or out), speed (normal or fast).
Focus Near/Far
POST /api/cameras/{cameraId}/actions/focus-near-far — move focus in discrete steps. Range: -7 (near, max speed) to +7 (far, max speed). Magnitude controls speed. 0 is not valid.
AF Frame Position
GET /api/cameras/{cameraId}/af-area-position — read the camera’s current autofocus frame(s), for drawing a focus box over live view.
Each frame reports its centre three ways: normalized (0–1, use this for overlays at any render size), position (the coordinate space PUT accepts, so a read feeds straight back), and raw (the camera’s own numerator/denominator pair). size.normalized_width / normalized_height give the box dimensions as a fraction of the frame. Drive box colour from state — focused, not-focused, moving, selection, and others.
More than one frame can be returned. Expanding and tracking areas report a main box plus an assist box — an ILCE-7M4 set to Tracking Expand Flexible Spot returns a 38×38
contrast-flexible-main alongside a 76×76 contrast-flexible-assist. Render every entry in frames.Move the AF Frame
PUT /api/cameras/{cameraId}/af-area-position — move the centre of the autofocus frame.
Send
normalized when translating a tap or click on a live view; it saves converting into the SDK’s coordinate space.
That is a usable area of x
65–574, y 61–418 — the middle 80% × 74% of the coordinate space. A write is also ignored outright when the focus area has no movable box.
Remote Touch and Tracking
Tap a point in the live-view frame to seed the camera’s own subject tracking, then read the tracked box back.Moving the box vs. tracking a subject
These are not interchangeable.PUT /af-area-position drags the focus box and leaves it there. The frame stays where you put it until you move it again.
POST /actions/touch seeds the camera’s subject tracking. The camera locks onto whatever is at that point and follows it on its own as it moves — you cannot reproduce that by rewriting positions from a client, because the tracking runs on the camera. A touch also works in focus areas that have no movable box, such as Wide or face priority, where there is nothing for PUT /af-area-position to move.
Both endpoints return the same frame shape, so a single overlay renderer draws either.
Touch a Point
POST /api/cameras/{cameraId}/actions/touch — tap a point, as if someone touched the camera’s own screen there. Same body shape as Move the AF Frame: x / y, or normalized.
MENU > Setup > Touch Operation > Touch Panel Settings > Shooting Screen. Both rows below were measured on an ILCE-7M4.
A touch is accepted even when the body’s Touch Operation is
Off — that setting governs the physical screen, not the remote property.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.
A 400 means the camera reports remote touch as unavailable right now. On the ILCE-7SM3 and ILCE-7C it is movie-mode only; other bodies gate it on focus mode or on live view running.
Get the Tracking Frame
GET /api/cameras/{cameraId}/tracking-frame — read the box the camera is tracking a subject in. Poll it to follow a moving subject; the camera updates the frame on its own once tracking has been seeded.
type is target-af for the subject being tracked, or non-target-af for a candidate the camera is showing but not acting on.
An empty result is normal.
200 with "frames": [] and "available": true means the property was readable and there was simply no subject. A 400 means the property could not be read at all, usually because live view is not running.- A touch, with the body’s Touch Func. in Shooting set to
Touch Tracking. Tracking then holds on its own with no button held. - The camera tracking for its own reasons — a tracking focus area with AF engaged. Holding
af-onin Tracking: Expand Flexible Spot reports atarget-afframe that disappears on release.
Touch Focus, a touch moves the AF frame instead and nothing appears here — read AF Frame Position in that case.
Cancel a Touch
POST /api/cameras/{cameraId}/actions/touch-cancel — release the subject a touch locked onto. No body required.
A
400 here is a safe no-op, not a failure to retry — it means nothing is being tracked. The gate is specifically about a remote touch being in progress: tracking the camera started itself, such as a tracking focus area with af-on held, reports nothing to cancel because there is no remote touch operation to release.Button Press
POST /api/cameras/{cameraId}/actions/button — press a physical button on the camera body, as if someone pressed it by hand.
Combined with live view and the OSD overlay, this is enough to drive the camera’s own menu system remotely and read the result back off the screen — reaching settings that have no property of their own.
Buttons cover the D-pad and multi-selector,
enter, menu, fn, playback, c1–c7, movie, ael, af-on, mode, delete, display, home, clips, slot-select, cancel-back, and thumbnail. See the API reference for the authoritative list.
Holding a button uses the same down / up contract as Shutter.
400 with the camera’s own operable list in data.supported_buttons, so the real set is discoverable at runtime — send a probe press and read the list back rather than hardcoding one.
Response
Movie Recording
POST /api/cameras/{cameraId}/actions/movie-rec — start or stop video recording. This is a toggle action — call once to start recording, call again to stop. Uses the SDK’s hold-style command (Down to start, Up to stop).
Monitor recording state via the recording-state property or propertyChanged SSE events.
Ensure the camera is in a video-capable exposure mode (e.g. Movie mode
0x8050–0x8055) before triggering. Check recording-state to confirm the current state.For typed action helpers, use the SDK pages: TypeScript, Python, or Swift.

