Overview
Webhooks allow you to receive HTTP notifications when jobs complete, eliminating the need for polling.Setup
Include awebhook_url in your job request:
Webhook Payload
When a job completes, Tornado sends aPOST request to your webhook_url with a JSON payload. Here’s what your server will receive:
Job Started (Processing)
Sent when a worker picks up the job and begins processing:Single Job Completion
s3_url/subtitle_url/thumbnail_url are generated the same way (and with the same 24h validity) as the s3_url field returned by GET /jobs/{id} — added 2026-07-08 so you don’t need a second API call just to get something downloadable. key/subtitle_key/thumbnail_key are unchanged and still sent, for backwards compatibility.Job Failed
Sent when a job fails due to a technical error (bot detection, rate limit, connection issues). Not sent for content warnings (private/members-only/geo-blocked videos) — those are handled silently.Job Skipped
Sent when a job is skipped because the content cannot be processed. This happens for audio-only Spotify episodes that are protected by Widevine DRM and have no video stream available. Skipped jobs are classified as warnings, not errors — they represent content limitations, not technical failures.In batch downloads, skipped episodes count toward the batch
failed counter for completion tracking purposes. The batch webhook fires once all episodes are either completed, failed, or skipped.Batch Completion
When all episodes in a batch are done:Progress Webhooks
Whenenable_progress_webhook: true is set, you’ll receive updates at each processing stage:
To enable progress webhooks:
Webhook Behavior
Handling Webhooks
Node.js (Express)
Python (Flask)
Best Practices
Respond Quickly
Respond Quickly
Return a 2xx status code within 30 seconds. Process the webhook data asynchronously if needed.
Verify Source
Verify Source
Webhooks come from our servers. Consider IP whitelisting or signature verification for production.
Idempotency
Idempotency
Handle duplicate webhooks gracefully. Store the job_id and check for duplicates before processing.
Retry Logic
Retry Logic
If your endpoint fails, we retry 3 times. Ensure your handler can process the same event multiple times.
