Webhook events supported by Synthesia

All webhook events follow the same pattern. At the top level, there will be two keys: one that describes the event that occurred, and one that contains the event-specific payload.

{
  "type": "video.completed",
  "data": {
    ...
  }
}
Object KeysTypeDescription
typestringThe event type. Available event types: video.completed,video.failed.
dataJSONThe event payload.

video.completed

The video.completed event is sent when a video finishes processing.
Note: This event is not sent when a template preview is completed.

Object KeysTypeDescription
callbackId stringArbitrary metadata set for the video when creating the video.
captionsJSONA JSON object with time-limited download URLs for the video captions in vtt and srt formats.
createdAt integerUNIX timestamp representing the time video was created.
description stringDescription of the video (used on the video's share page).
downloadstringA time-limited URL which may be used to download the video.

This field is only available if the video status is complete.
durationstringDuration of the video.

This field is only available if the video status is complete.
id stringUnique identifier for the video.
lastUpdatedAt integerUNIX timestamp representing the time video was last updated.
statusstringDescribes the processing status of the video.

- in_progress: the video is being processed.
- complete: the video was processed successfully.
- error: an error occurred during processing.
- rejected: the video was rejected during moderation due to inappropriate content.
titlestringTitle of the video (used on the video's share page).
thumbnailJSONA JSON object with time-limited download URLs for static (.jpg) and animated (.gif) video thumbnails.

This field is only available if the video status is complete.
If an animated GIF thumbnail is not present, only the URL for the static thumbnail will be returned.
visibilitystringDescribes the visibility settings of the video.

- If public, the video's share page is active.
- If private, the video's share page is not active; visitors will receive a 404 Not Found response.
{
  "type": "video.completed",
  "data": {
    ...
  }
}
{
  "data": {
    "callbackId": "[email protected]",
    "captions": {
    	"srt": "https://...",
   	 	"vtt": "https://...",
  	},
    "createdAt": 1602512112,
    "description": "This is my first synthetic video, made with the Synthesia API!",
    "download": "https://...",
    "duration": "0:00:59.000000",
    "id": "1234-...",
    "lastUpdatedAt": 1602512112,
    "status": "complete",
    "thumbnail": {
    	"image": "https://...",
   	 	"gif": "https://...",
  	},
    "title": "Hello, World!",  
    "visibility": "private"
  },
  "type": "video.completed"
}

video.failed

The video.failed event is sent when a video fails to process.

Object KeysTypeDescription
createdAtintegerUNIX timestamp representing the time video was created.
descriptionstringDescription of the video (used on the video's share page).
idstringUnique identifier for the video.
messagestringDescribes why the video failed to process.
statusstringDescribes the processing status of the video (error).
titlestringTitle of the video (used on the video's share page).
{
  "type": "video.failed",
  "data": {
    ...
  }
}
{
  "data": {
    "id": "1234-...",
    "title": "Hello, World!",
    "description": "This is my first synthetic video, made with the Synthesia API!",
    "status": "error",
    "createdAt": 1602512112,
    "message": "Video failed: User does not have access to Avatar 1234-abcd"
  },
   "type": "video.failed" 
}