Skip to main content
The REST API sends touch and keyboard input to your iPhones and takes screenshots. It has the same actions that agents get through MCP, for code that doesn’t use an agent framework.

Base URL

Authentication

Send an API key in the X-API-Key header. Create keys in the web app. Keys start with tk_.
A key has access to every phone in your organization. Keep it out of source control and client-side code.

Before you call an action

A phone accepts actions when its Mac app is open and signed in, the phone is connected, unlocked, and set up in the Mac app, and the phone is active on your subscription. List phones returns each phone’s ID and connection_status.

Coordinates

Coordinates are integer pixels on the phone’s screen, measured from the top-left corner. They match the pixels of a screenshot. List phones reports each screen’s width and height.

Jobs

Every action runs as a job on the phone’s Mac. By default, a request waits up to 60 seconds for the job to finish and then returns it:
status is pending, running, completed, or failed. A failed action still returns HTTP 200, with the reason in result.error. If an action doesn’t finish in 60 seconds, its job fails with "error": "TIMEOUT". Add ?async=true to get the job ID back immediately, then poll Get job:

Errors

Other errors return an HTTP error status, with details under detail: