Sume API error codes by surface: one index with next steps
Sume API error codes indexed by surface: common codes, paid generation, Formats, Scheduled runs, Agent Completions, media tools, and hosted MCP.

Sume API error codes are lowercase error.code tokens in one shared envelope: a handful of common codes, such as unauthorized and rate_limited, apply across the API, and the rest are documented per surface: paid generation, Format runs and packages, Scheduled runs, Agent Completions, the media tools, and hosted MCP. Branch on the HTTP status first, then on code, then on next_action.
The codes below come from the docs page for each surface, starting with Errors and rate limits and Errors and spend, read on 2026-09-27. The envelope, the generic codes, and retry advice are covered in Sume API errors and rate limits; this page indexes codes by surface and links the post that explains each group.
Which error codes does each surface return?
Every code in a row appears in the docs for that surface. The sets are open: branch on the codes you handle and fall through on the rest.
| Surface | Codes | Explained in |
|---|---|---|
| Common API errors | 400 invalid_request or bad_request, 401 unauthorized, 404 not_found, 413 payload_too_large, 415 unsupported_media_type, 429 rate_limited | Errors and rate limits |
| Paid generation submit | 402 insufficient_credits, model_not_found, 409 idempotency_conflict, 429 queue_full, 503 provider_capacity_exceeded, provider_not_configured, job_ledger_not_configured, image_not_fetchable, input_media_unreachable | Concurrency and queueing, 402 errors |
| Job result and cancel | 409 job_not_completed, job_not_cancelable, job_generation_already_started | Poll a job, Cancel a job or run |
Failed job (error.category) | validation, auth, quota, queue, generation_unavailable, generation_rejected, generation_timeout, runtime_unavailable, worker_timeout, internal | Why did my job fail? |
POST /v1/videos and POST /v1/images | 400 unsupported_parameter; on images also provider_not_available and streaming_not_supported | Video 400 errors, Image generation |
| Format run create | unknown_parameter, output_schema_invalid, invalid_attachment, attachment_fetch_failed, insufficient_scope, workspace_key_required, format_not_found, format_inactive, format_api_trigger_disabled, format_run_in_progress, idempotency_key_in_use, organization_wallet_not_provisioned, format_run_failed_to_start | Fix schema violations, Find a Format |
| Format run reads and redeliver | 404 format_run_not_found, 404 format_run_queue_not_found, 409 run_not_completed, 409 webhook_not_configured, 409 run_not_terminal | Format run lifecycle, Debug webhook delivery |
Failed Format run (receipt error.code) | unattended_blocked, output_schema_unsatisfied, deliverable_missing, primary_output_missing, agent_reported_failure, incomplete_assembly, mcp_unavailable, provider_unavailable, format_run_failed | Format run failure codes |
Bulk queue item error | format_run_failed, format_run_canceled, format_run_failed_to_start | Retry failed batch items |
| Format package (Contents API) | skill_slug_taken, skill_slug_reserved, format_content_not_found, format_content_sha_required, format_content_sha_mismatch, format_package_sha_mismatch, skill_path_invalid, format_git_unavailable | Edit Format files with If-Match |
| Scheduled runs | action_not_found, action_api_trigger_disabled, action_inactive, action_run_in_progress, studio_agent_upstream_unavailable | Agent run errors |
| Agent Completions | invalid_attachment, attachment_not_found, 413 attachment_too_large, 502 attachment_fetch_failed, 403 insufficient_scope, 404 agent_run_not_found | Agent run errors |
| Media tools: trim, filter, detach, frames, inspect, Timeline | Common to several tools: unsupported_media_source, source_not_found, ffmpeg_fields_rejected. Per tool, for example video_trim_range_conflict, invalid_filtergraph, detach_source_has_no_audio, frame_time_out_of_range, render_strategy_unsafe | Trim, filter, detach, Video editing API limits |
| Video captions | caption_no_speech, caption_hangul_text_latin_style, caption_font_requires_hangul_style, script_alignment_mismatch, script_alignment_failed | Burn captions onto a video |
| Hosted MCP | insufficient_scope, wait_slice_expired | Fix MCP insufficient_scope |
Which errors arrive on a receipt instead of an HTTP status?
Three rows above never come back as a 4xx or 5xx on your request. A Format run that returned 202 never turns into a create error later: its failure arrives on the receipt as status: "failed" with an error.code. A bulk item's error is only format_run_failed or format_run_canceled once its child settles, so read the reason on the child run. A failed generation job exposes an error with a category, stage, retryability, and next action.
Some media tool and caption codes also arrive on the failed job rather than the request: the docs mark worker-side refusals such as detach_source_has_no_audio, and caption jobs fail as caption_no_speech or with the two script-alignment codes.
Webhooks follow the same rule. A run receipt over 1 MiB is delivered with payload: null and error.code payload_too_large, while status still reports the run's real outcome.
What should I do next for each code?
An HTTP error's next_action is one of authenticate, fix_input, add_funds, retry_later, poll_status, inspect_events, or contact_support; a failed caption job can also name use_overlay_captions or simplify_script_text_or_omit. In practice:
- Fix the key:
unauthorized,insufficient_scope,workspace_key_required. Scopes cannot be added to an existing key, so mint a new one. - Fix the request:
invalid_request,unknown_parameter,output_schema_invalid, and the media tool refusals. A4xxat Format run create means nothing ran and nothing was charged. - Add funds:
insufficient_credits. Retrying without topping up returns the same answer. - Wait and retry:
rate_limitedafterretry-after,idempotency_key_in_useafter about a second, andprovider_capacity_exceededwith the same idempotency key. - Poll or read the record:
run_not_completedmeans the run is still in flight, so pollstatus_url.job_not_completedanswers any job without a result, so read a failed job's error offGET /v1/jobs/{id}.
Which codes are easy to misread?
A few codes do not mean what their status class suggests:
403 insufficient_scopeis never404 format_not_found: a known key missing a scope always gets the403.404 format_not_foundalso covers someone else's Format and a shared Format whose grant is pending or removed. The404is a deliberate tenancy hide.502 attachment_fetch_failedis your input:next_actionisfix_input. Make the URL publicly reachable.503 studio_agent_upstream_unavailableon Scheduled runs reportsretryable: false, yet the docs call a bounded retry reasonable.- An unknown top-level field is
400 unknown_parameteron a Format run, but a Scheduled run silently drops it. unsupported_media_typeis a non-JSON request body (415) on most routes, but on trim, filter, and detach it means aHEADof the source URL did not return a video.
Sources
Related posts
More in Developers
- Sume API glossary: Format run, spend cap, idempotency key
Sume API terms in one or two sentences each: Format, run, job, spend cap, idempotency key, wallet, agent fee, webhook, artifact, and more, with links.
- Sume API headers: auth, idempotency, If-Match, rate limits
Every HTTP header the Sume API reads or sends: the API key, Content-Type, Idempotency-Key, If-Match, request ids, rate limits, and webhook signatures.
- Sume API output file formats: MP4, PNG, WebP, WAV, MP3
The file each Sume API endpoint returns: MP4 from Timeline and the editing tools, PNG, JPEG, or WebP images, WAV or MP3 audio, and JSON transcripts.
- Sume API pagination: cursor, starting_after, and page limits
How each Sume list endpoint pages: cursor and has_more on Formats and runs, starting_after on /v1/jobs, and limit-only lists that have no cursor.
Written by Sume