Skip to content

Errors

Every error is a JSON object with code (a stable code for programs), error (a short message for people), requestId and retryable (whether repeating the same request later can succeed), plus category and severity. The request ID is also returned in the X-Request-Id header. Responses never contain a stack, a raw provider error or internal prices.

When present, acceptance: "rejected" certifies that the command was refused before acceptance. Without that confirmation, a lost response, network failure or HTTP error alone does not prove that no task was created. Retain the original body, quoteId and Idempotency-Key; check the original operation or repeat the same command. retryable does not authorize a new purchase with a different key.

An unexpected failure is 500 with the code DEVELOPER_API_ERROR (DEVELOPER_TTS_ERROR on /api/v1/tts); a failure to create an already admitted operation is 500 with PODCAST_CREATE_FAILED or NEWS_CREATE_FAILED.

For an accepted Podcast or News episode, reasons for later paid-action refusals arrive in task status, not as an HTTP response to the original create call. Low balance produces paused_insufficient_credits and is not a failure.

A provider funding wait before another model call appears in optional recovery.reasonCode: PROVIDER_FUNDING_READ_UNAVAILABLE means the check is temporarily unavailable; PROVIDER_FUNDING_INSUFFICIENT means the check measured insufficient provider funds. This is not a generation failure or low owner credit balance: retain the original operation and check its status. Invalid credentials or configuration are not treated as this automatic wait.

For failed News, task.errorCode contains only a stable product code. It does not expose quotations, private research context or provider error text. For NEWS_EVIDENCE_INSUFFICIENT, check retained material availability and ownership; for a substantive gap, refine the topic or available materials. A service or provider failure requires checking status and receipt first. Admissible retained work can continue from the Mini App; an unknown external result does not authorize a repeat without proof. Repeating creation of an accepted task with the same idempotency key returns that existing task.

Code HTTP When
API_KEY_REQUIRED 401 no Authorization: Bearer header
INVALID_API_KEY_FORMAT 401 the Authorization header is not Bearer <key>
INVALID_API_KEY 401 the key is not found
API_KEY_REVOKED, API_KEY_EXPIRED 401 the key is revoked or expired
API_KEY_SCOPE_DENIED 403 the key lacks the needed scope
API_KEY_RATE_LIMITED 429 the per-minute request limit is exceeded
API_KEY_QUOTA_EXCEEDED 402 or task errorCode the key’s quota is not enough
INSUFFICIENT_CREDITS 402 the owner’s balance is not enough
OPERATION_SPENDING_LIMIT task errorCode the next request exceeds the episode spending limit
API_KEY_QUOTE_MISMATCH 409 the quote was issued to another key
QUOTE_FINGERPRINT_MISMATCH 409 the create body differs from the quote body
QUOTE_EXPIRED, QUOTE_ALREADY_CONSUMED 409 the quote expired or was already used
QUOTE_NOT_FOUND 404 there is no such quote
INVALID_QUOTE 400 the create or Continue body has no valid quoteId
IDEMPOTENCY_KEY_REQUIRED 400 no Idempotency-Key header
INVALID_IDEMPOTENCY_KEY 400 Idempotency-Key is not 8–128 characters of A-Za-z0-9._:-
IDEMPOTENCY_CONFLICT 409 the idempotency key was used with a different body
UNSUPPORTED_API_FIELD 400 the body has a field outside the public contract
INVALID_MODE, INVALID_TEXT, INVALID_LENGTH_PRESET, INVALID_GROUNDING, INVALID_RESEARCH_URL and other INVALID_* 400 an invalid field value
INVALID_BUDGET 400 maximumCredits is neither a positive safe integer nor null
INVALID_NEWS_TOPIC 400 the topic is neither in the catalog nor yours
INVALID_NEWS_INPUT 400 an invalid News period, voice, language or preferences
NEWS_EVIDENCE_INSUFFICIENT task errorCode retained materials are unavailable or their identity does not match the accepted order; synthesis does not start
NEWS_RESEARCH_UNCONFIRMED task errorCode discovered material could not be confirmed for the selected topic and period; choose another topic or period
NEWS_RESEARCH_INCOMPLETE task errorCode research is incomplete and the edition has not been created yet; check status and receipt before admissible continuation
NEWS_NARRATION_EMPTY task errorCode no usable accepted text is available for synthesis
NEWS_SERVICE_UNAVAILABLE, NEWS_PROVIDER_UNAVAILABLE task errorCode the current executor or external service cannot finish the task
NEWS_GENERATION_FAILED, VOICE_SYNTHESIS_FAILED task errorCode the episode or finished audio could not be created
PODCAST_NOT_FOUND, TASK_NOT_FOUND 404 no such operation, or it was created by another key
PODCAST_CONTINUATION_UNAVAILABLE 409 a failed task cannot safely continue, or confirmation does not match the original work
PODCAST_CONTINUATION_QUOTE_MISMATCH 409 the continuation quote belongs to another task revision
NEWS_NOT_READY 409 the result or audio is not ready yet
PODCAST_NOT_CANCELLABLE, NEWS_NOT_CANCELLABLE 409 the operation has already finished
CATALOG_NOT_FOUND, SERVICE_UNAVAILABLE 503 generation is temporarily unavailable on this deployment
PRICING_AUTHORITY_UNAVAILABLE 503 no usable published pricing-policy/catalog pair is available for a new quote
RESEARCH_EXTRACTION_UNAVAILABLE 503 Quick/Deep has neither an extraction route nor usable library text; quoting refuses before paid work
RANGE_NOT_SATISFIABLE 416 an invalid audio range
INVALID_JSON, INVALID_REQUEST_BODY 400 the body could not be parsed
UNSUPPORTED_BODY_ENCODING 415 an unsupported body encoding
PAYLOAD_TOO_LARGE 413 the body is larger than 10 MiB
NOT_FOUND 404 an unknown path under /api/v1/