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
{
"jobId": "export_...",
"projectId": "vid_...",
"videoUrl": "https://...",
"srtUrl": "https://...",
"voiceoverUrl": "https://...",
"downloadUrls": {
"video": "https://...",
"srt": "https://...",
"voiceover": "https://..."
},
"downloadUrlsExpireAt": null
}
projectId is the video's id. voiceoverUrl is the combined voiceover audio track as a single
MP3, present only when voiceover was generated for the video.
videoUrl, srtUrl and voiceoverUrl are the files' permanent addresses. Fetch the files from
downloadUrls. In most workspaces they are the same addresses and downloadUrlsExpireAt is
null. In a workspace with private media, they are signed links that work for 24 hours. After
that, get a fresh one from Download Files.
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 |