Get back
in the flow.
Predictable errors and a clear way to recover.
Every error includes error, code, and requestId. Share the request id when debugging; never share an API key or password.
Error response
{
"error": "Project changed. Fetch its current revision before saving.",
"code": "revision_conflict",
"requestId": "request-uuid"
}Status codes
| Status | What to do |
|---|---|
| 400 · invalid request | Check fields against the endpoint documentation |
| 401 · unauthorized | Sign in again, or replace an invalid / revoked key |
| 402 · plan or credits needed | Choose a plan, or top up credits in Plan & usage |
| 403 · forbidden | Check scopes and the browser request origin |
| 404 · not found | Check the id and that it belongs to this account |
| 409 · conflict | Read current state and rebase your change |
| 413 · too large | Reduce payload size or free up media storage on your account |
| 415 · media type | Use application/json for JSON endpoints |
| 422 · checksum mismatch | Re-upload the original media chunks |
| 429 · rate limited | Respect Retry-After before retrying |
| 500 / 503 · unavailable | Retry reads with backoff; inspect before repeating writes |
Retry without duplicate work
For project creation, send your own stable id and expectedRevision: 0. For updates, send the last observed revision. For live editor edits, retry the exact same command id and batch. Do not blindly retry a mutation with a new id when the result is uncertain.
Keep exploring the APIBuilt for work that stays editable.