Webhook Delivery
Webhooks allow you to receive API response data automatically β without polling. Instead of repeatedly calling an endpoint to check if a job has completed, you can register a webhook URL and receive the result pushed directly to your server.
Setup
1. Test Your Webhook URL
Before using a URL in your API calls, verify it is publicly reachable using the test endpoint:
POST https://dashboard.transcriptdownloader.com/api/webhook/test
Body:
{
"url": "https://your-domain.com/webhook"
}
| Parameter | Type | Required | Description |
|---|---|---|---|
url |
string | Yes | The webhook URL to test. Must be a publicly reachable http:// or https:// URL. |
Success response β URL is reachable and returned a 2xx:
{
"status": "success",
"message": "Webhook URL is reachable and returned a successful response. You can now use this URL in your API calls.",
"http_status": 200
}
Error response β URL is unreachable or returned a non-2xx:
{
"status": "error",
"message": "Your URL is reachable but returned HTTP 405 (Method Not Allowed). Make sure your endpoint accepts POST requests.",
"http_status": 405
}
π Note: Private/internal addresses (localhost,
192.168.*, etc.) are blocked. The test sends a realPOSTrequest with a sample payload to verify reachability.
2. Pass include_webhook in Your Request
Add "include_webhook": "<your-url>" to the body of any supported API request. When the job completes (or fails), the full response payload will be POSTed to that URL.
{
"youtube_video_id": "Fqdz6A-5d04",
"include_webhook": "https://your-domain.com/webhook"
}
No global webhook URL configuration is required β the URL is passed directly with each request.
How It Works
- Your webhook URL receives a single
POSTrequest when the job completes or fails. - The request body is the exact same JSON the API endpoint would return β no wrapper or envelope.
- Three custom HTTP headers are included so you can identify the event:
| Header | Description |
|---|---|
X-Webhook-Endpoint |
The API endpoint that triggered this webhook (e.g. downloads/audio) |
X-Webhook-Original-Status |
The HTTP status code of the result (200 for success, 400/500 for failure) |
X-Webhook-Download-Id |
The ULID of the download record (when available) |
- If your endpoint returns
405 Method Not Allowed, the webhook will automatically retry as aGETrequest with the payload JSON-encoded in apayloadquery parameter. - Failed deliveries are retried up to 3 times with backoff intervals of 10s, 30s, and 60s.
Supported Endpoints
All async endpoints support include_webhook. The webhook fires once when processing completes.
YouTube
| Endpoint | X-Webhook-Endpoint value |
Fires when |
|---|---|---|
POST /api/downloads/audio |
downloads/audio |
Audio download succeeds or fails |
POST /api/downloads/video |
downloads/video |
Video download succeeds or fails |
POST /api/transcripts |
transcripts |
Transcript is ready or fails |
POST /api/transcriptspeakerid |
transcriptspeakerid |
Speaker diarization completes or fails |
POST /api/channel/profile |
channel/videos |
Channel profile & video list completes |
| Endpoint | X-Webhook-Endpoint value |
Fires when |
|---|---|---|
POST /api/instagram/profile |
instagram/profile |
Profile fetch completes or fails |
POST /api/instagram/content |
instagram/content |
Content metadata fetch completes or fails |
POST /api/instagram/list |
instagram/list |
Full posts & reels list is ready or fails |
POST /api/instagram/audio |
instagram/audio |
Instagram audio download completes or fails |
Request Headers Sent to Your Server
Every webhook delivery includes these headers:
Content-Type: application/json
User-Agent: TranscriptDownloader-Webhook/1.0
X-Webhook-Endpoint: downloads/audio
X-Webhook-Original-Status: 200
X-Webhook-Download-Id: 01JW72M0AGW3M6R3QDCS30RD2P
The payload body is the exact same JSON the API endpoint would return β see each endpointβs documentation for the full response structure.
- YouTube API Documentation β
downloads/audio,transcripts,transcriptspeakerid,channel/profile - Instagram API Documentation β
instagram/profile,instagram/content,instagram/list,instagram/audio
Retry Behaviour
| Attempt | Delay before retry |
|---|---|
| 1st retry | 10 seconds |
| 2nd retry | 30 seconds |
| 3rd retry | 60 seconds |
After 3 failed attempts the delivery is permanently abandoned. Ensure your endpoint returns a 2xx status code promptly to acknowledge receipt.
Important Notes
include_webhookmust be passed at request time β it cannot be added after a job has started.- The webhook fires once per job β on final success or final failure. No intermediate
pendingwebhooks are sent. - For
instagram/list, two separate webhooks are fired β one when posts complete and one when reels complete. Each webhook contains only its own data (posts/reels) and a singledownloadobject for that type. - The webhook URL is per-request β pass a different URL on each call if needed.
- Webhooks are delivered asynchronously via a background queue worker β delivery may take a few seconds after job completion.
Support
If you need assistance or have any questions, please contact our support team at https://transcriptdownloader.com/#contact.