Errors
Every failing request returns the same JSON shape, with an HTTP status that
matches. Branch on error.code — it is a stable part of the API contract.
Never parse error.message, which is written for humans and may change.
detail is deprecated. It mirrors error.message so older clients keep
working, and will be removed in a future release.
Retry behaviour
retryable tells you whether to back off and try again, or fix the request
first. Retrying a non-retryable error will fail identically every time.
On 429 (rate_limited), wait the number of seconds in the Retry-After
header before retrying.
Validation errors
A 422 lists exactly which fields are wrong, so you can correct them without
guessing:
Error codes
Authentication and authorization
Workspaces
Sandboxes
A sandbox you can’t access reports sandbox_not_found, not forbidden.
Confirming that someone else’s sandbox exists would leak information, so the
two cases are deliberately indistinguishable.