Want a hook scoped to a single job instead of every job in the organization? See per-job callbacks.
Create an endpoint
Create and manage endpoints on the Webhooks page in the dashboard.- Open Webhooks and click New Endpoint.
- Name it, paste your HTTPS URL, and check the events you want. New endpoints start with
job.completed,job.failed, andjob.cancelledselected. - Click Create Endpoint, then copy the signing secret (
whsec_...). It is shown once, so store it in your secret manager.
Events
Verify every delivery
Rendobar signs each payload. Check the signature before you trust the body. The SDK does it in one call.verifyWebhook rebuilds the signed string, checks the HMAC, rejects stale deliveries so a captured request cannot be replayed, and accepts either secret during a rotation. It has no dependencies and runs on Node, Deno, Bun, Cloudflare Workers, and the browser.
A full receiver on Express. The one rule: verify the raw bytes, before any JSON parser touches them.
{timestamp}.{body}, hex-encoded, in X-Rendobar-Signature as sha256=<hex>.
Payload
Every delivery carries these headers.data, which for job events matches GET /jobs/.
A
job.completed delivery. output.file.url is a signed, time-limited URL, and output.files lists every produced file.
output shape is identical for every job type. A data-only job (such as ffprobe) puts its answer in output.data with file null. See Job output for each pattern.
For job.failed, data carries error instead of output.
Delivery and retries
If your endpoint does not return2xx within 10 seconds, Rendobar retries up to 5 times, doubling the wait each attempt.
After that the delivery is marked
failed. Re-send a failed or cancelled delivery from the card, or from code:
Secret rotation
Rotate from the card, or withclient.webhooks.rotateSecret(endpointId). For 24 hours Rendobar signs with both secrets, sending X-Rendobar-Signature (new) and X-Rendobar-Signature-Previous (old), so verifyWebhook keeps passing while you roll the new one out. After the window the old secret stops signing. An endpoint can rotate once per 24 hours.
Endpoint URLs must be HTTPS. Delivery to private and reserved ranges (
10.x, 172.16-31.x, 192.168.x, 127.x, ::1) is blocked to prevent SSRF, so point webhooks at a publicly reachable host.Best practices
- Return 200 fast. Acknowledge, then process asynchronously. A slow handler trips the 10-second timeout and earns a duplicate delivery.
- Deduplicate on
X-Rendobar-Delivery(ordata.jobId). The same event can arrive twice after a retry. - Verify every signature before you read the body.
Related
- Job output: the
outputanderrorshape this payload carries - Job lifecycle: what each status means
- Error codes: the codes inside
job.failedpayloads - Changelog: webhook payload changes and new events