Interactive browser viewer
The dashboard opens the interactive viewer for an owned, ready session. It sends mouse and keyboard interactions to that phone while displaying live video.GET /sessions/{sid}/owner-viewer returns an authenticated viewer URL and its expiry:
Illustrative response
The current owner viewer is configured for the Phone Harness dashboard’s embedding origin. The endpoint is not a general-purpose SDK for embedding a controllable phone on any website. Use the dashboard for hands-on access and the operations API for your automation.
Download a snapshot
image/jpeg for compatible providers, so inspect Content-Type when building a general client.
This is a still-image endpoint. It coalesces captures, attempts to refresh at most once every two seconds, and can return a cached image while another operation is running. It does not keep a session alive and is not a real-time streaming endpoint.
409 means the session is not ready or is closing. 503 with no frame yet means no snapshot is available yet.
Capture over ADB
Once connected with ADB, a screenshot is one command:Read-only sharing
watch_url opens the same live video as the dashboard, without control: the page cannot tap, type or install anything. It carries a limited view grant, valid for six hours, that also allows reading the session’s metadata and snapshots, so share it only with intended viewers.
Behind the page is GET /sessions/{sid}/viewer, which mints the view-only viewer URL. The owner may call it with a bearer credential; the watch link passes its grant as token. The URL is opaque and bounded by the phone’s deadline, like the owner viewer.
Legacy /stream, /ws, and control-ticket transports are retired. Use the owner viewer or snapshots instead.