Skip to main content
A failed request returns a single error object. HTTP status and error.code are stable. error.message is human-readable and may be reworded at any time.

The error envelope

Error types

Two failures share HTTP 429 and call for opposite responses. A rate_limit means you are asking too fast, so back off and retry. A quota_exceeded means a ceiling is full, and backing off will not help until something already running finishes.

Inference codes

Inputs resolve before roles are checked, so a bad asset is reported ahead of an illegal combination. param points at the offending input as a dot-path, such as reference.0 for arrays. A generation that fails after the 202 records the failure on the run, where status is failed and error appears on GET /v1/runs/{id}. /status returns a normal response describing the failed run, not a second HTTP error.

Session codes

Rate limits and retries

429 and 503 responses may include Retry-After in seconds. Use that delay before retrying. Submitting runs too quickly returns run.rate_limited, and starting sessions too quickly returns session_start_rate_limited. A full ceiling clears when an active run finishes, which /status tracks. Monitor queued runs there rather than resubmitting them. A retry with a changed body needs a new Idempotency-Key.

Quota exhaustion

error.code names whichever resource ran out. Credits return 402 with insufficient_credit_balance. Runtime ceilings such as concurrent sessions return 429.

Incidents

Active incidents are posted at status.protoface.com. If a request fails unexpectedly and nothing is listed there, contact support with the request_id from the error response.