Event Types
Ignite Webhooks support three event types for video lifecycle events. You can subscribe to any combination of these events when creating a webhook subscription.
Available Events
video.created
Triggered when a new video is created in your workspace.
When it fires:
- A new video object is created via the API
- A video is uploaded through the Admin UI
Payload: The complete video object with all initial values. Note that the video status may be NO_FILE or PROCESSING at this point.
video.updated
Triggered when any property of a video is modified.
When it fires:
- Video metadata is updated (title, description, visibility, etc.)
- Video processing completes (status changes to
COMPLETE) - Text tracks or chapters are added/modified
- Categories or tags are changed
- Thumbnail is updated
Payload: The complete video object with all current values after the update.
video.deleted
Triggered when a video is deleted from your workspace.
When it fires:
- A video is deleted via the API
- A video is deleted through the Admin UI
Payload: The complete video object as it existed before deletion.
Event Payload Structure
All events deliver the complete video object as the request body. The event type is specified in the X-Webhook-Event header, not in the body.
Example: video.created
Headers:
POST /your-webhook-endpoint HTTP/1.1
Content-Type: application/json
X-Webhook-Event: video.created
X-Webhook-Signature: t=1705316400000,v1=abc123...
X-Webhook-Delivery-Id: del_507f1f77bcf86cd799439011Body:
{
"id": "507f1f77bcf86cd799439011",
"status": "PROCESSING",
"visibility": "private",
"title": "My New Video",
"description": "",
"duration": 0,
"workspace": "507f1f77bcf86cd799439000",
"createdAt": "2024-01-15T10:30:00.000Z",
"updatedAt": "2024-01-15T10:30:00.000Z"
}Example: video.updated
Headers:
POST /your-webhook-endpoint HTTP/1.1
Content-Type: application/json
X-Webhook-Event: video.updated
X-Webhook-Signature: t=1705316500000,v1=def456...
X-Webhook-Delivery-Id: del_507f1f77bcf86cd799439012Body:
{
"id": "507f1f77bcf86cd799439011",
"status": "COMPLETE",
"visibility": "public",
"title": "My New Video",
"description": "A great video about something",
"duration": 120,
"fps": 30,
"orientation": "landscape",
"src": {
"thumbnailUrl": "https://cdn.ignite.video/...",
"abr": {
"resolution": "auto",
"description": "Adaptive Bitrate Streaming (ABR)",
"url": "https://cdn.ignite.video/.../master.m3u8",
"maxWidth": 1920,
"maxHeight": 1080
},
"hls": [...],
"mp4": [...]
},
"workspace": "507f1f77bcf86cd799439000",
"createdAt": "2024-01-15T10:30:00.000Z",
"updatedAt": "2024-01-15T10:35:00.000Z"
}Example: video.deleted
Headers:
POST /your-webhook-endpoint HTTP/1.1
Content-Type: application/json
X-Webhook-Event: video.deleted
X-Webhook-Signature: t=1705316600000,v1=ghi789...
X-Webhook-Delivery-Id: del_507f1f77bcf86cd799439013Body:
{
"id": "507f1f77bcf86cd799439011",
"status": "COMPLETE",
"visibility": "public",
"title": "My New Video",
"description": "A great video about something",
"duration": 120,
"workspace": "507f1f77bcf86cd799439000",
"createdAt": "2024-01-15T10:30:00.000Z",
"updatedAt": "2024-01-15T10:35:00.000Z"
}Best Practices
Handle All Subscribed Events
Always check the X-Webhook-Event header and handle each event type appropriately:
const eventType = request.headers['x-webhook-event'];
switch(eventType) {
case 'video.created':
// Handle new video
break;
case 'video.updated':
// Handle video update
break;
case 'video.deleted':
// Handle video deletion
break;
default:
console.log('Unknown event type:', eventType);
}Use the Delivery ID for Idempotency
The X-Webhook-Delivery-Id header contains a unique identifier for each webhook delivery. Store processed delivery IDs to prevent duplicate processing in case of retries:
const deliveryId = request.headers['x-webhook-delivery-id'];
if (await hasBeenProcessed(deliveryId)) {
return res.status(200).json({ received: true, duplicate: true });
}
// Process the event...
await markAsProcessed(deliveryId);