Four status vocabularies in the Sume API: job, resource, run, delivery
Jobs say queued and processing, resources say ready, deliveries say exhausted, queue-shaped fields say IN_QUEUE. A table so a client branches on the right one.

A client that mixes Sume's status words will misread what it sees. The API has separate vocabularies for jobs, resources, runs and webhook deliveries, and the same word can mean different things on each. This is the short version, taken from the Errors and Jobs pages.
Use the booleans where you can. A job status carries terminal and result_ready, and the polling guidance is to branch on those or on sume_status, not on a free-form string.
| Object | Values | Notes |
|---|---|---|
| Job status | queued, processing, completed, failed, canceled | Terminal: completed, failed, canceled |
| Resource status | processing, ready, failed, canceled, archived | Avatars, captions and other resources |
| Webhook delivery status | pending, delivering, delivered, retrying, failed, exhausted | exhausted = all attempts used |
| Queue-shaped job field | IN_QUEUE, IN_PROGRESS, COMPLETED, FAILED, CANCELED | One-to-one with sume_status |
| Run status (Action, Format, Agent) | queued, processing, completed, failed, canceled | Format and Action runs can also be skipped |
The traps
The first trap is delivery versus outcome. A webhook delivery in exhausted means that Sume used all attempts to reach your endpoint. The job or run is still in its real terminal state, and you read it from status_url or result_url.
The second is ready. A resource such as an avatar is ready, not completed. The third is a run's OK: on a webhook envelope, status: OK means the run completed, but outcome can still be degraded when real artifacts exist and the structured output could not be built.
A small switch
Keep one function per object type and do not share a switch. A job handler should end on terminal. A run handler should read outcome. A delivery monitor should alert on exhausted, then use Redeliver, which does not consume one of the automatic ten attempts.
- Job: stop polling on
terminal; readresult_readybefore fetching the result. - Run:
canceledandskippedruns send no webhook, so pollstatus_urlfor them. - Delivery:
retryingis normal;exhaustedneeds your action. - Never match on
messagetext; branch oncodeandstatus.
Mapping to your own states
Most teams collapse these into three internal states: waiting, done, and needs attention. Waiting covers queued, processing, pending, delivering and retrying. Done covers completed, ready and delivered. Needs attention covers failed, exhausted, and a run outcome of degraded. Canceled is its own case, since a canceled run sends no webhook.
Keep the raw value next to your mapped one in logs. When the API adds a status, an exact-match switch with no default will fail quietly, so give it a default that routes to a human.
Treat this as a habit, not a one-time fix. Write the rule down next to the code that calls the API, add a test that exercises it, and review it whenever the docs change. Check the linked documentation pages in the sources list for the current wording before you rely on any number here, because limits and field names can be revised, and a short test run costs far less than debugging a production incident.
When something does not match what you read here, capture the x-sume-request-id response header and the job or run id, and send those to support. Do not paste API keys, signing secrets or full request bodies into a ticket or a chat; the ids are enough for the team to find the request.
Sources
Related posts
More in Developers
- frame_images or image_url? Image-to-video fields on Sume's two APIs
Sume's /v1/videos uses frame_images and input_references; /v1/video-router/generate uses image_url, end_image_url and reference_*_urls. A field-by-field map.
- Game NPC barks: 150 short lines in one TTS job (43 cents) vs 150 jobs
Short lines cost 1 cent each as separate Sume TTS jobs. One job with sentence slices returns the same 150 lines as separate WAV files for 43 cents.
- gemini-3.1-flash-image deprecated: Nano Banana 2.1 on Sume
Google deprecated gemini-3.1-flash-image on Oct 6 when Nano Banana 2.1 went GA. Which ids Sume accepts, what it bills per image, and what Google lists.
- Gemini 3.7 Flash now routes to 3.8: where a media client pins ids
Google auto-routes gemini-3.7-flash to gemini-3.8-flash since Oct 8. Where Sume lets you pin a model, where it routes for you, and what the job records.
Written by Sume