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.

To find out why a Sume job is slow, read GET /v1/jobs/:id/events. The public timeline shows whether the time went to waiting in the queue, running, or delivering your webhook. Read it for the one job in question; it is a pull snapshot, not a stream.
Events and what they mean
The docs list the public events. Provider task ids and raw provider URLs are never exposed in them.
| Event | What it tells you |
|---|---|
| job.created | The request was accepted and a job exists |
| job.queued | Waiting for a concurrency slot; normal |
| job.started | A worker moved it to processing |
| generation.submitted | Work was handed to generation |
| job.completed, job.failed, job.canceled | The terminal outcome |
| webhook.delivery | A delivery attempt to your URL |
Reading the gaps
A long gap from created to started means queue pressure: concurrency is plan-based, and more jobs than slots wait as queued by design. A long gap from started to terminal is generation time. A terminal event followed by repeated webhook.delivery entries means your endpoint is slow or failing, since each attempt times out at 10 seconds.
What to do next
For queue pressure, check generation_limits on submit responses and pace submits. For delivery trouble, check your handler and use redeliver. There is no SSE stream, so do not wait on this endpoint; poll status and read events when something looks off.
Sources
Related posts
More in Developers
- 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 Idempotency-Key from a hash of the request (Python)
Derive the Idempotency-Key from the canonical request body so a retry is a replay and an edited request is a new job. Python code for Recast on /v1/videos.
- Recast photo URL rejected: public HTTPS, no login in the URL
A Recast request is refused when a reference photo URL is private, signed or carries a username and password. What Sume accepts and how to fix each case.
Written by Sume