Media job webhooks

A render outlives the request that created it. Pass a callback URL on submit and we POST a signed JSON payload once, when the job reaches succeeded or failed, instead of you polling for it.

Asking for a callback

Send webhook_url on any media submit - /v1/videos/generations, /v1/images/generations or /v1/audio/speech. callback_url is accepted as an alias for the same field. The URL must be https: a caller-supplied URL that our own cluster then fetches is a server-side request forgery sink, so it is validated at submit time.

Verifying a delivery

X-BlazeRail-Signature carries t, the unix seconds of the attempt, and v1, a lowercase hex HMAC-SHA256. The signed string is the timestamp, a dot, then the raw request body. Hash the raw bytes as received - a re-serialised parse changes key order and whitespace and the HMAC will not match - and compare in constant time.

Retries

Success is any 2xx. Six attempts, with 10s, 60s, 5m, 30m and 2h between them, then the delivery is marked exhausted. Receivers must be idempotent on X-BlazeRail-Delivery, because a retry after your own timeout can deliver the same event twice.