New: AI video tools. Cut, clip, caption and dub your videos. See all video tools →
Webhooks

Job finished

Sent to every enabled endpoint when a job made with an API key succeeds, fails or is cancelled. Answer with a 2xx status within 10 seconds.

Header Parameters

webhook-id*string

The delivery id. It stays the same on every attempt, so use it to skip events you already handled.

webhook-timestamp*string

When this attempt was sent, in Unix seconds.

webhook-signature*string

v1, a comma, then the base64 HMAC-SHA256 of webhook-id, webhook-timestamp and the body joined with dots. The key is the part of your secret after whsec_, decoded from base64.

Request Body

application/json
  1. body

The JSON body of every webhook request.

type*string

What happened. webhook.test comes from Send test in Settings > API.

Value in"job.succeeded""job.failed""job.cancelled""webhook.test"
timestamp*string

When this attempt was sent.

Formatdate-time
api_key_id*|

The key that made the request, or null for webhook.test.

data*|

The job, the same as GET /v1/jobs/{id} returns it. For webhook.test, the endpoint id.

Response Body

Any 2xx status within 10 seconds marks the event delivered. Anything else, including a redirect, is sent again later.

Example Requests
POST/job

The JSON body of every webhook request.

Request Body
application/json
{  "type": "job.succeeded",  "timestamp": "2026-10-30T00:18:01Z",  "api_key_id": "5f0c2a8e-3b1d-4c7e-9a62-1d8f4e7b2c90",  "data": {    "id": "04bd0571-e2c8-4d5b-a3cc-e56f85773abf",    "type": "cut",    "status": "succeeded",    "progress": null,    "result": {      "video_url": "https://files.example.com/cut.mp4",      "download_url": "https://files.example.com/cut.mp4?download=cut.mp4",      "duration_s": 281.344,      "source_duration_s": 485.87,      "width": 1080,      "height": 1920,      "removed": [        {          "start": 0,          "end": 107.62,          "reasons": [            "retake"          ]        },        {          "start": 120.786,          "end": 121.106,          "reasons": [            "filler"          ]        },        {          "start": 129.3,          "end": 129.44,          "reasons": [            "silence"          ]        }      ],      "language": "English",      "incomplete": [],      "expires_at": "2026-10-31T00:10:42Z"    },    "error": null,    "tokens_charged": 16311,    "resource_id": "857fcb81-9073-4f26-97c7-a388979fcdca",    "created_at": "2026-10-30T00:10:42Z",    "finished_at": "2026-10-30T00:18:01Z"  }}
Header Parameters
{  "webhook-id": "string",  "webhook-timestamp": "string",  "webhook-signature": "string"}