- API errors reject an HTTP request.
- Phone-control errors occur over the Device Control Protocol.
- Run failures happen after a workflow run was accepted.
- Dashboard live-video errors affect the browser viewer separately from SDK or CLI control.
API errors
HTTP failures use a Problem Details JSON body with a status and human-readable detail. Validation responses can also include field-specific errors.- CLI
- Python SDK
- Go SDK
- REST API
The CLI writes errors to standard error and returns a stable exit status:
CLI exit statuses
Branch on the status rather than parsing human-readable error text.Phone-control errors
Python maps stable phone-control error codes to exception classes. Go returns*mobile.Error
with Code, Message, and Retryable. The CLI maps them to the exit statuses
above.
Prefer the
retryable value carried by the actual error over a table default.
The SDK transport automatically attempts bounded reconnect and cursor resume
before it surfaces a connection error.
- CLI
- Python SDK
- Go SDK
session_ended, create or select a live session. For control_held, close
or coordinate with the existing controller instead of retrying against the
one-controller guardrail. See Reconnect and resume
for the transport contract.
Workflow-run failures
Creating a run can succeed while the run later fails waiting for a phone or executing workflow code. A successful fetch of a failed run still returns HTTP200 and CLI exit status 0; branch on the run’s status field.
- CLI
- Python SDK
- Go SDK
- REST API
error_message for the terminal reason. Inspect the run’s
Telemetry and
retained record for the execution sequence and output
logs.
Dashboard live-video errors
The Dashboard can report that it could not reach the live phone, lost the connection, or reached the live-viewer limit. These messages describe the browser’s WebRTC video and input path, not the DCP connection used by the CLI and SDKs. After an established video connection drops, the Dashboard retries up to three times before presenting Reconnect. A viewer-limit message means another Dashboard or embedded viewer occupies the available slot; close one before reconnecting. The CLI and SDKs do not expose this Dashboard live-video state. If you already control the same session, test the independent DCP path:- CLI
- Python SDK
- Go SDK
Report a persistent problem
Include the method or command, error status or code, affected resource IDs, approximate time, and whether the live-video path, control path, or both were affected. Do not share API keys, session credentials,control_url,
telemetry_url, or live_view_url.
Next steps
Configuration
Configure credentials, retries, timeouts, and client state.
Session lifecycle
Understand session and connection deadlines.
Live view
Protect and recover the browser viewer.