Base URL
Authentication
All API endpoints require an API key in theX-API-Key header:
joot_ followed by a random string.
Response format
All responses are JSON. Successful responses return the requested data:Error responses
Errors return a consistent format:| Code | HTTP Status | Description |
|---|---|---|
INVALID_API_KEY | 401 | API key is invalid or revoked |
AUTH_REQUIRED | 401 | No authentication provided |
SUBSCRIPTION_REQUIRED | 402 | No active subscription |
PHONE_NOT_FOUND | 404 | Phone ID doesn’t exist |
SESSION_NOT_FOUND | 404 | Session ID doesn’t exist |
PHONE_NOT_CONNECTED | 400 | Phone not connected to any Mac |
MAC_APP_NOT_RUNNING | 400 | Mac companion app is offline |
TASK_ALREADY_RUNNING | 409 | Agent task already running on phone |
TIMEOUT | 408 | Operation timed out |
SCREENSHOT_FAILED | 500 | Screenshot capture failed |
EMPTY_BODY | 400 | Required request body missing |
Sync vs async mode
Most action endpoints support both synchronous and asynchronous execution.Synchronous (default)
Request blocks until the action completes:Asynchronous
Add?async=true to return immediately with a job ID:
GET /v1/jobs/{job_id} to check status.
What’s next
Sessions
Understand the core concept — how agent-controlled phone interactions work.
Phones
Learn what you can control on a phone via the API.
Devices
List and manage connected phones.
Actions
Explore touch gestures, screenshots, and device control.