video.generation.completed on Sume? The webhook event map

OpenRouter sends video.generation.* events; Sume sends job.completed, job.failed or job.canceled with a signed body. What to change in a receiver.

4 min readSume
All posts

A receiver written for video.generation.completed will not match on Sume: a video job with callback_url gets Sume's standard job envelope, with events job.completed, job.failed or job.canceled, signed with x-sume-webhook-signature. Map the event names and swap the verification.

Which events does each side send?

OpenRouter's page names four events, including video.generation.expired. Sume's webhooks page lists three terminal job events.

Webhook events, read 2026-09-30. Source: https://docs.sume.com/workflows/webhooks
OpenRouter pageClosest Sume event
video.generation.completedjob.completed
video.generation.failedjob.failed
video.generation.cancelledjob.canceled
video.generation.expiredNo matching event listed

How do I register a callback?

Pass callback_url in the /v1/videos body; it must be HTTPS. Sume POSTs once the job reaches a terminal state.

curl -X POST https://api.sume.com/v1/videos \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: hook-001" \
  -d '{"model":"seedance-2","prompt":"A time-lapse of a flower blooming","callback_url":"https://example.com/hooks/sume"}'

How is the delivery signed?

Sume signs the raw JSON body and sends x-sume-webhook-timestamp and x-sume-webhook-signature; the docs show the sume-v1=<hex> format and a verifier on the webhooks page. It is not OpenRouter's envelope, so do not reuse an OpenRouter verifier.

Should I still poll?

Keep the polling_url as a backup. See the Webhooks docs and video docs.

What else differs from OpenRouter on this route?

Sume's differences table lists the webhook envelope, idempotency and job lifecycle as deltas. Billing is reserved on submit at provider list times 1.25, and the poll response reports usage.cost as the Sume billable amount. Sending an Idempotency-Key makes retries safe, because a replay returns the original job.

The same job is also visible at GET /v1/jobs/{id}/status and GET /v1/jobs/{id}/result, which is what to poll if a delivery never arrives.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume