Errors
On this page
The envelope #
/api/v1 has the same body, whatever the status.
{
"error": {
"id": "err_3f9a1c07b2de",
"code": "budget_exhausted",
"message": "This agent has used 5 of 5 credits today. It resets at 00:00 UTC. Maya Chen can raise the cap in Developer.",
"resetsAt": "2026-10-07T00:00:00Z",
"askAHuman": "Maya Chen can raise the cap in Developer."
}
}| Field | Meaning |
|---|---|
id | err_ and 12 hex characters. Quote it when you report a problem. |
code | |
message | |
field | |
resetsAt, askAHuman, deletedAt, restoreUntil. |
validation. A framework error with no code of its own becomes unauthenticated, forbidden, not_found, validation or conflict for 401, 403, 404, 400 and 409, and http_<status> for anything else. Anything unclassified is a 500 internal.
Three other shapes #
OAuth endpoints answer { "error": "invalid_grant", "error_description": "…" }as OAuth requires.MCP answers with JSON-RPC. A protocol fault is a JSON-RPC errorobject with one of the codes -32700, -32600, -32601, -32602 or -32603. A tool that fails is a successful JSON-RPC result withisError: trueandstructuredContent: { "error": "<code>", "message": … }. See Connect an agent.The event stream reports a failed step as an event of kind: "failed"in the stream, not as an HTTP error.
Codes #
Credentials and access #
| Code | Status | Meaning and what to do |
|---|---|---|
invalid_key | 401 | bz_live_) only works under /api/v1, an agent token (bz_mcp_live_) only under /mcp. The response carries a WWW-Authenticate challenge. |
key_not_allowed | 403 | |
scope_missing | 403 | |
human_only | 403 | |
forbidden | 403 | |
origin_refused | 403 | Origin header that is not the app’s own origin. |
site_mismatch | 403 | ?site= on the address names a different site from the one the agent is bound to. |
rate_limited | 429 | Retry-After. |
budget_exhausted | 429 | resetsAt and askAHuman; Retry-After is the seconds until 00:00 UTC. |
workspace_deleted | 410 | deletedAt and restoreUntil. |
workspace_paused | 409 | |
switch_on | 409 |
Requests and the engine #
| Code | Status | Meaning and what to do |
|---|---|---|
validation | 400 · 422 | field names it when one field is to blame. |
not_found | 404 | |
not_built_yet | 501 | |
invalid_url | 400 | https://. |
unsafe_url | 400 | |
unsupported_pdf | 415 | |
internal | 500 | error.id when you report it. |
provider_unavailable | 503 | Retry-After: 60. Nothing changed. |
not_configured | 500 |
Credits #
| Code | Status | Meaning and what to do |
|---|---|---|
insufficient_credits | 402 | |
plan_limit | 409 |
Articles, sites and columns #
| Code | Status | Meaning and what to do |
|---|---|---|
article_exists | 409 | alsoNew: true, or supersedes with the id of the one to replace. |
article_archived | 409 | |
article_generating | 409 | |
invalid_language | 422 | language the engine cannot write: a code in a + list that is not one of the 22 supported, is listed twice or is empty, a value with a space in it, or, when adding languages to an article, a code that is empty, the article’s own, already a version of it, or an article whose own language is not one of the 22. field is language or languages. |
not_primary | 422 | primaryArticleId. |
still_writing | 409 | |
article_changed | 409 | expectedVersion. Nothing changed. Read it again. |
site_not_ready | 409 | |
site_reading | 409 | |
column_not_ready | 409 | flagged: true to write it anyway, with its single-source claims marked. |
column_written | 409 | |
source_exists | 409 | |
too_many_sources | 409 |
Edits #
| Code | Status | Meaning and what to do |
|---|---|---|
source_unreadable | 422 | |
unreadable_source | 422 | |
source_does_not_support | 422 | |
grouping_unavailable | 503 | |
rewrite_added_claims | 422 | |
block_not_rewritable | 422 | |
table_row_not_editable | 422 | |
wrong_unit_kind | 422 | |
unsourced_statement | 422 | |
sources_not_checked | 422 | |
text_required | 400 | |
text_too_long | 400 | |
cells_mismatch | 422 | |
invalid_structure_edit | 400 | |
last_paragraph | 422 | |
paragraph_first | 422 | |
flagged_removal_needs_person | 409 |
Jobs #
| Code | Status | Meaning and what to do |
|---|---|---|
job_not_paused | 409 | |
step_mismatch | 409 | |
job_settled | 409 | |
step_not_optional | 400 | seo, illustrate, or a language version step such as write-es) can be skipped. The others change what the article claims about its sources. |
Export and delivery #
| Code | Status | Meaning and what to do |
|---|---|---|
approval_required | 409 | |
export_blocked_flagged | 409 | |
report_too_large | 422 | |
render_unavailable | 503 | |
connection_in_use | 409 | |
no_connection | 409 | export.render with wordpress. The site has no WordPress connection. |
Illustrations #
| Code | Status | Meaning and what to do |
|---|---|---|
illustrations_off | 503 | |
illustration_regenerating | 409 | |
no_illustration | 409 | |
beat_article | 409 |
Other #
| Code | Status | Meaning and what to do |
|---|---|---|
conflict | 409 | |
unauthenticated | 401 | invalid_key. |
http_<status> | other |