Webhooks

Receive job results without polling.

Pass webhookUrl when submitting a job and we'll POST a signed payload to that URL when the job ends.

POST /v1/jobs
{
  "tool": "video-convert",
  "input": { "url": "https://..." },
  "options": { "format": "mp4" },
  "webhookUrl": "https://your-app.com/hooks/utified"
}

Delivery payload

{
  "event": "job.completed",
  "id": "job_abc123",
  "tool": "video-convert",
  "state": "completed",
  "result": { "url": "https://cdn.utified.com/...mp4" },
  "error": null,
  "finishedAt": "2026-05-08T10:00:00.000Z"
}

Verifying signatures

Every delivery includes:

  • X-Utified-Event - e.g. job.completed or job.failed
  • X-Utified-Signature - t=<ms>,v1=<hmac>

Compute HMAC-SHA256(secret, `$`$${t}.$${rawBody}$``) with the webhook secret displayed for your key, and compare against v1 in constant time. Reject deliveries older than 5 minutes.

Retries

Failed deliveries (non-2xx, network error, >10s timeout) are retried up to 6 times with exponential backoff starting at 30 seconds. Return any 2xx promptly to ack.