{"info": {"description": "Synthesia public API endpoints", "title": "Synthesia API", "version": "2.0.0"}, "servers": [{"url": "https://api.synthesia.io", "description": "Synthesia public API URL."}], "paths": {"/mux": {}, "/v2/oembed": {}, "/v2/templates": {"get": {"summary": "List templates", "description": "Use the List templates endpoint to get an overview of all templates in Synthesia STUDIO, as well as the variables that may be provided when using them.", "tags": ["Templates"], "security": [{"api_key": []}], "parameters": [{"in": "query", "name": "limit", "description": "This parameter lets you specify the amount of videos to return in your API call. The maximum amount of videos you can have returned to you via this parameter is 100.", "schema": {"type": "integer", "default": 20, "minimum": 1, "maximum": 100}, "required": false}, {"in": "query", "name": "offset", "description": "Used to page through the videos. Every call to this endpoint will return the next offset value. This value is used in the offset parameter of the next call to get the next page of videos.", "schema": {"type": "integer", "default": 0, "minimum": 0}, "required": false}, {"in": "query", "name": "source", "description": "Filter templates by source. Possible values: - `workspace` - `shared_with_me`", "schema": {"type": "array", "default": ["synthesia", "workspace"], "items": {"type": "string", "enum": ["workspace", "synthesia"]}}, "required": false, "explode": true, "style": "form"}], "responses": {"200": {"description": "OK.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/TemplateListResponse"}}}}, "400": {"description": "Bad Request.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Forbidden - Wrong API key.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "default": {"description": "Unexpected Server error.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/v2/templates/{template_id}": {"get": {"summary": "Retrieve a template", "description": "You can use Retrieve a template endpoint to pull information on a template. In particular, you may use it to find out the variables available for customisation.", "tags": ["Templates"], "security": [{"api_key": []}], "parameters": [{"in": "path", "name": "template_id", "description": "The ID of the template to be retrieved.", "schema": {"type": "string"}, "required": true}], "responses": {"200": {"description": "OK.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/TemplateResponse"}}}}, "400": {"description": "Bad request.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Template not found.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Forbidden - Wrong API key.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "default": {"description": "Unexpected Server error.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/v2/translate/languages": {"get": {"summary": "Get supported languages for translations", "description": "Get a list of supported languages for translations.", "tags": ["Translations"], "security": [{"api_key": []}], "responses": {"200": {"description": "OK.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/VideoResponse"}}}}, "403": {"description": "Forbidden - Wrong API key.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "default": {"description": "Unexpected Server error.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/v2/translate/manual": {"post": {"summary": "Translate and generate a video from XLIFF definition", "description": "Given XLIFF content, translate and generate a video.", "tags": ["Translations"], "security": [{"api_key": []}], "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/CreateTranslatedVideoFromXliffRequest"}}}}, "responses": {"201": {"description": "Created.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/CreateTranslatedVideoFromXliffResponse"}}}}, "400": {"description": "Bad Request.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Forbidden - Wrong API key.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "default": {"description": "Unexpected Server error.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/v2/videos/fromTemplate": {"post": {"summary": "Create a video from a template", "description": "Create a video based on a template created in Synthesia.", "tags": ["Videos"], "security": [{"api_key": []}], "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/VideoFromTemplateApi"}}}}, "responses": {"201": {"description": "Created.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/VideoResponse"}}}}, "400": {"description": "Bad Request.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Forbidden - Wrong API key.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "default": {"description": "Unexpected Server error.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/v2/videos": {"get": {"summary": "List videos", "description": "You can use the List videos endpoint to get an overview of all videos created via the API or STUDIO.", "tags": ["Videos"], "security": [{"api_key": []}], "parameters": [{"in": "query", "name": "limit", "description": "This parameter lets you specify the amount of videos to return in your API call. The maximum amount of videos you can have returned to you via this parameter is 100.", "schema": {"type": "integer", "default": 20, "minimum": 1, "maximum": 100}, "required": false}, {"in": "query", "name": "offset", "description": "Used to page through the videos. Every call to this endpoint will return the next offset value. This value is used in the offset parameter of the next call to get the next page of videos.", "schema": {"type": "integer", "default": 0, "minimum": 0}, "required": false}, {"in": "query", "name": "source", "description": "Filter videos by source. Possible values: - `workspace` - `shared_with_me` - `my_videos`", "schema": {"type": "array", "default": ["workspace", "shared_with_me", "my_videos"], "items": {"type": "string", "enum": ["workspace", "shared_with_me", "my_videos"]}}, "required": false, "explode": true, "style": "form"}], "responses": {"200": {"description": "OK.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/VideoListResponse"}}}}, "400": {"description": "Bad Request.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Forbidden - Wrong API key.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "default": {"description": "Unexpected Server error.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}, "post": {"summary": "Create a video", "description": "Create a video within your Synthesia account. To get started on this endpoint check the [API Quickstart guide](https://docs.synthesia.io/reference/synthesia-api-quickstart).", "tags": ["Videos"], "security": [{"api_key": []}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/CreateVideoRequest"}}}}, "responses": {"200": {"description": "OK.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/VideoResponse"}}}}, "400": {"description": "Bad Request.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Forbidden - Wrong API key.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "default": {"description": "Unexpected Server error.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/v2/videos/{video_id}": {"delete": {"summary": "Delete a video", "description": "Use this endpoint to delete videos.", "tags": ["Videos"], "security": [{"api_key": []}], "parameters": [{"in": "path", "name": "video_id", "description": "The id of the video to delete.", "schema": {"type": "string"}, "required": true}], "responses": {"204": {"description": "The video was deleted successfully."}, "400": {"description": "Bad Request.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Forbidden - Wrong API key.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Video ID was not found.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "default": {"description": "Unexpected Server error.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}, "get": {"summary": "Retrieve a video", "description": "You can use Retrieve a video endpoint to pull for the video status.", "tags": ["Videos"], "security": [{"api_key": []}], "parameters": [{"in": "path", "name": "video_id", "description": "The video ID to retrieve", "schema": {"type": "string"}, "required": true}], "responses": {"200": {"description": "OK.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/VideoResponse"}}}}, "400": {"description": "Bad Request.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Forbidden - Wrong API key.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Video ID was not found.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "default": {"description": "Unexpected Server error.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}, "patch": {"summary": "Update a video", "description": "Use the Update a video endpoint to make the video public and accessible via the share page or update its title and description.", "tags": ["Videos"], "security": [{"api_key": []}], "parameters": [{"in": "path", "name": "video_id", "description": "The ID of the video to update", "schema": {"type": "string"}, "required": true}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/UpdateVideoMetadataRequest"}}}}, "responses": {"200": {"description": "OK.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/VideoResponse"}}}}, "400": {"description": "Bad Request.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Forbidden - Wrong API key.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Video not found.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "default": {"description": "Unexpected Server error.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/v2/videos/{video_id}/xliff": {"get": {"summary": "Retrieve XLIFF content for a video", "description": "You can use Retrieve XLIFF content endpoint to pull the XLIFF specification for a given video containing all the text content (script, chapters, text elements).", "tags": ["Videos"], "security": [{"api_key": []}], "parameters": [{"in": "path", "name": "video_id", "required": true, "schema": {"type": "string", "format": "uuid"}, "description": "The ID of the video to retrieve the XLIFF from."}, {"in": "query", "name": "videoVersion", "description": "The version of a video to get the XLIFF from.", "schema": {"type": "integer"}}, {"in": "query", "name": "xliffVersion", "description": "The desired version of XLIFF specification.", "schema": {"type": "string", "enum": ["1.2"]}}], "responses": {"200": {"description": "OK.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/VideoXliffResponse"}}}}, "400": {"description": "Bad Request.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Forbidden - Wrong API key.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Video ID was not found.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "default": {"description": "Unexpected Server error.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/{video_id}/thumbnail.jpg": {"get": {"summary": "Retrieve a thumbnail", "description": "Use this endpoint to pull information on a given video thumbnail.", "tags": ["Videos"], "security": [{"api_key": []}], "parameters": [{"in": "path", "name": "video_id", "description": "The ID of the video to retrieve the thumbnail from.", "schema": {"type": "string"}, "required": true}], "responses": {"200": {"description": "OK."}, "400": {"description": "Bad Request.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Thumbnail not found.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "default": {"description": "Unexpected Server error.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/{video_id}/thumbnail.gif": {"get": {"summary": "Retrieve a GIF thumbnail", "description": "Use this endpoint to pull information on a given video GIF thumbnail.", "tags": ["Videos"], "security": [{"api_key": []}], "parameters": [{"in": "path", "name": "video_id", "description": "The ID of the video to retrieve the thumbnail from.", "schema": {"type": "string"}, "required": true}], "responses": {"200": {"description": "OK."}, "400": {"description": "Bad Request.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Thumbnail not found.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "default": {"description": "Unexpected Server error.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/{video_id}/thumbnail": {"get": {"summary": "Retrieve a GIF/JPG thumbnail", "description": "Use this endpoint to pull information on a given video. It will return a GIF thumbnail if it exists, otherwise a JPG.", "tags": ["Videos"], "security": [{"api_key": []}], "parameters": [{"in": "path", "name": "video_id", "description": "The ID of the video to retrieve the thumbnail from.", "schema": {"type": "string"}, "required": true}], "responses": {"200": {"description": "OK."}, "400": {"description": "Bad Request.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Thumbnail not found.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "default": {"description": "Unexpected Server error.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/a/thumbnail/{alias_param}": {}, "/v2/webhooks/{webhook_id}": {"delete": {"summary": "Delete a webhook", "description": "Use this endpoint to delete videos.", "tags": ["Webhooks"], "security": [{"api_key": []}], "parameters": [{"in": "path", "name": "webhook_id", "description": "The unique identifier of the webhook to delete.", "schema": {"type": "string"}, "required": true}], "responses": {"204": {"description": "Webhook successfully deleted."}, "403": {"description": "Forbidden - Wrong API key.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Webhook ID doesn't exist.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "default": {"description": "Unexpected Server error.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}, "get": {"summary": "Retrieve a webhook", "description": "Retrieve a webhook endpoint to pull for the webhook status.", "tags": ["Webhooks"], "security": [{"api_key": []}], "parameters": [{"in": "path", "name": "webhook_id", "description": "The unique identifier of the webhook to retrieve.", "schema": {"type": "string"}, "required": true}], "responses": {"200": {"description": "OK.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/WebhookResponse"}}}}, "400": {"description": "Bad Request.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Forbidden - Wrong API key.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Webhook ID doesn't exist.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "default": {"description": "Unexpected Server error.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/v2/webhooks": {"get": {"summary": "List webhooks", "description": "List all currently configured webhooks in your Synthesia account.", "tags": ["Webhooks"], "security": [{"api_key": []}], "parameters": [{"in": "query", "name": "limit", "description": "This parameter lets you specify the amount of webhooks to return in your API call. The maximum amount of webhooks you can have returned to you via this parameter is 100.", "schema": {"type": "integer", "default": 20, "minimum": 1, "maximum": 100}, "required": false}, {"in": "query", "name": "offset", "description": "Used to page through the webhooks. Every call to this endpoint will return the next offset value. This value is used in the offset parameter of the next call to get the next page of webhooks.", "schema": {"type": "integer", "default": 0, "minimum": 0}, "required": false}, {"in": "query", "name": "deleted", "description": "If true, fetches deleted webhooks rather than active ones.", "schema": {"type": "boolean", "default": false}, "required": false}], "responses": {"200": {"description": "OK.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/WebhookListResponse"}}}}, "400": {"description": "Bad Request.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "default": {"description": "Unexpected Server error.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}, "post": {"summary": "Create a Webhook", "description": "Use the Create a webhook endpoint to create a new even subscription.", "tags": ["Webhooks"], "security": [{"api_key": []}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/CreateWebhookRequest"}}}}, "responses": {"201": {"description": "Webhook successfully created.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/WebhookResponse"}}}}, "400": {"description": "Bad Request.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "default": {"description": "Unexpected Server error.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/v2/auditLogs/events": {"get": {"tags": ["Audit Logs"], "summary": "Query audit log events", "description": "Retrieve paginated audit log events for a workspace or an organization.\nExactly one of workspaceId or organizationId must be provided.\n\nSupports filtering by date range (Unix timestamps), multiple actions, multiple actor IDs, and target ID.\nAny combination of filters can be applied together.\n\n**Array parameters use comma-separated values:**\n- Multiple actions: `?actions=billing.credits.consumed,dubbing.project.created`\n- Multiple actors: `?actorIds=user-123,user-456`\n\nExample queries:\n- Latest events: `GET /v2/auditLogs/events?workspaceId=12345678-1234-1234-1234-123456789abc&limit=50`\n- Filtered by action and date:\n  `GET /v2/auditLogs/events?workspaceId=12345678-1234-1234-1234-123456789abc`\n  `&actions=billing.credits.consumed&startDate=1704067200&endDate=1706745599`\n- Multiple filters:\n  `GET /v2/auditLogs/events?workspaceId=12345678-1234-1234-1234-123456789abc`\n  `&actions=billing.credits.consumed,dubbing.project.created&actorIds=user-123,user-456`\n\nThis endpoint is rate-limited and usage is tracked against your API quota.\n", "operationId": "getAuditLogEvents", "security": [{"api_key": []}], "parameters": [{"name": "workspaceId", "in": "query", "description": "Workspace UUID to filter events by (mutually exclusive with organizationId)", "required": false, "schema": {"type": "string", "format": "uuid"}}, {"name": "organizationId", "in": "query", "description": "Organization UUID to filter events by (mutually exclusive with workspaceId)", "required": false, "schema": {"type": "string", "format": "uuid"}}, {"name": "actions", "in": "query", "description": "Comma-separated list of actions to filter by\n(e.g. \"billing.credits.consumed,dubbing.project.created\")\n", "required": false, "schema": {"type": "string"}, "example": "billing.credits.consumed,dubbing.project.created"}, {"name": "actorIds", "in": "query", "description": "Comma-separated list of actor IDs to filter by (e.g. \"user-123,user-456\")", "required": false, "schema": {"type": "string"}, "example": "user-123,user-456"}, {"name": "targetId", "in": "query", "description": "Filter events by target ID", "required": false, "schema": {"type": "string"}}, {"name": "startDate", "in": "query", "description": "Filter events created on or after this Unix timestamp (seconds since epoch)", "required": false, "schema": {"type": "integer", "minimum": 0}, "example": 1704067200}, {"name": "endDate", "in": "query", "description": "Filter events created before this Unix timestamp (seconds since epoch)", "required": false, "schema": {"type": "integer", "minimum": 0}, "example": 1706745599}, {"name": "cursor", "in": "query", "description": "Opaque cursor for pagination", "required": false, "schema": {"type": "string"}}, {"name": "limit", "in": "query", "description": "Number of events per page (max 200)", "required": false, "schema": {"type": "integer", "minimum": 1, "maximum": 200, "default": 50}}], "responses": {"200": {"description": "Paginated list of audit events", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AuditLogsPageResponse"}}}}, "400": {"description": "Invalid query parameters", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Forbidden - Wrong API key or Public API access disabled", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Workspace or organization not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Rate limit exceeded", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "default": {"description": "Unexpected Server error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/v2/auditLogs/events/search": {"post": {"tags": ["Audit Logs"], "summary": "Search audit log events (Advanced)", "description": "Advanced search endpoint for audit log events with complex filter criteria.\n\n**For most use cases, use GET /v2/auditLogs/events instead.**\n\nUse this endpoint when:\n- Filtering by 50+ actions or actors\n- Complex query logic (future enhancement)\n- Programmatic access requiring JSON request bodies\n\nExactly one of workspaceId or organizationId must be provided.\nSupports filtering by date range (Unix timestamps), multiple actions, multiple actor IDs, and target ID.\nAny combination of filters can be applied together.\n\nExample request body for January 2024 user login events:\n{\n  \"workspaceId\": \"12345678-1234-1234-1234-123456789abc\",\n  \"actions\": [\"user.authentication.login\"],\n  \"startDate\": 1704067200,\n  \"endDate\": 1706745599\n}\n\nThis endpoint is rate-limited and usage is tracked against your API quota.\n", "operationId": "searchAuditLogEvents", "security": [{"api_key": []}], "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AuditLogsQueryRequest"}}}}, "responses": {"200": {"description": "Paginated list of audit events", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AuditLogsPageResponse"}}}}, "400": {"description": "Invalid query parameters", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Forbidden - Wrong API key or Public API access disabled", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Workspace or organization not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Rate limit exceeded", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "default": {"description": "Unexpected Server error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/v2/auditLogs/export": {"post": {"tags": ["Audit Logs"], "summary": "Export audit log events as CSV", "description": "Export audit log events for a workspace or organization as a CSV file.\nExactly one of workspaceId or organizationId must be provided.\n\nSupports the same filtering options as the query endpoints:\n- Date range (Unix timestamps)\n- Multiple actions\n- Multiple actor IDs\n- Target ID\n\n**Export limits:**\n- Maximum 10,000 events per export\n- If more events match the filters, the export will be truncated\n- Truncated exports include \"_TRUNCATED\" in the filename\n\n**Example requests:**\n- Export all events for an organization:\n  {\"organizationId\": \"12345678-1234-1234-1234-123456789abc\"}\n- Export filtered events:\n  {\"organizationId\": \"12345678-1234-1234-1234-123456789abc\",\n   \"startDate\": 1704067200, \"endDate\": 1735689599,\n   \"actions\": [\"billing.credits.consumed\", \"video.created\"]}\n- Export by workspace with filters:\n  {\"workspaceId\": \"12345678-1234-1234-1234-123456789abc\",\n   \"actorIds\": [\"user-123\", \"user-456\"]}\n\nThis endpoint is rate-limited and usage is tracked against your API quota.\n", "operationId": "exportAuditLogEvents", "security": [{"api_key": []}], "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AuditLogsExportRequest"}}}}, "responses": {"200": {"description": "CSV file containing audit log events", "content": {"application/csv": {"schema": {"type": "string", "format": "binary"}}}, "headers": {"Content-Disposition": {"description": "Attachment filename", "schema": {"type": "string", "example": "attachment; filename=\"audit_logs_export_20240115_120000.csv\""}}}}, "400": {"description": "Invalid request parameters", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Forbidden - Wrong API key or Public API access disabled", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Workspace or organization not found", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Rate limit exceeded", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "default": {"description": "Unexpected Server error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/v2/dubbing": {"post": {"summary": "Create a dubbing project from an uploaded video asset", "description": "Use this endpoint to create a dubbing project from an uploaded video asset.\n\n---\n\n## \ud83d\udea7 Beta Feature: sourceVideoUrl\n\nCreating a dubbing project using `sourceVideoUrl` is currently in **beta** and only available to selected workspaces.\n\n**Important:**\n- Using this option without access will return a `403 Forbidden` error\n- Contact support to request access to this beta feature\n- Currently only S3 signed URLs are supported (using other URLs will return a `501` error)", "tags": ["Dubbing"], "security": [{"api_key": []}], "requestBody": {"required": true, "content": {"application/json": {"schema": {"oneOf": [{"title": "Create from uploaded asset", "description": "Create a dubbing project from a previously uploaded video asset", "$ref": "#/components/schemas/CreateDubbingProjectApiRequestFromSourceAssetId"}, {"title": "Create from video URL (BETA)", "description": "\ud83d\udea7 **BETA**: Create a dubbing project directly from a video URL. Only available to selected workspaces. Using without access will return a `403 Forbidden` error. Contact support for access.", "allOf": [{"$ref": "#/components/schemas/CreateDubbingProjectApiRequestFromSourceVideoUrl"}], "x-beta": true}]}}}}, "responses": {"202": {"description": "Accepted - Dubbing project created successfully.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/CreateDubbingProjectApiResponseSuccess"}}}}, "400": {"description": "Bad Request - Failed to create dubbing project. This can occur when: - The request validation fails - The source asset video URL is broken or inaccessible - There are errors creating the dubbed videos", "content": {"application/json": {"schema": {"oneOf": [{"$ref": "#/components/schemas/CreateDubbingProjectApiResponseFail"}, {"type": "object", "properties": {"context": {"type": "string", "example": "One or more of the asset URLs in your video was broken"}, "error": {"type": "string", "example": "BrokenAssetUrlError"}}}]}}}}, "403": {"description": "Forbidden - Wrong API key.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Asset ID was not found.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "501": {"description": "Not Implemented", "content": {"application/json": {"schema": {"type": "object", "properties": {"error": {"type": "string", "example": "Not implemented yet: Only S3 related URLs are supported at the moment"}}}}}}, "default": {"description": "Unexpected Server error.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/v2/dubbing/{dubbing_project_id}": {"get": {"summary": "Get dubbing project status and videos", "description": "Retrieve the status of a dubbing project and its dubbed videos.\n**Status values:** - `uploading`: The source video is still being uploaded/processed (only for projects created via sourceVideoUrl) - `in_progress`: Dubbing is in progress - `complete`: All dubbing is complete - `error`: An error occurred during dubbing\n**Response varies by status:** - UPLOADING: Returns only id and status - IN_PROGRESS/COMPLETE: Returns id, status, and dubbedAssets array - ERROR: Returns id, status, and errorCode\n**Dubbed asset status:** - IN_PROGRESS: Returns minimal data (id, language, status) - COMPLETE: Returns full data including download URLs - ERROR: Returns minimal data plus errorCode", "tags": ["Dubbing"], "security": [{"api_key": []}], "parameters": [{"in": "path", "name": "dubbing_project_id", "required": true, "schema": {"type": "string", "format": "uuid"}, "description": "UUID of the dubbing project (original imported video)"}, {"in": "query", "name": "targetLanguages", "required": false, "schema": {"type": "array", "items": {"type": "string"}}, "description": "Optional list of language codes to filter dubbed videos (e.g., es, fr, de)", "example": ["es", "fr"]}], "responses": {"200": {"description": "Successfully retrieved dubbing project status", "content": {"application/json": {"schema": {"oneOf": [{"$ref": "#/components/schemas/GetDubbingProjectVideosResponseUploading"}, {"$ref": "#/components/schemas/GetDubbingProjectVideosResponseInProgress"}, {"$ref": "#/components/schemas/GetDubbingProjectVideosResponseComplete"}, {"$ref": "#/components/schemas/GetDubbingProjectVideosResponseError"}]}, "examples": {"uploading": {"value": {"id": "123e4567-e89b-12d3-a456-426614174000", "status": "uploading"}}, "in_progress": {"value": {"id": "123e4567-e89b-12d3-a456-426614174000", "status": "in_progress", "dubbedAssets": [{"id": "456e7890-e89b-12d3-a456-426614174000", "language": "es-ES", "status": "in_progress"}]}}, "complete": {"value": {"id": "123e4567-e89b-12d3-a456-426614174000", "status": "complete", "dubbedAssets": [{"id": "456e7890-e89b-12d3-a456-426614174000", "title": "My Video", "language": "es-ES", "status": "complete", "download": "https://..."}]}}, "error": {"value": {"id": "123e4567-e89b-12d3-a456-426614174000", "status": "error", "errorCode": "moderation"}}}}}}, "400": {"description": "Bad Request - Invalid dubbing project.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Forbidden - Wrong API key.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not Found - Feature disabled or target languages not found.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "default": {"description": "Unexpected Server error.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}, "put": {"summary": "Add locales to a a dubbing project (original imported video)", "description": "Add the passed target locales to a dubbing project (original imported video). If a target locale is already added, it will be skipped.", "tags": ["Dubbing"], "security": [{"api_key": []}], "parameters": [{"in": "path", "name": "dubbing_project_id", "required": true, "schema": {"type": "string", "format": "uuid"}, "description": "UUID of the dubbing project (original imported video)"}], "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddLocalesToDubbingProjectRequest"}}}}, "responses": {"202": {"description": "Successfully scheduled dubbing for provided locales.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddLocalesToDubbingProjectResponse"}}}}, "204": {"description": "All requested locales were already added."}, "400": {"description": "Bad Request. Invalid imported video or locales.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Forbidden - Wrong API key.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not Found - Imported video not found.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "default": {"description": "Unexpected Server error.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/v2/assets": {"post": {"summary": "Create media asset", "description": "Creates a media asset with support for multipart or direct url upload. This endpoint currently supports only the dubbing configuration.", "tags": ["Assets"], "security": [{"api_key": []}], "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/CreateAssetRequest"}}}}, "responses": {"201": {"description": "Created. Returns upload credentials for the multipart upload.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/CreateAssetMultipartUploadResponse"}}}}, "400": {"description": "Unsupported Media Type.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "default": {"description": "Unexpected Server error.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/v2/assets/{user_media_asset_id}": {"get": {"summary": "Get user media asset", "description": "Retrieves a user uploaded media asset by its ID. Returns the asset's status, title, content type, and metadata including detected language if available. Currently only supports user-uploaded assets in the dubbing configuration.", "tags": ["Assets"], "security": [{"api_key": []}], "parameters": [{"in": "path", "name": "user_media_asset_id", "required": true, "schema": {"type": "string", "format": "uuid"}, "description": "The unique identifier of the media asset to retrieve."}], "responses": {"200": {"description": "Success. Returns the media asset details.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/GetPublicApiUserUploadedAssetResponse"}}}}, "400": {"description": "Bad Request. Asset is not a valid user uploaded asset.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not Found. Asset does not exist or user does not have access.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "default": {"description": "Unexpected Server error.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/v2/translations/{root_video_id}": {"put": {"summary": "Start/Update a video translation", "description": "Kick off TranslateVideoWorkflow for each requested target language. Returns a unified `translations` list. Each entry includes a `startedByRequest` flag: `true` if the workflow was started by this request, `false` if it was already in progress.", "tags": ["Translations"], "security": [{"api_key": []}], "parameters": [{"in": "path", "name": "root_video_id", "required": true, "schema": {"type": "string", "format": "uuid"}, "description": "The ID of the studio video to translate."}], "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UpsertVideoTranslationsApiRequest"}}}}, "responses": {"202": {"description": "Accepted \u2013 translation workflows started (or already running).", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UpsertVideoTranslationsSuccessApiResponse"}}}}, "400": {"description": "Bad Request \u2013 validation failed (unsupported language, wrong video type, translations not available for this workspace plan, or incompatible options \u2014 translateScriptOnly and autoGenerate cannot both be true).", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Forbidden \u2013 wrong API key or user lacks edit permission for the video.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not Found \u2013 video not found or Translations API disabled.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "default": {"description": "Unexpected server error.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}, "get": {"summary": "Get video translations of a given root video id", "description": "Returns the translation status for each language associated with the given studio video. Each entry has a `status` of `complete`, `in_progress`, or `error`. Active state takes priority: a re-triggered language appears as `in_progress`, not `complete`.", "tags": ["Translations"], "security": [{"api_key": []}], "parameters": [{"in": "path", "name": "root_video_id", "required": true, "schema": {"type": "string", "format": "uuid"}, "description": "The ID of the studio video."}], "responses": {"200": {"description": "OK \u2013 translation statuses for all languages.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/GetVideoTranslationsApiResponse"}}}}, "400": {"description": "Bad Request \u2013 wrong video type or translations not available for this workspace plan.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Forbidden \u2013 wrong API key or user lacks view permission for the video.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Not Found \u2013 video not found or Translations API disabled.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "default": {"description": "Unexpected server error.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/v2/videos/{video_id}/download": {}, "/v2/videos/{video_id}/playback": {}, "/v2/videos/{video_id}/thumbnail": {}, "/v2/videos/{video_id}/thumbnail/gif": {}}, "openapi": "3.0.2", "components": {"schemas": {"DubbingOutputLanguage": {"enum": ["af", "sq", "am", "ar", "ar-DZ", "ar-BH", "ar-EG", "ar-IQ", "ar-JO", "ar-KW", "ar-LY", "ar-MA", "ar-QA", "ar-SA", "ar-SY", "ar-TN", "ar-AE", "ar-YE", "hy", "as", "az", "eu", "be", "bn", "bs", "bg", "my", "ca", "ceb", "ny", "zh", "zh-CN", "zh-HK", "zh-TW", "hr", "cs", "da", "nl", "nl-BE", "nl-NL", "en", "en-AU", "en-CA", "en-GB", "en-HK", "en-IN", "en-IE", "en-KE", "en-MX", "en-NZ", "en-NG", "en-PH", "en-SG", "en-ZA", "en-TZ", "en-US", "et", "fil", "fi", "fr", "fr-BE", "fr-CA", "fr-FR", "fr-CH", "gl", "ka", "de", "de-AT", "de-DE", "de-CH", "el", "gu", "ha", "he", "hi", "hu", "is", "id", "ga", "it", "ja", "jw", "kn", "kk", "km", "ko", "ky", "lo", "lv", "ln", "lt", "lb", "mk", "ms", "ml", "mt", "mr", "mn", "ne", "no", "nb", "nn", "or", "pa", "ps", "fa", "pl", "pt", "pt-BR", "pt-PT", "ro", "ru", "sr", "sd", "si", "sk", "sl", "so", "es", "es-AR", "es-BO", "es-CL", "es-CO", "es-CR", "es-CU", "es-DO", "es-EC", "es-SV", "es-GQ", "es-GT", "es-HN", "es-LA", "es-MX", "es-NI", "es-PA", "es-PY", "es-PE", "es-PR", "es-ES", "es-US", "es-UY", "es-VE", "su", "sw", "sv", "ta", "ta-IN", "ta-SG", "ta-LK", "te", "th", "tr", "uk", "ur", "uz", "vi", "cy", "zu"], "title": "DubbingOutputLanguage", "type": "string"}, "AddLocalesToDubbingProjectRequest": {"properties": {"targetLanguages": {"description": "The languages to dub the source media asset to.", "example": ["es-ES", "fr-FR"], "items": {"$ref": "#/components/schemas/DubbingOutputLanguage"}, "title": "Targetlanguages", "type": "array"}, "lipsyncEnabled": {"default": false, "description": "Whether to enable lipsync for the dubbed video.", "example": true, "title": "Lipsyncenabled", "type": "boolean"}, "videoDuration": {"default": "adaptive", "description": "The duration of the video to create.", "enum": ["adaptive", "original"], "example": "adaptive", "title": "Videoduration", "type": "string"}, "visibility": {"default": "private", "description": "The visibility of the dubbed video.", "enum": ["private", "public"], "example": "private", "title": "Visibility", "type": "string"}}, "required": ["targetLanguages"], "title": "AddLocalesToDubbingProjectRequest", "type": "object"}, "DubbingAssetRequestConfiguration": {"description": "Public API configuration for dubbing assets.", "properties": {"name": {"default": "dubbing", "title": "Name", "type": "string", "enum": ["dubbing"]}, "detectLanguage": {"default": true, "description": "Whether to detect the language of the asset.", "title": "Detectlanguage", "type": "boolean"}}, "title": "DubbingAssetRequestConfiguration", "type": "object"}, "CreateAssetRequest": {"properties": {"contentType": {"description": "The content type of the asset to upload. Must be one of: video/mp4, video/webm, or video/quicktime.", "enum": ["video/mp4", "video/webm", "video/quicktime"], "example": "video/mp4", "title": "Contenttype", "type": "string"}, "configuration": {"description": "The configuration to use for the asset.", "discriminator": {"mapping": {"dubbing": "#/components/schemas/DubbingAssetRequestConfiguration"}, "propertyName": "name"}, "oneOf": [{"$ref": "#/components/schemas/DubbingAssetRequestConfiguration"}], "title": "Configuration"}, "contentLength": {"default": null, "description": "The length of the file content to upload. This is used to verify the integrity of the asset during upload.", "title": "Contentlength", "type": "integer", "nullable": true}, "contentMD5": {"default": null, "description": "The MD5 hash of the file content to upload. This is used to verify the integrity of the asset during upload.", "title": "Contentmd5", "type": "string", "nullable": true}, "title": {"default": "Untitled", "description": "The title of the asset to upload.", "example": "Untitled", "maxLength": 256, "title": "Title", "type": "string"}}, "required": ["contentType", "configuration"], "title": "CreateAssetRequest", "type": "object"}, "DubbingInputLanguage": {"enum": ["af", "sq", "am", "ar", "ar-DZ", "ar-BH", "ar-EG", "ar-IQ", "ar-JO", "ar-KW", "ar-LY", "ar-MA", "ar-QA", "ar-SA", "ar-SY", "ar-TN", "ar-AE", "ar-YE", "hy", "as", "az", "ba", "eu", "be", "bn", "bs", "br", "bg", "my", "ca", "zh", "zh-CN", "zh-HK", "zh-TW", "hr", "cs", "da", "nl", "nl-BE", "nl-NL", "en", "en-AU", "en-CA", "en-GB", "en-HK", "en-IN", "en-IE", "en-KE", "en-MX", "en-NZ", "en-NG", "en-PH", "en-SG", "en-ZA", "en-TZ", "en-US", "et", "fo", "fi", "fr", "fr-BE", "fr-CA", "fr-FR", "fr-CH", "gl", "ka", "de", "de-AT", "de-DE", "de-CH", "el", "gu", "ht", "ha", "haw", "he", "hi", "hu", "is", "id", "it", "ja", "jw", "kn", "kk", "km", "ko", "lo", "la", "lv", "ln", "lt", "lb", "mk", "mg", "ms", "ml", "mt", "mi", "mr", "mn", "ne", "no", "nb", "nn", "oc", "pa", "ps", "fa", "pl", "pt", "pt-BR", "pt-PT", "ro", "ru", "sa", "sr", "sn", "sd", "si", "sk", "sl", "so", "es", "es-AR", "es-BO", "es-CL", "es-CO", "es-CR", "es-CU", "es-DO", "es-EC", "es-SV", "es-GQ", "es-GT", "es-HN", "es-LA", "es-MX", "es-NI", "es-PA", "es-PY", "es-PE", "es-PR", "es-ES", "es-US", "es-UY", "es-VE", "su", "sw", "sv", "tl", "tg", "ta", "ta-IN", "ta-SG", "ta-LK", "tt", "te", "th", "bo", "tr", "tk", "uk", "ur", "uz", "vi", "cy", "yi", "yo"], "title": "DubbingInputLanguage", "type": "string"}, "CreateDubbingProjectApiRequestFromSourceAssetId": {"properties": {"title": {"description": "The title of the dubbed video to create.", "example": "My dubbed video", "maxLength": 256, "title": "Title", "type": "string"}, "targetLanguages": {"description": "The languages to dub the source media asset to.", "example": ["es-ES", "fr-FR"], "items": {"$ref": "#/components/schemas/DubbingOutputLanguage"}, "title": "Targetlanguages", "type": "array"}, "lipsyncEnabled": {"default": false, "description": "Whether to enable lipsync for the dubbed video.", "example": true, "title": "Lipsyncenabled", "type": "boolean"}, "videoDuration": {"default": "adaptive", "description": "The duration of the video to create.", "enum": ["adaptive", "original"], "example": "adaptive", "title": "Videoduration", "type": "string"}, "visibility": {"default": "private", "description": "The visibility of the dubbed video.", "enum": ["private", "public"], "example": "private", "title": "Visibility", "type": "string"}, "sourceAssetId": {"description": "The ID of the source media asset to create the dubbed video from.", "example": "<uuid>", "title": "Sourceassetid", "type": "string"}, "sourceLanguage": {"$ref": "#/components/schemas/DubbingInputLanguage", "description": "The language of the source media asset.", "example": "en"}}, "required": ["title", "targetLanguages", "sourceAssetId", "sourceLanguage"], "title": "CreateDubbingProjectApiRequestFromSourceAssetId", "type": "object"}, "CreateDubbingProjectApiRequestFromSourceVideoUrl": {"properties": {"title": {"description": "The title of the dubbed video to create.", "example": "My dubbed video", "maxLength": 256, "title": "Title", "type": "string"}, "targetLanguages": {"description": "The languages to dub the source media asset to.", "example": ["es-ES", "fr-FR"], "items": {"$ref": "#/components/schemas/DubbingOutputLanguage"}, "title": "Targetlanguages", "type": "array"}, "lipsyncEnabled": {"default": false, "description": "Whether to enable lipsync for the dubbed video.", "example": true, "title": "Lipsyncenabled", "type": "boolean"}, "videoDuration": {"default": "adaptive", "description": "The duration of the video to create.", "enum": ["adaptive", "original"], "example": "adaptive", "title": "Videoduration", "type": "string"}, "visibility": {"default": "private", "description": "The visibility of the dubbed video.", "enum": ["private", "public"], "example": "private", "title": "Visibility", "type": "string"}, "sourceVideoUrl": {"description": "The public URL where the video to dub is available. At the moment only supporting s3 signed urls", "example": "s3://", "format": "uri", "maxLength": 2083, "minLength": 1, "title": "Sourcevideourl", "type": "string"}, "sourceLanguage": {"default": null, "description": "The language of the source media asset. If not specified, the language will be detected automatically.", "example": "en", "allOf": [{"$ref": "#/components/schemas/DubbingInputLanguage"}], "nullable": true}}, "required": ["title", "targetLanguages", "sourceVideoUrl"], "title": "CreateDubbingProjectApiRequestFromSourceVideoUrl", "type": "object"}, "AuditLogsQueryRequest": {"properties": {"workspaceId": {"default": null, "title": "Workspaceid", "format": "uuid", "type": "string", "nullable": true}, "organizationId": {"default": null, "title": "Organizationid", "format": "uuid", "type": "string", "nullable": true}, "startDate": {"default": null, "title": "Startdate", "minimum": 0, "type": "integer", "nullable": true}, "endDate": {"default": null, "title": "Enddate", "minimum": 0, "type": "integer", "nullable": true}, "actions": {"default": null, "title": "Actions", "items": {"type": "string"}, "minItems": 1, "type": "array", "nullable": true}, "actorIds": {"default": null, "title": "Actorids", "items": {"type": "string"}, "minItems": 1, "type": "array", "nullable": true}, "targetId": {"default": null, "title": "Targetid", "type": "string", "nullable": true}, "cursor": {"default": null, "title": "Cursor", "type": "string", "nullable": true}, "limit": {"default": 50, "maximum": 200, "minimum": 1, "title": "Limit", "type": "integer"}}, "title": "AuditLogsQueryRequest", "type": "object"}, "AuditLogsExportRequest": {"properties": {"workspaceId": {"default": null, "title": "Workspaceid", "format": "uuid", "type": "string", "nullable": true}, "organizationId": {"default": null, "title": "Organizationid", "format": "uuid", "type": "string", "nullable": true}, "startDate": {"default": null, "title": "Startdate", "minimum": 0, "type": "integer", "nullable": true}, "endDate": {"default": null, "title": "Enddate", "minimum": 0, "type": "integer", "nullable": true}, "actions": {"default": null, "title": "Actions", "items": {"type": "string"}, "minItems": 1, "type": "array", "nullable": true}, "actorIds": {"default": null, "title": "Actorids", "items": {"type": "string"}, "minItems": 1, "type": "array", "nullable": true}, "targetId": {"default": null, "title": "Targetid", "type": "string", "nullable": true}}, "title": "AuditLogsExportRequest", "type": "object"}, "UpsertVideoTranslationsApiRequest": {"properties": {"targetLanguages": {"description": "List of language codes to translate the video into. See https://docs.synthesia.io/docs/supported-languages for accepted values.", "example": ["es", "fr"], "items": {"type": "string"}, "minItems": 1, "title": "Targetlanguages", "type": "array"}, "translateScriptOnly": {"default": false, "description": "If true, only the script is translated without regenerating the video. Cannot be combined with autoGenerate.", "title": "Translatescriptonly", "type": "boolean"}, "autoGenerate": {"default": null, "description": "Automatically generate the translated video after translation completes. Set to 'private' to generate without sharing publicly, or 'public' to generate and publish immediately.", "title": "Autogenerate", "enum": ["private", "public"], "type": "string", "nullable": true}}, "required": ["targetLanguages"], "title": "UpsertVideoTranslationsApiRequest", "type": "object"}, "DubbedVideosApiError": {"properties": {"error": {"default": null, "description": "The error type.", "title": "Error", "type": "string", "nullable": true}, "language": {"default": null, "description": "The language of the error.", "title": "Language", "type": "string", "nullable": true}}, "title": "DubbedVideosApiError", "type": "object"}, "PublicApiImportedAndDubbedVideosErrorCode": {"enum": ["moderation", "video_duration_limit_reached", "invalid_target_language", "processing_error"], "title": "PublicApiImportedAndDubbedVideosErrorCode", "type": "string"}, "_DubbedAssetCaptions": {"properties": {"srt": {"default": null, "description": "A time-limited URL which may be used to download the video captions in srt format.", "title": "Srt", "type": "string", "nullable": true}, "vtt": {"default": null, "description": "A time-limited URL which may be used to download the video captions in vtt format.", "title": "Vtt", "type": "string", "nullable": true}}, "title": "_DubbedAssetCaptions", "type": "object"}, "_DubbedAssetComplete": {"description": "Dubbed asset complete - full data.", "properties": {"id": {"format": "uuid", "title": "Id", "type": "string"}, "title": {"description": "Title of the video (used on the video's share page).", "title": "Title", "type": "string"}, "description": {"description": "Description of the video (used on the video's share page).", "title": "Description", "type": "string"}, "language": {"$ref": "#/components/schemas/DubbingOutputLanguage", "description": "The language of the dubbed video."}, "status": {"default": "complete", "description": "The status of the dubbed video.", "title": "Status", "type": "string", "enum": ["complete"]}, "createdAt": {"default": null, "description": "UNIX timestamp representing the time video was created.", "title": "Createdat", "type": "integer", "nullable": true}, "lastUpdatedAt": {"default": null, "description": "UNIX timestamp representing the time video was last updated.", "title": "Lastupdatedat", "type": "integer", "nullable": true}, "visibility": {"description": "Describes the visibility settings of the video.", "enum": ["public", "private"], "title": "Visibility", "type": "string"}, "download": {"description": "A time-limited URL which may be used to download the video.", "title": "Download", "type": "string"}, "thumbnail": {"$ref": "#/components/schemas/_DubbedAssetThumbnail", "description": "A JSON object with time-limited download URLs for the video thumbnail and animated GIF thumbnail."}, "captions": {"$ref": "#/components/schemas/_DubbedAssetCaptions", "description": "A JSON object with time-limited download URLs for the video captions in vtt and srt formats."}}, "required": ["id", "title", "description", "language", "visibility", "download", "thumbnail", "captions"], "title": "_DubbedAssetComplete", "type": "object"}, "_DubbedAssetError": {"description": "Dubbed asset error - minimal data + error code.", "properties": {"id": {"format": "uuid", "title": "Id", "type": "string"}, "language": {"$ref": "#/components/schemas/DubbingOutputLanguage", "description": "The language of the dubbed video."}, "status": {"default": "error", "description": "The status of the dubbed video.", "title": "Status", "type": "string", "enum": ["error"]}, "errorCode": {"$ref": "#/components/schemas/PublicApiImportedAndDubbedVideosErrorCode", "description": "Some context in case of dubbed video error."}}, "required": ["id", "language", "errorCode"], "title": "_DubbedAssetError", "type": "object"}, "_DubbedAssetInProgress": {"description": "Dubbed asset in progress - minimal data.", "properties": {"id": {"format": "uuid", "title": "Id", "type": "string"}, "language": {"$ref": "#/components/schemas/DubbingOutputLanguage", "description": "The language of the dubbed video."}, "status": {"default": "in_progress", "description": "The status of the dubbed video.", "title": "Status", "type": "string", "enum": ["in_progress"]}}, "required": ["id", "language"], "title": "_DubbedAssetInProgress", "type": "object"}, "_DubbedAssetThumbnail": {"properties": {"image": {"default": null, "description": "A time-limited URL which may be used to download the video thumbnail.", "title": "Image", "type": "string", "nullable": true}, "gif": {"default": null, "description": "A time-limited URL which may be used to download the video animated GIF thumbnail.", "title": "Gif", "type": "string", "nullable": true}}, "title": "_DubbedAssetThumbnail", "type": "object"}, "AddLocalesToDubbingProjectResponse": {"properties": {"dubbedErrors": {"items": {"$ref": "#/components/schemas/DubbedVideosApiError"}, "title": "Dubbederrors", "type": "array"}, "createdDubbedAssets": {"items": {"anyOf": [{"$ref": "#/components/schemas/_DubbedAssetInProgress"}, {"$ref": "#/components/schemas/_DubbedAssetComplete"}, {"$ref": "#/components/schemas/_DubbedAssetError"}]}, "readOnly": true, "title": "Createddubbedassets", "type": "array"}}, "required": ["createdDubbedAssets"], "title": "AddLocalesToDubbingProjectResponse", "type": "object"}, "MultipartUploadCredentialsResponse": {"properties": {"accessKeyId": {"title": "Accesskeyid", "type": "string"}, "secretAccessKey": {"title": "Secretaccesskey", "type": "string"}, "sessionToken": {"title": "Sessiontoken", "type": "string"}, "bucket": {"title": "Bucket", "type": "string"}, "key": {"title": "Key", "type": "string"}}, "required": ["accessKeyId", "secretAccessKey", "sessionToken", "bucket", "key"], "title": "MultipartUploadCredentialsResponse", "type": "object"}, "CreateAssetMultipartUploadResponse": {"properties": {"id": {"title": "Id", "type": "string"}, "uploadUrl": {"default": null, "title": "Uploadurl", "type": "string", "nullable": true}, "uploadCredentials": {"$ref": "#/components/schemas/MultipartUploadCredentialsResponse"}}, "required": ["id", "uploadCredentials"], "title": "CreateAssetMultipartUploadResponse", "type": "object"}, "CreateDubbingProjectApiResponseFail": {"properties": {"dubbedErrors": {"description": "Errors related to the creation of the dubbed videos.", "items": {"$ref": "#/components/schemas/DubbedVideosApiError"}, "title": "Dubbederrors", "type": "array"}}, "title": "CreateDubbingProjectApiResponseFail", "type": "object"}, "_ImportedAssetId": {"properties": {"id": {"format": "uuid", "title": "Id", "type": "string"}}, "required": ["id"], "title": "_ImportedAssetId", "type": "object"}, "CreateDubbingProjectApiResponseSuccess": {"properties": {"createdImportedAsset": {"$ref": "#/components/schemas/_ImportedAssetId", "readOnly": true}}, "required": ["createdImportedAsset"], "title": "CreateDubbingProjectApiResponseSuccess", "type": "object"}, "AssetContentType": {"description": "AssetContentType specifies the MIME type of a particular asset, and provides some helper methods and properties", "enum": ["image/webp", "image/jpeg", "image/png", "image/svg+xml", "image/gif", "video/mp4", "video/webm", "video/quicktime", "audio/wav", "audio/mpeg", "audio/ogg", "audio/aac", "audio/flac", "audio/mp4", "audio/webm", "font/otf", "font/ttf", "font/woff", "application/font-woff", "font/woff2", "application/vnd.ms-powerpoint", "application/vnd.openxmlformats-officedocument.presentationml.presentation", "application/vnd.synthesia.studio-video", "application/vnd.synthesia.studio-imported-video", "application/vnd.synthesia.studio-dubbed-video", "application/vnd.synthesia.studio-photo-avatar-video", "application/vnd.synthesia.studio-synthesia-academy-video", "application/vnd.synthesia.studio-synthesia-feature-overview-video", "application/vnd.synthesia.studio-synthesia-example-video", "application/vnd.synthesia.studio-synthesia-demo-video", "application/vnd.synthesia.studio-synthesia-welcome-webinar-video", "application/vnd.synthesia.studio-user-template", "application/vnd.synthesia.studio-synthesia-template", "application/vnd.synthesia.studio-synthesia-processed-gif", "application/vnd.synthesia.studio-user-course", "application/vnd.synthesia.font-family", "application/vnd.synthesia.folder", "application/json", "application/x-xliff+xml", "application/pdf", "text/csv"], "title": "AssetContentType", "type": "string"}, "GetPublicApiMediaAssetMetadataResponse": {"properties": {"detectedLanguage": {"default": null, "allOf": [{"$ref": "#/components/schemas/LanguageBCP47"}], "nullable": true}}, "title": "GetPublicApiMediaAssetMetadataResponse", "type": "object"}, "LanguageBCP47": {"description": "A class for representing languages according to the BCP-47 standard.\nThe standard is followed very loosely, only primary language and region\nsub-tags are implemented right now.\n\nThe display names of the languages are derived from the enum names,\nwith the primary language name capitalized and the region name\ncapitalized and enclosed in parentheses if present. If you need to\ncustomize the display name for a specific language, you can override\nthe `override_display_name` method.\n\nhttps://www.w3.org/International/questions/qa-choosing-language-tags", "enum": ["af", "sq", "am", "ar", "ar-DZ", "ar-BH", "ar-EG", "ar-IQ", "ar-JO", "ar-KW", "ar-LY", "ar-MA", "ar-QA", "ar-SA", "ar-SY", "ar-TN", "ar-AE", "ar-YE", "hy", "as", "az", "ba", "eu", "be", "bn", "bs", "br", "bg", "my", "ca", "ceb", "ny", "zh", "zh-CN", "zh-HK", "zh-TW", "hr", "cs", "da", "nl", "nl-BE", "nl-NL", "en", "en-AU", "en-CA", "en-GB", "en-HK", "en-IN", "en-IE", "en-KE", "en-MX", "en-NZ", "en-NG", "en-PH", "en-SG", "en-ZA", "en-TZ", "en-US", "et", "fo", "fil", "fi", "fr", "fr-BE", "fr-CA", "fr-FR", "fr-CH", "gl", "ka", "de", "de-AT", "de-DE", "de-CH", "el", "gu", "ht", "ha", "haw", "he", "hi", "hu", "is", "id", "ga", "it", "ja", "jw", "kn", "kk", "km", "ko", "ky", "lo", "la", "lv", "ln", "lt", "lb", "mk", "mg", "ms", "ml", "mt", "mi", "mr", "mn", "ne", "no", "nb", "nn", "oc", "or", "pa", "ps", "fa", "pl", "pt", "pt-BR", "pt-PT", "ro", "ru", "sa", "sr", "sn", "sd", "si", "sk", "sl", "so", "es", "es-AR", "es-BO", "es-CL", "es-CO", "es-CR", "es-CU", "es-DO", "es-EC", "es-SV", "es-GQ", "es-GT", "es-HN", "es-LA", "es-MX", "es-NI", "es-PA", "es-PY", "es-PE", "es-PR", "es-ES", "es-US", "es-UY", "es-VE", "su", "sw", "sv", "tl", "tg", "ta", "ta-IN", "ta-SG", "ta-LK", "tt", "te", "th", "bo", "tr", "tk", "uk", "ur", "uz", "vi", "cy", "yi", "yo", "zu", "und"], "title": "LanguageBCP47", "type": "string"}, "PublicApiUserUploadedAssetErrorCodes": {"enum": ["asset_upload", "language_detect", "unknown"], "title": "PublicApiUserUploadedAssetErrorCodes", "type": "string"}, "PublicApiUserUploadedAssetStatus": {"enum": ["awaiting_upload", "processing", "error", "ready"], "title": "PublicApiUserUploadedAssetStatus", "type": "string"}, "GetPublicApiUserUploadedAssetResponse": {"properties": {"id": {"title": "Id", "type": "string"}, "title": {"description": "The title of the user uploaded asset.", "title": "Title", "type": "string"}, "contentType": {"$ref": "#/components/schemas/AssetContentType", "description": "The content type of the user uploaded asset."}, "status": {"$ref": "#/components/schemas/PublicApiUserUploadedAssetStatus", "description": "The status of the user uploaded asset."}, "metadata": {"$ref": "#/components/schemas/GetPublicApiMediaAssetMetadataResponse", "description": "A JSON with the metadata of the user uploaded asset."}, "errorCode": {"default": null, "description": "The code associated with the status. For example if error the reason behind it", "example": "asset_upload", "allOf": [{"$ref": "#/components/schemas/PublicApiUserUploadedAssetErrorCodes"}], "nullable": true}}, "required": ["id", "title", "contentType", "status", "metadata"], "title": "GetPublicApiUserUploadedAssetResponse", "type": "object"}, "GetDubbingProjectVideosResponseUploading": {"description": "Response when dubbing project is still uploading from sourceVideoUrl.", "properties": {"id": {"format": "uuid", "title": "Id", "type": "string"}, "status": {"default": "uploading", "description": "The status of the dubbed video.", "title": "Status", "type": "string", "enum": ["uploading"]}}, "required": ["id"], "title": "GetDubbingProjectVideosResponseUploading", "type": "object"}, "GetDubbingProjectVideosResponseInProgress": {"description": "Response when dubbing project is in progress.", "properties": {"id": {"format": "uuid", "title": "Id", "type": "string"}, "status": {"default": "in_progress", "description": "The status of the dubbed video.", "title": "Status", "type": "string", "enum": ["in_progress"]}, "dubbedAssets": {"description": "The dubbed videos in the project.", "items": {"anyOf": [{"$ref": "#/components/schemas/_DubbedAssetInProgress"}, {"$ref": "#/components/schemas/_DubbedAssetComplete"}, {"$ref": "#/components/schemas/_DubbedAssetError"}]}, "title": "Dubbedassets", "type": "array"}}, "required": ["id"], "title": "GetDubbingProjectVideosResponseInProgress", "type": "object"}, "GetDubbingProjectVideosResponseComplete": {"description": "Response when dubbing project is complete.", "properties": {"id": {"format": "uuid", "title": "Id", "type": "string"}, "status": {"default": "complete", "description": "The status of the dubbed video.", "title": "Status", "type": "string", "enum": ["complete"]}, "dubbedAssets": {"description": "The dubbed videos in the project.", "items": {"anyOf": [{"$ref": "#/components/schemas/_DubbedAssetInProgress"}, {"$ref": "#/components/schemas/_DubbedAssetComplete"}, {"$ref": "#/components/schemas/_DubbedAssetError"}]}, "title": "Dubbedassets", "type": "array"}}, "required": ["id"], "title": "GetDubbingProjectVideosResponseComplete", "type": "object"}, "GetDubbingProjectVideosResponseError": {"description": "Response when dubbing project encountered an error.", "properties": {"id": {"format": "uuid", "title": "Id", "type": "string"}, "status": {"default": "error", "description": "The status of the dubbed video.", "title": "Status", "type": "string", "enum": ["error"]}, "errorCode": {"$ref": "#/components/schemas/PublicApiImportedAndDubbedVideosErrorCode", "description": "Some context in case of dubbed video error."}}, "required": ["id", "errorCode"], "title": "GetDubbingProjectVideosResponseError", "type": "object"}, "Actor": {"description": "Actor (who performed the action) information.", "properties": {"type": {"$ref": "#/components/schemas/ActorType"}, "id": {"title": "Id", "type": "string"}, "name": {"default": null, "title": "Name", "type": "string", "nullable": true}, "email": {"default": null, "title": "Email", "type": "string", "nullable": true}}, "required": ["type", "id"], "title": "Actor", "type": "object"}, "ActorType": {"description": "Types of actors that can perform actions.\n\nUSER: A human user (authenticated via username/password, social login, or SAML SSO)\nSYSTEM: An automated system process (e.g., \"billing_system\", \"moderation_system\")\nSERVICE: An internal service (e.g., \"rendering_service\", \"dubbing_service\")", "enum": ["user", "system", "service"], "title": "ActorType", "type": "string"}, "AuditLogEvent": {"description": "Single audit log event.\n\nRepresents one audit event with full details including actor, target,\ncontext, and domain-specific details.\n\nExample response:\n{\n    \"id\": \"256eb609-72cb-4d42-a7a3-59a65d4e6726\",\n    \"action\": \"user.authentication.login\",\n    \"status\": \"success\",\n    \"actor\": {\n        \"type\": \"user\",\n        \"id\": \"93d3f26c-8bb1-4759-b0c7-eef01cb0321b\",\n        \"name\": \"local user\",\n        \"email\": \"dev_user@synthesia.io\"\n    },\n    \"target\": {\n        \"type\": \"user\",\n        \"id\": \"93d3f26c-8bb1-4759-b0c7-eef01cb0321b\",\n        \"name\": \"local user\"\n    },\n    \"context\": {\n        \"workspaceId\": \"b93d1427-06d8-412a-b158-6280e68b54d5\",\n        \"organizationId\": null,\n        \"ipAddress\": null\n    },\n    \"details\": {\n        \"authMethod\": \"username_password\",\n        \"isImpersonation\": false,\n        \"emailVerified\": true,\n        \"emailDomain\": \"synthesia.io\",\n        \"company\": \"Synthesia\"\n    },\n    \"metadata\": {\n        \"createdAt\": \"2025-10-05T06:58:28.321Z\",\n        \"processedAt\": \"2025-10-05T06:58:28.322Z\"\n    }\n}", "properties": {"id": {"title": "Id", "type": "string"}, "action": {"title": "Action", "type": "string"}, "status": {"title": "Status", "type": "string"}, "actor": {"$ref": "#/components/schemas/Actor"}, "target": {"$ref": "#/components/schemas/Target"}, "context": {"$ref": "#/components/schemas/Context"}, "details": {"title": "Details", "type": "object"}, "metadata": {"$ref": "#/components/schemas/Metadata"}}, "required": ["id", "action", "status", "actor", "target", "context", "details", "metadata"], "title": "AuditLogEvent", "type": "object"}, "Context": {"description": "Event context (workspace, organization, IP address).", "properties": {"workspaceId": {"default": null, "title": "Workspaceid", "type": "string", "nullable": true}, "organizationId": {"default": null, "title": "Organizationid", "type": "string", "nullable": true}, "ipAddress": {"default": null, "title": "Ipaddress", "type": "string", "nullable": true}}, "title": "Context", "type": "object"}, "Metadata": {"description": "Event metadata (timestamps).", "properties": {"createdAt": {"format": "date-time", "title": "Createdat", "type": "string"}, "processedAt": {"default": null, "title": "Processedat", "format": "date-time", "type": "string", "nullable": true}}, "required": ["createdAt"], "title": "Metadata", "type": "object"}, "Target": {"description": "Target (what was acted upon) information.", "properties": {"type": {"$ref": "#/components/schemas/TargetType"}, "id": {"title": "Id", "type": "string"}, "name": {"default": null, "title": "Name", "type": "string", "nullable": true}}, "required": ["type", "id"], "title": "Target", "type": "object"}, "TargetType": {"description": "Types of entities that can be acted upon.\n\nWORKSPACE: A workspace entity\nVIDEO: A video entity\nUSER: A user entity (can be same as Actor in self-service actions like login/profile updates)\nORGANIZATION: An organization entity\nASSET: An asset entity (avatars, images, etc.)\nLEARNER_GROUP: An LMS learner group (cohort) entity", "enum": ["workspace", "video", "user", "organization", "asset", "learner_group"], "title": "TargetType", "type": "string"}, "AuditLogsPageResponse": {"description": "Paginated response for audit logs listing.\n\nUsed for both INTERNAL and PUBLIC APIs\n\nINTERNAL API: POST /auditLogs/events\nPUBLIC API: POST /v2/auditLogs/events", "properties": {"events": {"description": "List of audit log events", "items": {"$ref": "#/components/schemas/AuditLogEvent"}, "title": "Events", "type": "array"}, "nextCursor": {"default": null, "description": "Opaque cursor for fetching the next page. Pass as cursor parameter.", "title": "Nextcursor", "type": "string", "nullable": true}, "hasMore": {"description": "Whether there are more events to fetch", "title": "Hasmore", "type": "boolean"}}, "required": ["events", "hasMore"], "title": "AuditLogsPageResponse", "type": "object"}, "UpsertVideoTranslationsRunningWorkflowApiItem": {"properties": {"language": {"title": "Language", "type": "string"}, "status": {"default": "in_progress", "title": "Status", "type": "string", "enum": ["in_progress"]}, "step": {"enum": ["translation", "generation"], "title": "Step", "type": "string"}, "startedByRequest": {"default": true, "description": "Whether the translation was started by the request.", "title": "Startedbyrequest", "type": "boolean"}}, "required": ["language", "step"], "title": "UpsertVideoTranslationsRunningWorkflowApiItem", "type": "object"}, "UpsertVideoTranslationsSuccessApiResponse": {"properties": {"id": {"description": "The ID of the studio video to translate.", "format": "uuid", "title": "Id", "type": "string"}, "translations": {"description": "List of translations that were created or updated.", "example": [{"language": "fr", "status": "in_progress", "step": "translation"}], "items": {"$ref": "#/components/schemas/UpsertVideoTranslationsRunningWorkflowApiItem"}, "title": "Translations", "type": "array"}}, "required": ["id", "translations"], "title": "UpsertVideoTranslationsSuccessApiResponse", "type": "object"}, "TranslationStatusApiItemError": {"properties": {"language": {"title": "Language", "type": "string"}, "status": {"default": "error", "title": "Status", "type": "string", "enum": ["error"]}, "errorCode": {"enum": ["translation_failed", "generation_failed", "asset_not_found"], "title": "Errorcode", "type": "string"}}, "required": ["language", "errorCode"], "title": "TranslationStatusApiItemError", "type": "object"}, "TranslationStatusApiItemSuccess": {"properties": {"language": {"title": "Language", "type": "string"}, "status": {"enum": ["in_progress", "complete"], "title": "Status", "type": "string"}, "step": {"enum": ["translation", "generation"], "title": "Step", "type": "string"}}, "required": ["language", "status", "step"], "title": "TranslationStatusApiItemSuccess", "type": "object"}, "GetVideoTranslationsApiResponse": {"properties": {"id": {"format": "uuid", "title": "Id", "type": "string"}, "translations": {"items": {"discriminator": {"mapping": {"complete": "#/components/schemas/TranslationStatusApiItemSuccess", "error": "#/components/schemas/TranslationStatusApiItemError", "in_progress": "#/components/schemas/TranslationStatusApiItemSuccess"}, "propertyName": "status"}, "oneOf": [{"$ref": "#/components/schemas/TranslationStatusApiItemSuccess"}, {"$ref": "#/components/schemas/TranslationStatusApiItemError"}]}, "title": "Translations", "type": "array"}}, "required": ["id", "translations"], "title": "GetVideoTranslationsApiResponse", "type": "object"}, "CtaSettings": {"type": "object", "properties": {"label": {"type": "string", "description": "Label for a call-to-action button.", "example": ["Learn More", "Sign up"]}, "url": {"type": "string", "pattern": "^(?:(?:(?:https?|ftp):)?//)?(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z0-9\\u00a1-\\uffff][a-z0-9\\u00a1-\\uffff_-]{0,62})?[a-z0-9\\u00a1-\\uffff]\\.)+(?:[a-z\\u00a1-\\uffff]{2,}\\.?))(?::\\d{2,5})?(?:[/?#]\\S*)?$", "description": "URL to navigate to, when the call-to-action button is clicked.", "example": ["https://example.com", "https://signup.example.com"]}}, "required": ["label", "url"]}, "TemplateResponse": {"type": "object", "properties": {"folderId": {"type": "string", "format": "uuid", "default": null, "nullable": true, "description": "Optional folder ID. If provided, the new video will be created under this folder and inherit its permissions."}, "callbackId": {"type": "string", "description": "A callback ID that you may attach to the Video object. This is useful in the scenario where you need to store additional metadata on the video."}, "ctaSettings": {"$ref": "#/components/schemas/CtaSettings"}, "description": {"type": "string", "description": "Description of the video (used on the video's share page). Defaults to the template description."}, "templateId": {"type": "string", "format": "uuid", "description": "Unique identifier of the template from which to create this video. This may be retrieved from the templates page in STUDIO."}, "templateData": {"type": "object"}, "test": {"type": "boolean", "default": false, "description": "Describes if the video is a test video. Test videos do not count towards your quota but are rendered with a watermark."}, "title": {"type": "string", "description": "Title of the video (used on the video's share page). Defaults to the template title."}, "visibility": {"type": "string", "default": "private", "enum": ["private", "public"], "description": "Describes the private 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."}, "brandKitId": {"type": "string", "nullable": true, "description": "Brand kit ID for the video. Defaults to 'workspace_default' if not set. Use 'no_brand_kit' for no branding, or a UUID for a custom brand kit."}, "userId": {"type": "string"}, "createdAt": {"type": "integer"}, "download": {"type": "string"}, "duration": {"type": "string"}, "id": {"type": "string", "format": "uuid"}, "lastUpdatedAt": {"type": "integer"}, "variables": {"type": "array", "items": {"type": "object"}}}, "required": ["templateData", "templateId", "userId"]}, "TemplateListResponse": {"type": "object", "properties": {"templates": {"type": "array", "items": {"$ref": "#/components/schemas/TemplateResponse"}}, "nextOffset": {"type": "integer"}}}, "Error": {"type": "object", "properties": {"error": {"type": "string"}, "context": {"type": "string"}}, "required": ["error"]}, "VideoAssetCaptionTypesResponse": {"type": "object", "properties": {"srt": {"type": "string", "default": null, "nullable": true}, "vtt": {"type": "string", "default": null, "nullable": true}}}, "ActorSettings": {"type": "object", "properties": {"backgroundColor": {"pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$", "description": "HEX color code (e.g. #F2F7FF) for the background of circular style avatar."}, "horizontalAlign": {"type": "string", "default": null, "enum": ["left", "center", "right", null], "nullable": true, "description": "At the moment `verticalAlign` field is not exposed via API and is fixed to `bottom`, however together with `horizontalAlign` they define a reference point from where we scale the rectangular style avatar. For example, `horizontal alignment: left`, would mean that avatar is called from the bottom-left corner towards the top-right corner."}, "scale": {"type": "number", "default": null, "nullable": true, "description": "The scale of the avatar."}, "style": {"type": "string", "enum": ["circular", "rectangular", "voiceOnly"], "description": "`rectangular` style corresponds to the \"Full body\" avatar style in STUDIO. `circular style corresponds to the \"Circle\" avatar style in STUDIO. The position of circular avatar is fixed to the center of the video both vertically and horizontally, and can't be changed. With scale 1.0, circular avatar will cover total height of the video. Use circular style, if you need to make a round cutout of the avatar to integrate into e.g. screen recording app"}, "voice": {"type": "string", "format": "uuid", "default": null, "nullable": true, "description": "If a voice is not provided, defaults to our recommended voice for the selected avatar. See the complete list of voices."}, "seamless": {"type": "boolean", "default": false, "description": "When the seamless option is enabled, a video of the avatar will be generated in a way that first and last frames match, so videos can be concatenated seamlessly. Use seamless option, if you need to play videos back to back seamlessly e.g. in a video chatbot app. Limitations: - Only work with anna_costume1_cameraA and mia_costume1_cameraA actors. - Only work with static (image) backgrounds. - Videos will have noticeably lower quality. Though, this might not matter, depending on your use case."}}, "required": ["style"]}, "InputBackgroundPosition": {"type": "object", "properties": {"x": {"type": "integer"}, "y": {"type": "integer"}}, "required": ["x", "y"]}, "InputBackgroundTrim": {"type": "object", "properties": {"startTime": {"type": "number"}, "endTime": {"type": "number"}}, "required": ["endTime", "startTime"]}, "InputVideoBackgroundSettings": {"type": "object", "properties": {"trim": {"default": null, "nullable": true, "allOf": [{"$ref": "#/components/schemas/InputBackgroundTrim"}]}, "shortBackgroundContentMatchMode": {"type": "string", "default": "freeze", "enum": ["freeze", "loop", "slow_down", "slow_down_mci"], "description": "Possible values: - `freeze` freezes the last frame of the background until the content is finished - `loop` loops the background until the content is finished - `slow_down` slows down the background so that its duration matches the content duration"}, "longBackgroundContentMatchMode": {"type": "string", "default": "trim", "enum": ["extend_content", "trim", "speed_up"], "description": "Possible values - `trim` trims the background to the duration of the content - `speed_up` speeds up the background so that its duration matches the content duration"}, "volume": {"type": "number", "default": null, "nullable": true, "minimum": 0.0, "maximum": 1.0}}}, "InputBackgroundSettings": {"type": "object", "properties": {"position": {"default": null, "nullable": true, "allOf": [{"$ref": "#/components/schemas/InputBackgroundPosition"}]}, "scale": {"type": "number", "default": 1.0}, "videoSettings": {"default": null, "nullable": true, "allOf": [{"$ref": "#/components/schemas/InputVideoBackgroundSettings"}]}}}, "InputSoundSettings": {"type": "object", "properties": {"soundtrackVolume": {"type": "number", "default": null, "nullable": true}}}, "Input": {"type": "object", "properties": {"avatar": {"type": "string", "description": "Use one of [Synthesia stock avatars or your custom avatar](https://docs.synthesia.io/reference/avatars)."}, "avatarSettings": {"default": {"horizontalAlign": "center", "scale": 1.0, "style": "rectangular", "voice": null, "seamless": false}, "description": "Avatar settings.", "allOf": [{"$ref": "#/components/schemas/ActorSettings"}]}, "background": {"type": "string", "description": "Use Synthesia' stock backgrounds or your custom background. For the custom background, provide the ID of an uploaded asset (see [Create an asset](https://docs.synthesia.io/reference/create-an-asset)), or URL from where Synthesia should download the background.\n\nTransparent: green_screen Green screen background can be used if you want to replace background using FFMPEG or any of the video editing software.\n\nSolid: `off_white` / `warm_white` / `light_pink` / `soft_pink` / `light_blue` / `dark_blue` / `soft_cyan` / `strong_cyan` / `light_orange` / `soft_orange`\n\nImage: `white_studio` / `white_cafe` / `luxury_lobby` / `large_window` / `white_meeting_room` / `open_office`"}, "backgroundSettings": {"description": "Video Settings object", "allOf": [{"$ref": "#/components/schemas/InputBackgroundSettings"}]}, "scriptAudio": {"type": "string", "description": "As an alternative to `scriptText`, provide the ID of uploaded script audio. See [Upload script audio for details](https://docs.synthesia.io/reference/upload-script-audio).\n\nIf you use `scriptAudio` you must provide `scriptLanguage`."}, "scriptLanguage": {"description": "Language code of the language the script audio was generated in. The scriptLanguage option must be used with `scriptAudio`.\n\nTo control the language/voice of the scriptText, use `input[].avatarSettings.voice` option.\n\nLanguage code should be in the format: `en-US`, where the first two characters represent language and the second two-character represent the country.", "type": "string", "enum": ["MISSING", "af", "af-001", "sq-AL", "sq-001", "am", "am-001", "ar-DZ", "ar-BH", "ar-EG", "ar-IQ", "ar-JO", "ar-KW", "ar-LY", "ar-MA", "ar-QA", "ar-SA", "ar-SY", "ar-TN", "ar-AE", "ar-YE", "ar-001", "as-IN", "as-001", "hy-AM", "hy-001", "az-AZ", "az-001", "eu-ES", "eu-001", "bs-BA", "bs-001", "bg", "bg-001", "bn-BD", "bn-IN", "bn-001", "my", "my-001", "yue-CN", "ca", "ca-001", "zh-CN", "zh-HK", "zh-TW", "zh-001", "hr", "hr-001", "cs", "cs-001", "da", "da-001", "nl-NL", "nl-001", "nl-BE", "ka-GE", "ka-001", "en-AU", "en-CA", "en-GB", "en-HK", "en-IE", "en-IN", "en-KE", "en-MX", "en-NG", "en-NZ", "en-PH", "en-US", "en-SG", "en-ZA", "en-TZ", "en-001", "et", "et-001", "fil", "fil-001", "fi", "fi-001", "fr-BE", "fr-CA", "fr-CH", "fr-FR", "fr-001", "gl", "gl-001", "de-AT", "de-DE", "de-CH", "de-001", "el", "el-001", "gu", "gu-001", "iw", "iw-001", "hi", "hi-001", "ht-HT", "hu", "hu-001", "is", "is-001", "id", "id-001", "ga", "ga-001", "it", "it-001", "ja", "ja-001", "jv", "jv-001", "kn", "kn-001", "kk-KZ", "kk-001", "km", "km-001", "ko", "ko-001", "lt", "lt-001", "lv", "lv-001", "lo-LA", "lo-001", "mi-NZ", "mk-MK", "mk-001", "ms", "ms-001", "ml", "ml-001", "mt", "mt-001", "mr", "mr-001", "mn-MN", "mn-001", "ne-NP", "ne-001", "nb", "nb-001", "or-IN", "or-001", "ps-AF", "ps-001", "fa", "fa-001", "pl", "pl-001", "pt-BR", "pt-PT", "pt-001", "pa-IN", "pa-001", "ro", "ro-001", "ru", "ru-001", "sr", "sr-001", "si-LK", "si-001", "sk", "sk-001", "sl", "sl-001", "so", "so-001", "es-AR", "es-BO", "es-CL", "es-CO", "es-CR", "es-CU", "es-DO", "es-EC", "es-SV", "es-GQ", "es-GT", "es-HN", "es-LA", "es-MX", "es-NI", "es-PA", "es-PY", "es-PE", "es-PR", "es-ES", "es-US", "es-UY", "es-VE", "es-001", "su", "su-001", "sv", "sv-001", "sw-KE", "sw-TZ", "sw-001", "vi", "vi-001", "ta-IN", "ta-SG", "ta-LK", "ta-001", "te", "te-001", "tr", "tr-001", "th", "th-001", "uk", "uk-001", "ur-IN", "ur-PK", "ur-001", "uz", "uz-001", "cy", "cy-001", "wuu-CN", "zu", "zu-001"]}, "scriptText": {"type": "string", "description": "Script for text-to-voice can be entered in any of the [supported languages](https://docs.synthesia.io/reference/voices)."}, "soundSettings": {"$ref": "#/components/schemas/InputSoundSettings"}, "transition": {"type": "string", "default": null, "enum": ["none", "fade", "fadeblack", "fadewhite", "fadescale", "wipeleft", "wiperight", "wipeup", "wipedown", "slideleft", "slideright", "slideup", "slidedown", "slideoverleft", "slideoverright", "slideoverup", "slideoverdown", "jumpcut", null], "nullable": true}}, "required": ["avatar", "background"]}, "ParentSoundtrackRegion": {"type": "object", "properties": {"soundtrack": {"type": "string"}, "slideRange": {"type": "string"}, "fadeInSeconds": {"type": "number", "default": 0.0}, "fadeOutSeconds": {"type": "number", "default": 0.0}}, "required": ["slideRange", "soundtrack"]}, "ParentSoundSettings": {"type": "object", "properties": {"defaultSoundtrackVolume": {"type": "number", "default": 0.18}, "soundtracks": {"type": "array", "default": [], "items": {"$ref": "#/components/schemas/ParentSoundtrackRegion"}}}}, "VideoThumbnailTypesResponse": {"type": "object", "properties": {"image": {"type": "string", "default": null, "nullable": true}, "gif": {"type": "string", "default": null, "nullable": true}}}, "VideoResponse": {"type": "object", "properties": {"captions": {"default": null, "nullable": true, "description": "Downloadable captions files.", "allOf": [{"$ref": "#/components/schemas/VideoAssetCaptionTypesResponse"}]}, "folderId": {"type": "string", "format": "uuid", "default": null, "nullable": true, "description": "Optional folder ID. If provided, the new video will be created under this folder and inherit its permissions."}, "aspectRatio": {"default": "16:9", "description": "Aspect ratio of the video. Default is `landscape (16:9)`.", "type": "string", "enum": ["16:9", "9:16", "1:1", "4:5", "5:4"]}, "ctaSettings": {"description": "Settings for a call-to-action button.", "allOf": [{"$ref": "#/components/schemas/CtaSettings"}]}, "callbackId": {"type": "string", "description": "Use callback ID to link videos back to the initial request. For example, if you are making a personalized video for a customer, you could enter the customer's email as a callback ID. This way, you can tell who the video is for, once its generated.."}, "description": {"type": "string", "default": "", "description": "Description of the video to be shown on the share page."}, "input": {"type": "array", "description": "An array of objects that each describe a clip of a multi-clip video. You can think of the clips as different scenes in the video.", "items": {"$ref": "#/components/schemas/Input"}}, "soundtrack": {"type": "string", "enum": ["corporate", "inspirational", "modern", "urban"], "description": "soundtrack option is supported for backward compatibility. You should use the templates functionality for rich videos."}, "soundSettings": {"description": "", "allOf": [{"$ref": "#/components/schemas/ParentSoundSettings"}]}, "test": {"type": "boolean", "default": false, "description": "Test videos are free and not counted towards your quota. If you create a video in the \u201ctest\u201d mode, we will overlay a watermark over your video."}, "title": {"type": "string", "default": "", "description": "Title of the video to be shown on the share page."}, "visibility": {"type": "string", "default": "private", "enum": ["private", "public"], "description": "Public videos will be visible to anyone with a share URL.\n\nPrivate videos can only be downloaded via a time-limited download link. See Retrieve a video for details.\n\nVisibility can be changed also once the video is created via Update a video."}, "createdAt": {"type": "integer"}, "download": {"type": "string"}, "duration": {"type": "string"}, "id": {"type": "string", "format": "uuid"}, "lastUpdatedAt": {"type": "integer"}, "status": {"type": "string", "enum": ["complete", "deleted", "error", "in_progress", "rejected", "approved"]}, "thumbnail": {"default": null, "nullable": true, "allOf": [{"$ref": "#/components/schemas/VideoThumbnailTypesResponse"}]}}, "required": ["input"]}, "CreateTranslatedVideoFromXliffRequest": {"type": "object", "properties": {"videoId": {"type": "string", "format": "uuid"}, "xliffContent": {"type": "string"}, "callbackId": {"type": "string", "default": null, "nullable": true}}, "required": ["videoId", "xliffContent"]}, "CreateTranslatedVideoFromXliffResponse": {"type": "object", "properties": {"videoId": {"type": "string"}}, "required": ["videoId"]}, "VideoFromTemplateApi": {"type": "object", "properties": {"folderId": {"type": "string", "format": "uuid", "default": null, "nullable": true, "description": "Optional folder ID. If provided, the new video will be created under this folder and inherit its permissions."}, "callbackId": {"type": "string", "description": "A callback ID that you may attach to the Video object. This is useful in the scenario where you need to store additional metadata on the video."}, "ctaSettings": {"$ref": "#/components/schemas/CtaSettings"}, "description": {"type": "string", "description": "Description of the video (used on the video's share page). Defaults to the template description."}, "templateId": {"type": "string", "format": "uuid", "description": "Unique identifier of the template from which to create this video. This may be retrieved from the templates page in STUDIO."}, "templateData": {"type": "object"}, "test": {"type": "boolean", "default": false, "description": "Describes if the video is a test video. Test videos do not count towards your quota but are rendered with a watermark."}, "title": {"type": "string", "description": "Title of the video (used on the video's share page). Defaults to the template title."}, "visibility": {"type": "string", "default": "private", "enum": ["private", "public"], "description": "Describes the private 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."}, "brandKitId": {"type": "string", "nullable": true, "description": "Brand kit ID for the video. Defaults to 'workspace_default' if not set. Use 'no_brand_kit' for no branding, or a UUID for a custom brand kit."}}, "required": ["templateData", "templateId"]}, "VideoListResponse": {"type": "object", "properties": {"videos": {"type": "array", "items": {"$ref": "#/components/schemas/VideoResponse"}}, "nextOffset": {"type": "integer"}}}, "CreateVideoRequest": {"type": "object", "properties": {"folderId": {"type": "string", "format": "uuid", "default": null, "nullable": true, "description": "Optional folder ID. If provided, the new video will be created under this folder and inherit its permissions."}, "aspectRatio": {"default": "16:9", "description": "Aspect ratio of the video. Default is `landscape (16:9)`.", "type": "string", "enum": ["16:9", "9:16", "1:1", "4:5", "5:4"]}, "ctaSettings": {"description": "Settings for a call-to-action button.", "allOf": [{"$ref": "#/components/schemas/CtaSettings"}]}, "callbackId": {"type": "string", "description": "Use callback ID to link videos back to the initial request. For example, if you are making a personalized video for a customer, you could enter the customer's email as a callback ID. This way, you can tell who the video is for, once its generated.."}, "description": {"type": "string", "default": "", "description": "Description of the video to be shown on the share page."}, "input": {"type": "array", "description": "An array of objects that each describe a clip of a multi-clip video. You can think of the clips as different scenes in the video.", "items": {"$ref": "#/components/schemas/Input"}}, "soundtrack": {"type": "string", "enum": ["corporate", "inspirational", "modern", "urban"], "description": "soundtrack option is supported for backward compatibility. You should use the templates functionality for rich videos."}, "soundSettings": {"description": "", "allOf": [{"$ref": "#/components/schemas/ParentSoundSettings"}]}, "test": {"type": "boolean", "default": false, "description": "Test videos are free and not counted towards your quota. If you create a video in the \u201ctest\u201d mode, we will overlay a watermark over your video."}, "title": {"type": "string", "default": "", "description": "Title of the video to be shown on the share page."}, "visibility": {"type": "string", "default": "private", "enum": ["private", "public"], "description": "Public videos will be visible to anyone with a share URL.\n\nPrivate videos can only be downloaded via a time-limited download link. See Retrieve a video for details.\n\nVisibility can be changed also once the video is created via Update a video."}}, "required": ["input"]}, "UpdateVideoMetadataRequest": {"type": "object", "properties": {"ctaSettings": {"nullable": true, "allOf": [{"$ref": "#/components/schemas/CtaSettings"}]}, "description": {"type": "string"}, "title": {"type": "string"}, "visibility": {"type": "string", "enum": ["private", "public"]}}}, "VideoXliffResponse": {"type": "object", "properties": {"xliff": {"type": "string"}}, "required": ["xliff"]}, "WebhookResponse": {"type": "object", "properties": {"createdAt": {}, "id": {"type": "string"}, "secret": {"type": "string"}, "status": {"readOnly": true}, "lastUpdatedAt": {}, "url": {"type": "string", "format": "url"}}}, "WebhookListResponse": {"type": "object", "properties": {"webhooks": {"type": "array", "items": {"$ref": "#/components/schemas/WebhookResponse"}}, "nextOffset": {"type": "integer"}}}, "CreateWebhookRequest": {"type": "object", "properties": {"events": {"type": "array", "description": "[The webhook events](https://docs.synthesia.io/reference/webhook-events) for which notifications should be sent.", "items": {"type": "string", "enum": ["video.completed", "video.failed"]}}, "url": {"type": "string", "format": "url", "pattern": "^(?:(?:(?:https?|ftp):)?//)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z0-9\\u00a1-\\uffff][a-z0-9\\u00a1-\\uffff_-]{0,62})?[a-z0-9\\u00a1-\\uffff]\\.)+(?:[a-z\\u00a1-\\uffff]{2,}\\.?))(?::\\d{2,5})?(?:[/?#]\\S*)?$", "description": "The URL to send notifications to"}}, "required": ["events", "url"]}}, "securitySchemes": {"api_key": {"type": "apiKey", "in": "header", "name": "Authorization"}}}}