code is the closed list below and is what to branch on; type is its coarser family; message is for a person; retryable says whether the identical request can succeed later without any change on your side. doc_url links to the heading for the code on this page.
A refusal generated at the edge itself — a missing key, a rate limit — has the same shape, with a request_id that carries the gateway’s own hyphenated id.
Your request
invalid_request
400 · retryable: no. The request shape is wrong: a missing field, a value out of range, an unknown field.
invalid_url
400 · retryable: no. A pointer that is not an absolute http(s) URL, or not one of the supported forms.
unauthenticated
401 · retryable: no. Missing, malformed, revoked or expired API key or dashboard session.
payment_required
402 · retryable: no. Available credits cannot cover the quote ceiling.
rate_limited
429 · retryable: yes. Over the plan’s requests per minute; wait for Retry-After.
concurrency_limited
429 · retryable: yes. The plan’s open-job cap is reached; wait for a job to finish.
Quotes, confirms and groups
quote_not_found
404 · retryable: no. The quote does not exist or belongs to another account.
quote_expired
409 · retryable: no. The quote’s expires_at has passed; request a new quote.
quote_mismatch
409 · retryable: no. An entry’s audio changed since the quote; request a new quote.
quote_unverified
409 · retryable: yes. The confirm ran out of time re-checking every entry; retry the same confirm.
expected_total_mismatch
409 · retryable: no. Your expected_total_credits disagrees with the quote’s total_ceiling_credits; nothing was spent.
group_not_found
404 · retryable: no. The job group does not exist or belongs to another account.
idempotency_conflict
409 · retryable: no. The same Idempotency-Key was reused with a different body.
request_in_progress
409 · retryable: yes. A request under this Idempotency-Key is still running; retry with the same key shortly.
nothing_to_quote
422 · retryable: no. Every episode in the selection was excluded from pricing; the exclusions say why.
Jobs and transcripts
job_not_found
404 · retryable: no. The job does not exist or belongs to another account.
job_not_completed
409 · retryable: yes. A derived artifact was requested for a job that has not completed; poll and retry.
processing_failed
500 · retryable: yes. A terminal job failure; the reservation was released.
engine_unavailable
503 · retryable: yes. The pinned transcription route is unavailable; no silent switch to another engine.
Resolving a show or episode
source_not_supported
422 · retryable: no. Direct audio, uploads, Spotify- or YouTube-exclusive shows, or a feed with nothing stable to key a transcript on.
feed_dead
422 · retryable: yes. The feed could not be fetched or parsed within the request’s budget.
episode_not_found
422 · retryable: no. The episode is not in the feed, or not in the catalog when named by id.
show_not_found
422 · retryable: no. The show could not be resolved.
unsafe_source
422 · retryable: no. The fetch target or a redirect failed the outbound-security policy.
unsupported_codec
422 · retryable: no. The audio is in a format the pipeline does not accept.
unsupported_language
422 · retryable: no. The requested language is outside published support.
duration_exceeded
422 · retryable: no. The episode is longer than the published 10-hour cap.
size_exceeded
422 · retryable: no. The audio file is larger than the published 5 GB cap.
content_blocked
451 · retryable: no. A publisher or legal block is active for this content.
discovery_unavailable
503 · retryable: yes. The show directory did not answer.
Your account
account_suspended
409 · retryable: no. The account is on hold and cannot accept this write; reads stay open.
account_closed
409 · retryable: no. The account is closing or closed.
account_not_found
409 · retryable: no. The credential resolves to no account row.
tier_unchanged
409 · retryable: no. Checkout was refused because the account already holds the requested plan.
api_key_not_found
404 · retryable: no. The dashboard key does not exist or belongs to another account.
api_key_limit_reached
409 · retryable: no. The account already holds the maximum number of live keys; revoke one.
credit_lot_not_found
404 · retryable: no. The credit lot does not exist or belongs to another account.
credits_not_refundable
422 · retryable: no. The named lots are consumed, promotional, expired or otherwise ineligible.
Ours
internal_error
500 · retryable: yes. An unclassified failure; retry, and quote the request_id if it persists.
