Webhook Events
Subscribe to these events to receive notifications when operations complete.
Event types
| Event | Trigger |
|---|---|
video.analyzed | Video analysis completed successfully |
video.translated | Video translation completed successfully |
subtitles.generated | Subtitles have been generated |
voiceover.generated | Voiceover generation completed |
article.generated | Help article generated |
export.completed | Video export completed successfully |
export.failed | Video export failed |
tool.completed | A tool job (e.g. voiceover) completed |
tool.failed | A tool job failed |
process.completed | All steps in a /process pipeline finished |
process.failed | A step in a /process pipeline failed |
Event payload
Every webhook delivery has this structure:
{
"event": "video.analyzed",
"data": {
"videoId": "vid_1708300000000_abc1234",
"jobId": "analysis_1708300000000_abc1234"
},
"webhookId": "wh_abc123"
}
| Field | Type | Description |
|---|---|---|
event | string | The event type |
data | object | Event-specific payload (see below) |
webhookId | string | The webhook that triggered this delivery |
Event-specific payloads
video.analyzed
{
"videoId": "vid_...",
"jobId": "analysis_..."
}
video.translated
{
"videoId": "vid_...",
"jobId": "translation_...",
"language": "es"
}
subtitles.generated
{
"videoId": "vid_...",
"jobId": "analysis_..."
}
voiceover.generated
{
"videoId": "vid_...",
"jobId": "tool_..."
}
article.generated
{
"videoId": "vid_...",
"title": "How to Configure Settings"
}
export.completed
{
"videoId": "vid_...",
"jobId": "export_...",
"exportedVideoUrl": "https://...",
"exportedSrtUrl": "https://...",
"exportedVoiceoverUrl": "https://..."
}
exportedVoiceoverUrl is the combined voiceover audio track as a single MP3, present only when voiceover was generated for the video.
export.failed
{
"videoId": "vid_...",
"jobId": "export_...",
"error": "Encoding failed"
}
tool.completed
Fired when a tool execution job completes successfully.
{
"jobId": "tool_...",
"toolType": "video-trimmer",
"result": {
"url": "https://...",
"mimeType": "video/mp4"
}
}
| Field | Type | Description |
|---|---|---|
jobId | string | The job ID |
toolType | string | Tool type identifier (e.g. video-trimmer, subtitle-translator) |
result | object | Tool-specific output data |
tool.failed
Fired when a tool execution job fails.
{
"jobId": "tool_...",
"toolType": "video-trimmer",
"error": "Processing failed: invalid video format"
}
| Field | Type | Description |
|---|---|---|
jobId | string | The job ID |
toolType | string | Tool type identifier |
error | string | Error description |
process.completed
Fired when all steps in a one-shot /process pipeline finish successfully.
{
"jobId": "process_...",
"videoId": "vid_...",
"completedSteps": ["analysis", "voiceover", "helpArticle", "export", "translation"],
"exportedVideoUrl": "https://...",
"exportedSrtUrl": "https://...",
"exportedVoiceoverUrl": "https://..."
}
| Field | Type | Description |
|---|---|---|
jobId | string | The process job ID |
videoId | string | The created video ID |
completedSteps | string[] | List of completed pipeline steps |
exportedVideoUrl | string | URL of the exported video (if export was requested) |
exportedSrtUrl | string | URL of the SRT file (if export was requested) |
exportedVoiceoverUrl | string | URL of the combined voiceover MP3 (if voiceover was generated) |
process.failed
Fired when any step in the pipeline fails, halting the remaining steps.
{
"jobId": "process_...",
"videoId": "vid_...",
"failedStep": "export"
}
| Field | Type | Description |
|---|---|---|
jobId | string | The process job ID |
videoId | string | The created video ID |
failedStep | string | The step that failed |