Read job events for a stuck narration take: a snapshot, not a stream
GET /v1/jobs/:id/events lists job.created, queued, started, generation.submitted and the terminal event. A pull snapshot for debugging a TTS or music take.

To see where a narration or music take is stuck, read GET /v1/jobs/:id/events: it returns a public timeline of that job, and it is a pull snapshot, not a stream. The jobs and results docs, read 2026-10-03, list the events and state that there is no SSE or WebSocket transport on the Developer API today, so you poll, rather than subscribe.
What do the events mean?
Public events do not expose raw provider task ids or raw provider URLs.
| Event | What it tells you |
|---|---|
job.created | Sume has a durable job id |
job.queued | Waiting for a processing slot |
job.started | A worker picked it up |
generation.submitted | Generation work has been dispatched |
job.completed / job.failed / job.canceled | Terminal outcome |
webhook.delivery | A callback attempt, if you set one |
How do I read them to find the stall?
Stopping at job.queued means your workspace's processing slots are full; check the plan's concurrency in the admission docs and wait or cancel. Stopping at job.started or generation.submitted means the work is running, so keep polling status with next_poll_after_seconds rather than resubmitting a paid request. A webhook.delivery event with no matching callback on your side points at your endpoint, not at the generation.
What are the limits of events?
- The event list is a snapshot at read time, so poll again to see later events.
- Events carry no audio. Read the artifact from
GET /v1/jobs/:id/resultafter the job completes. - I did not find a documented retention window for events, so copy what you need into your own logs.
Sources
Related posts
More in Developers
- Debug a slow Sume job with GET /v1/jobs/:id/events
A slow Sume job is queued, running, or waiting on your webhook. The events timeline separates them: job.queued, job.started, terminal, webhook.delivery.
- Read the TTS Router catalog in Python: price per 1M from list micros
Sume's TTS Router catalog publishes list micro-dollars per character; billing is list x 1.25. A Python script prints price per 1M and per 1,000 characters.
- Read twelve narration takes at once: jobs_result partial success
Over MCP, jobs_result takes up to 20 job ids and returns one ok-or-error entry each. How to read a wave of TTS takes when one is still running.
- Recast request timed out: retry with the same Idempotency-Key
A timeout on POST /v1/video-router/generate does not tell you whether the job exists. Derive a stable Idempotency-Key so a retry returns the original job.
Written by Sume