Error codes
API errors, HTTP statuses and runner exit codes.
On this page
API errors
| Status | Code | Meaning |
|---|---|---|
| 400 / 415 | invalid_request | The body doesn’t match the supported schema. |
| 401 | unauthorized | Missing or expired owner session. |
| 401 | credential_revoked | The runner credential was revoked. |
| 403 | forbidden | Not permitted. |
| 404 | not_found | Unknown, or belongs to another account. |
| 409 | conflict | Stale revision, or an immutable ID reused with different content. |
| 409 | lease_expired | The runner’s lease expired. |
| 413 | invalid_request | The body is too large. |
| 503 | internal_error | Busy or timed out. Retry with the same ID and body. |
Retrying safely
Request IDs are generated by the caller. Retry an uncertain request with the same ID and unchanged body: a matching retry returns the original receipt; different content returns 409. Never generate a fresh ID for a request whose outcome you don’t know.
Runner exit codes
| Code | Meaning |
|---|---|
| 0 | Completed, or no work |
| 1 | Invalid or failed |
| 3 | Revoked or unauthorised |
| 4 | API or provider unavailable |
| 5 | Lease expired |