Sume rejects localhost webhook URLs: test locally with a poll fallback
Sume only accepts public HTTPS webhook URLs and rejects localhost and private networks. For local work, poll the job and keep webhooks for a deployed endpoint.

You cannot point a Sume job at http://localhost. The webhooks page says webhook URLs must be public HTTPS URLs and that the API rejects localhost, private-network and non-HTTPS URLs. So local development needs a different route: poll the job from your machine, and use a webhook only once the receiver is deployed behind a public https address.
Three ways to develop
Sume lists four communication modes (async, sync, subscribe, webhook); only one of them needs a public address.
| Option | Needs public URL | Notes |
|---|---|---|
| Poll the job | No | Use the status_url from the submit response |
| Webhook to a deployed preview | Yes, https | Send test first to verify the signature code |
| Webhook to localhost | Not possible | Rejected by the API |
Keep a poll in place anyway
Even in production, delivery is not guaranteed after ten refused attempts, and the docs say to keep the status_url polls available for events that never arrive. Verify the signature with the secret from the dashboard or GET /v1/webhooks/signing-secret, check the timestamp window (five minutes is the suggested default), and refuse to run if the secret is empty.
See jobs and results for how the modes compare, and the webhooks page for the TypeScript verifier.
A local loop that works
Submit the job, read the status_url from the response, and poll it with backoff until the status is completed, failed or canceled. Use the retry-after header if a 429 appears. This path needs no public address and is the same code you keep as the fallback in production.
When you are ready for webhooks, deploy the receiver, press Send test, then switch the submit to mode: "webhook" with the public URL.
- Poll with backoff.
- Honor retry-after.
- Switch modes only after Send test passes.
Sources
Related posts
More in Developers
- Tokio JoinSet and Semaphore: eight Sume clips, abort on a 402
Run Sume video jobs from Rust with reqwest, a Tokio Semaphore, and a JoinSet that collects clips as they finish and calls abort_all on a 402.
- TTS language en-US vs en-GB on Sume: regional tags compare by language
For the voice-language check, Sume compares regional tags by primary language, so en-GB on an en-US voice does not trigger the 409, and fil matches tl.
- Live commerce TTS rejects literal text: use transcript_source
Sume's live-commerce TTS takes only transcript_source (a script revision plus sentence IDs) and rejects literal transcript text, even if correct.
- Video editing API or AI prompt edit: which Sume endpoint to call
Trim, frames, captions and filter are deterministic jobs; Omni edit changes content from a prompt. Pick the cheapest route that does the change you need.
Written by Sume