Skip to main content
Webhooks push events to your server the moment a job changes status or your balance runs low. No polling. Rendobar POSTs a signed JSON payload, your server verifies it and reacts.
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.
  1. Open Webhooks and click New Endpoint.
  2. Name it, paste your HTTPS URL, and check the events you want. New endpoints start with job.completed, job.failed, and job.cancelled selected.
  3. Click Create Endpoint, then copy the signing secret (whsec_...). It is shown once, so store it in your secret manager.
Each endpoint gets a card where you edit events, rotate the secret, send a test delivery, and re-send anything that failed. An organization can have up to 10.
Hit Send Test on the card to fire a sample event and confirm your receiver returns 2xx before real jobs start flowing.

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.
Not on Node? The signature is HMAC-SHA256 over {timestamp}.{body}, hex-encoded, in X-Rendobar-Signature as sha256=<hex>.
Compare with a timing-safe function (timingSafeEqual, hmac.compare_digest). Plain string equality leaks the signature one byte at a time.

Payload

Every delivery carries these headers.
The body is a versioned envelope. The envelope fields identify the event and delivery. The event payload lives under 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.
The 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 return 2xx 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:
An endpoint that fails 10 deliveries in a row is disabled automatically and flagged in the dashboard. Update or re-enable it to reset the counter.

Secret rotation

Rotate from the card, or with client.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 (or data.jobId). The same event can arrive twice after a retry.
  • Verify every signature before you read the body.