Errors
Errors
BeatAPI reports every failure with one of a fixed set of codes. The code is the part to branch on; the message is a sentence written for a person. Neither ever repeats what a model provider told us — no provider names, no provider status codes, no provider error text. Keep request_id for support.
Where a failure shows up
A task can fail at two points, and they look different:
- When you create it. The request is refused before a task exists. You get an HTTP error with an
errorobject and nodata.id. Nothing is charged. - After it was accepted.
POSTreturned201withdata.id. The task later ends asstatus: "failed".GET /v1/tasks/{task_id}still answers200; the failure is indata.error_codeanddata.error_message, and the credits reserved for the task are refunded.
The same failure carries the same code in both places, and in the error line of your usage log (content_policy_violation: The request was blocked…).
Codes
processing_unavailable and rate_limit_exceeded are different things. rate_limit_exceeded is about your request rate and tells you to slow down. processing_unavailable says the model could not take work right now; your requests were fine.
Retry policy
- Never retry unchanged:
content_policy_violation,bad_request,unauthorized,forbidden,insufficient_credits,idempotency_conflict. - Retry after a wait:
rate_limit_exceeded,user_concurrency_exceeded(honourretry_after_secondswhen present),processing_unavailable. - Retry with backoff:
processing_timeout,processing_failed,result_transfer_failed,internal_error. Use exponential backoff and a cap; a task that failed was refunded, so a new attempt is a new charge only if it succeeds.
Changes
- 2026-09-23 — A task that fails after acceptance because of a rejected parameter or an unreachable input now reports
bad_request(it wasprocessing_failed). A model provider’s own status code is no longer passed through at create: a moderation refusal is always400 content_policy_violation, and a provider being unavailable is503 processing_unavailable. A low balance at create is402 insufficient_credits.

