diff --git a/gen/lipsync.go b/gen/lipsync.go index eee28f5..ad8a775 100644 --- a/gen/lipsync.go +++ b/gen/lipsync.go @@ -9,7 +9,7 @@ var LipsyncBatchesCreate = &command.Spec{ Name: "batches create", Summary: "Create Lipsync Batch", Description: "Submit up to 100 lipsync payloads as a single batch. Each payload becomes one batch item, created and processed independently so one bad source does not fail the rest. Returns 202 with a batch_id; poll GET /v3/lipsyncs/batches/{batch_id} for progress. Pass an Idempotency-Key header to make retries safe — the same key returns the same batch.", - RequestSchema: "{\n \"properties\": {\n \"callback_url\": {\n \"description\": \"Webhook URL invoked once when every item in the batch reaches a terminal state.\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"lipsyncs\": {\n \"description\": \"Lipsync payloads, identical in shape to POST /v3/lipsyncs. Each entry becomes exactly one batch item (no expansion); the item count is capped at 100.\",\n \"items\": {\n \"description\": \"Request body for POST /v3/lipsyncs.\",\n \"properties\": {\n \"audio\": {\n \"description\": \"Replacement audio — provide as {type: 'url', url: '...'} or {type: 'asset_id', asset_id: '...'}\",\n \"discriminator\": {\n \"mapping\": {\n \"asset_id\": \"#/components/schemas/AssetId\",\n \"url\": \"#/components/schemas/AssetUrl\"\n },\n \"propertyName\": \"type\"\n },\n \"oneOf\": [\n {\n \"description\": \"Asset input via publicly accessible HTTPS URL.\",\n \"properties\": {\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n },\n \"url\": {\n \"description\": \"Publicly accessible HTTPS URL for the asset\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"url\"\n ],\n \"type\": \"object\"\n },\n {\n \"description\": \"Asset input via HeyGen asset ID from the asset upload endpoint.\",\n \"properties\": {\n \"asset_id\": {\n \"description\": \"HeyGen asset ID from the asset upload endpoint\",\n \"type\": \"string\"\n },\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"asset_id\"\n ],\n \"type\": \"object\"\n }\n ]\n },\n \"callback_id\": {\n \"description\": \"ID included in webhook payload\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"callback_url\": {\n \"description\": \"Webhook URL for completion notifications\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"disable_music_track\": {\n \"default\": false,\n \"description\": \"Remove background music\",\n \"type\": \"boolean\"\n },\n \"enable_caption\": {\n \"default\": false,\n \"description\": \"Deprecated and ignored: captions are always generated; whether to display them is a download-side choice.\",\n \"type\": \"boolean\"\n },\n \"enable_dynamic_duration\": {\n \"default\": true,\n \"description\": \"Allow dynamic duration adjustment\",\n \"type\": \"boolean\"\n },\n \"enable_speech_enhancement\": {\n \"default\": false,\n \"description\": \"Enhance speech quality\",\n \"type\": \"boolean\"\n },\n \"enable_watermark\": {\n \"default\": false,\n \"description\": \"Add watermark to output\",\n \"type\": \"boolean\"\n },\n \"end_time\": {\n \"description\": \"End time in seconds for partial lipsync\",\n \"nullable\": true,\n \"type\": \"number\"\n },\n \"folder_id\": {\n \"description\": \"Project/folder ID to organize lipsync into\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"fps_mode\": {\n \"description\": \"Frame rate mode: 'vfr', 'cfr', or 'passthrough'.\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"keep_the_same_format\": {\n \"description\": \"Preserve the source video's encoding specs (resolution, bitrate).\",\n \"nullable\": true,\n \"type\": \"boolean\"\n },\n \"mode\": {\n \"default\": \"speed\",\n \"description\": \"Quality mode: 'speed' (faster) or 'precision' (higher quality, uses avatar inference)\",\n \"enum\": [\n \"speed\",\n \"precision\"\n ],\n \"type\": \"string\"\n },\n \"start_time\": {\n \"description\": \"Start time in seconds for partial lipsync\",\n \"nullable\": true,\n \"type\": \"number\"\n },\n \"title\": {\n \"description\": \"Title for the lipsync job\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"video\": {\n \"description\": \"Source video — provide as {type: 'url', url: '...'} or {type: 'asset_id', asset_id: '...'}\",\n \"discriminator\": {\n \"mapping\": {\n \"asset_id\": \"#/components/schemas/AssetId\",\n \"url\": \"#/components/schemas/AssetUrl\"\n },\n \"propertyName\": \"type\"\n },\n \"oneOf\": [\n {\n \"description\": \"Asset input via publicly accessible HTTPS URL.\",\n \"properties\": {\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n },\n \"url\": {\n \"description\": \"Publicly accessible HTTPS URL for the asset\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"url\"\n ],\n \"type\": \"object\"\n },\n {\n \"description\": \"Asset input via HeyGen asset ID from the asset upload endpoint.\",\n \"properties\": {\n \"asset_id\": {\n \"description\": \"HeyGen asset ID from the asset upload endpoint\",\n \"type\": \"string\"\n },\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"asset_id\"\n ],\n \"type\": \"object\"\n }\n ]\n }\n },\n \"required\": [\n \"video\",\n \"audio\"\n ],\n \"type\": \"object\"\n },\n \"type\": \"array\"\n },\n \"title\": {\n \"description\": \"Display name for the batch, shown in the HeyGen app.\",\n \"nullable\": true,\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"lipsyncs\"\n ],\n \"type\": \"object\"\n}", + RequestSchema: "{\n \"properties\": {\n \"callback_url\": {\n \"description\": \"Webhook URL invoked once when every item in the batch reaches a terminal state.\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"lipsyncs\": {\n \"description\": \"Lipsync payloads, identical in shape to POST /v3/lipsyncs. Each entry becomes exactly one batch item (no expansion); the item count is capped at 100.\",\n \"items\": {\n \"description\": \"Request body for POST /v3/lipsyncs.\",\n \"properties\": {\n \"audio\": {\n \"description\": \"Replacement audio — provide as {type: 'url', url: '...'} or {type: 'asset_id', asset_id: '...'}\",\n \"discriminator\": {\n \"mapping\": {\n \"asset_id\": \"#/components/schemas/AssetId\",\n \"url\": \"#/components/schemas/AssetUrl\"\n },\n \"propertyName\": \"type\"\n },\n \"oneOf\": [\n {\n \"description\": \"Asset input via publicly accessible HTTPS URL.\",\n \"properties\": {\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n },\n \"url\": {\n \"description\": \"Publicly accessible HTTPS URL for the asset\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"url\"\n ],\n \"type\": \"object\"\n },\n {\n \"description\": \"Asset input via HeyGen asset ID from the asset upload endpoint.\",\n \"properties\": {\n \"asset_id\": {\n \"description\": \"HeyGen asset ID from the asset upload endpoint\",\n \"type\": \"string\"\n },\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"asset_id\"\n ],\n \"type\": \"object\"\n }\n ]\n },\n \"callback_id\": {\n \"description\": \"ID included in webhook payload\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"callback_url\": {\n \"description\": \"Webhook URL for completion notifications\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"disable_music_track\": {\n \"default\": false,\n \"description\": \"Remove background music\",\n \"type\": \"boolean\"\n },\n \"enable_caption\": {\n \"default\": false,\n \"deprecated\": true,\n \"description\": \"Deprecated and ignored: captions are always generated; whether to display them is a download-side choice.\",\n \"type\": \"boolean\"\n },\n \"enable_dynamic_duration\": {\n \"default\": true,\n \"description\": \"Allow dynamic duration adjustment\",\n \"type\": \"boolean\"\n },\n \"enable_speech_enhancement\": {\n \"default\": false,\n \"description\": \"Enhance speech quality\",\n \"type\": \"boolean\"\n },\n \"enable_watermark\": {\n \"default\": false,\n \"description\": \"Add watermark to output\",\n \"type\": \"boolean\"\n },\n \"end_time\": {\n \"description\": \"End time in seconds for partial lipsync\",\n \"nullable\": true,\n \"type\": \"number\"\n },\n \"folder_id\": {\n \"description\": \"Project/folder ID to organize lipsync into\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"fps_mode\": {\n \"description\": \"Frame rate mode: 'vfr', 'cfr', or 'passthrough'.\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"keep_the_same_format\": {\n \"description\": \"Preserve the source video's encoding specs (resolution, bitrate).\",\n \"nullable\": true,\n \"type\": \"boolean\"\n },\n \"mode\": {\n \"default\": \"speed\",\n \"description\": \"Quality mode: 'speed' (faster) or 'precision' (higher quality, uses avatar inference)\",\n \"enum\": [\n \"speed\",\n \"precision\"\n ],\n \"type\": \"string\"\n },\n \"start_time\": {\n \"description\": \"Start time in seconds for partial lipsync\",\n \"nullable\": true,\n \"type\": \"number\"\n },\n \"title\": {\n \"description\": \"Title for the lipsync job\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"video\": {\n \"description\": \"Source video — provide as {type: 'url', url: '...'} or {type: 'asset_id', asset_id: '...'}\",\n \"discriminator\": {\n \"mapping\": {\n \"asset_id\": \"#/components/schemas/AssetId\",\n \"url\": \"#/components/schemas/AssetUrl\"\n },\n \"propertyName\": \"type\"\n },\n \"oneOf\": [\n {\n \"description\": \"Asset input via publicly accessible HTTPS URL.\",\n \"properties\": {\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n },\n \"url\": {\n \"description\": \"Publicly accessible HTTPS URL for the asset\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"url\"\n ],\n \"type\": \"object\"\n },\n {\n \"description\": \"Asset input via HeyGen asset ID from the asset upload endpoint.\",\n \"properties\": {\n \"asset_id\": {\n \"description\": \"HeyGen asset ID from the asset upload endpoint\",\n \"type\": \"string\"\n },\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"asset_id\"\n ],\n \"type\": \"object\"\n }\n ]\n }\n },\n \"required\": [\n \"video\",\n \"audio\"\n ],\n \"type\": \"object\"\n },\n \"type\": \"array\"\n },\n \"title\": {\n \"description\": \"Display name for the batch, shown in the HeyGen app.\",\n \"nullable\": true,\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"lipsyncs\"\n ],\n \"type\": \"object\"\n}", Endpoint: "/v3/lipsyncs/batches", Method: "POST", BodyEncoding: "json", @@ -94,7 +94,7 @@ var LipsyncCreate = &command.Spec{ Name: "create", Summary: "Create Lipsync", Description: "Replaces the audio on an existing video and re-animates the speaker's lip movements to match the new audio. Use mode: 'speed' for fast output or 'precision' for high-quality lip-sync.", - RequestSchema: "{\n \"description\": \"Request body for POST /v3/lipsyncs.\",\n \"properties\": {\n \"audio\": {\n \"description\": \"Replacement audio — provide as {type: 'url', url: '...'} or {type: 'asset_id', asset_id: '...'}\",\n \"discriminator\": {\n \"mapping\": {\n \"asset_id\": \"#/components/schemas/AssetId\",\n \"url\": \"#/components/schemas/AssetUrl\"\n },\n \"propertyName\": \"type\"\n },\n \"oneOf\": [\n {\n \"description\": \"Asset input via publicly accessible HTTPS URL.\",\n \"properties\": {\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n },\n \"url\": {\n \"description\": \"Publicly accessible HTTPS URL for the asset\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"url\"\n ],\n \"type\": \"object\"\n },\n {\n \"description\": \"Asset input via HeyGen asset ID from the asset upload endpoint.\",\n \"properties\": {\n \"asset_id\": {\n \"description\": \"HeyGen asset ID from the asset upload endpoint\",\n \"type\": \"string\"\n },\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"asset_id\"\n ],\n \"type\": \"object\"\n }\n ]\n },\n \"callback_id\": {\n \"description\": \"ID included in webhook payload\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"callback_url\": {\n \"description\": \"Webhook URL for completion notifications\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"disable_music_track\": {\n \"default\": false,\n \"description\": \"Remove background music\",\n \"type\": \"boolean\"\n },\n \"enable_caption\": {\n \"default\": false,\n \"description\": \"Deprecated and ignored: captions are always generated; whether to display them is a download-side choice.\",\n \"type\": \"boolean\"\n },\n \"enable_dynamic_duration\": {\n \"default\": true,\n \"description\": \"Allow dynamic duration adjustment\",\n \"type\": \"boolean\"\n },\n \"enable_speech_enhancement\": {\n \"default\": false,\n \"description\": \"Enhance speech quality\",\n \"type\": \"boolean\"\n },\n \"enable_watermark\": {\n \"default\": false,\n \"description\": \"Add watermark to output\",\n \"type\": \"boolean\"\n },\n \"end_time\": {\n \"description\": \"End time in seconds for partial lipsync\",\n \"nullable\": true,\n \"type\": \"number\"\n },\n \"folder_id\": {\n \"description\": \"Project/folder ID to organize lipsync into\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"fps_mode\": {\n \"description\": \"Frame rate mode: 'vfr', 'cfr', or 'passthrough'.\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"keep_the_same_format\": {\n \"description\": \"Preserve the source video's encoding specs (resolution, bitrate).\",\n \"nullable\": true,\n \"type\": \"boolean\"\n },\n \"mode\": {\n \"default\": \"speed\",\n \"description\": \"Quality mode: 'speed' (faster) or 'precision' (higher quality, uses avatar inference)\",\n \"enum\": [\n \"speed\",\n \"precision\"\n ],\n \"type\": \"string\"\n },\n \"start_time\": {\n \"description\": \"Start time in seconds for partial lipsync\",\n \"nullable\": true,\n \"type\": \"number\"\n },\n \"title\": {\n \"description\": \"Title for the lipsync job\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"video\": {\n \"description\": \"Source video — provide as {type: 'url', url: '...'} or {type: 'asset_id', asset_id: '...'}\",\n \"discriminator\": {\n \"mapping\": {\n \"asset_id\": \"#/components/schemas/AssetId\",\n \"url\": \"#/components/schemas/AssetUrl\"\n },\n \"propertyName\": \"type\"\n },\n \"oneOf\": [\n {\n \"description\": \"Asset input via publicly accessible HTTPS URL.\",\n \"properties\": {\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n },\n \"url\": {\n \"description\": \"Publicly accessible HTTPS URL for the asset\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"url\"\n ],\n \"type\": \"object\"\n },\n {\n \"description\": \"Asset input via HeyGen asset ID from the asset upload endpoint.\",\n \"properties\": {\n \"asset_id\": {\n \"description\": \"HeyGen asset ID from the asset upload endpoint\",\n \"type\": \"string\"\n },\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"asset_id\"\n ],\n \"type\": \"object\"\n }\n ]\n }\n },\n \"required\": [\n \"video\",\n \"audio\"\n ],\n \"type\": \"object\"\n}", + RequestSchema: "{\n \"description\": \"Request body for POST /v3/lipsyncs.\",\n \"properties\": {\n \"audio\": {\n \"description\": \"Replacement audio — provide as {type: 'url', url: '...'} or {type: 'asset_id', asset_id: '...'}\",\n \"discriminator\": {\n \"mapping\": {\n \"asset_id\": \"#/components/schemas/AssetId\",\n \"url\": \"#/components/schemas/AssetUrl\"\n },\n \"propertyName\": \"type\"\n },\n \"oneOf\": [\n {\n \"description\": \"Asset input via publicly accessible HTTPS URL.\",\n \"properties\": {\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n },\n \"url\": {\n \"description\": \"Publicly accessible HTTPS URL for the asset\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"url\"\n ],\n \"type\": \"object\"\n },\n {\n \"description\": \"Asset input via HeyGen asset ID from the asset upload endpoint.\",\n \"properties\": {\n \"asset_id\": {\n \"description\": \"HeyGen asset ID from the asset upload endpoint\",\n \"type\": \"string\"\n },\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"asset_id\"\n ],\n \"type\": \"object\"\n }\n ]\n },\n \"callback_id\": {\n \"description\": \"ID included in webhook payload\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"callback_url\": {\n \"description\": \"Webhook URL for completion notifications\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"disable_music_track\": {\n \"default\": false,\n \"description\": \"Remove background music\",\n \"type\": \"boolean\"\n },\n \"enable_caption\": {\n \"default\": false,\n \"deprecated\": true,\n \"description\": \"Deprecated and ignored: captions are always generated; whether to display them is a download-side choice.\",\n \"type\": \"boolean\"\n },\n \"enable_dynamic_duration\": {\n \"default\": true,\n \"description\": \"Allow dynamic duration adjustment\",\n \"type\": \"boolean\"\n },\n \"enable_speech_enhancement\": {\n \"default\": false,\n \"description\": \"Enhance speech quality\",\n \"type\": \"boolean\"\n },\n \"enable_watermark\": {\n \"default\": false,\n \"description\": \"Add watermark to output\",\n \"type\": \"boolean\"\n },\n \"end_time\": {\n \"description\": \"End time in seconds for partial lipsync\",\n \"nullable\": true,\n \"type\": \"number\"\n },\n \"folder_id\": {\n \"description\": \"Project/folder ID to organize lipsync into\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"fps_mode\": {\n \"description\": \"Frame rate mode: 'vfr', 'cfr', or 'passthrough'.\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"keep_the_same_format\": {\n \"description\": \"Preserve the source video's encoding specs (resolution, bitrate).\",\n \"nullable\": true,\n \"type\": \"boolean\"\n },\n \"mode\": {\n \"default\": \"speed\",\n \"description\": \"Quality mode: 'speed' (faster) or 'precision' (higher quality, uses avatar inference)\",\n \"enum\": [\n \"speed\",\n \"precision\"\n ],\n \"type\": \"string\"\n },\n \"start_time\": {\n \"description\": \"Start time in seconds for partial lipsync\",\n \"nullable\": true,\n \"type\": \"number\"\n },\n \"title\": {\n \"description\": \"Title for the lipsync job\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"video\": {\n \"description\": \"Source video — provide as {type: 'url', url: '...'} or {type: 'asset_id', asset_id: '...'}\",\n \"discriminator\": {\n \"mapping\": {\n \"asset_id\": \"#/components/schemas/AssetId\",\n \"url\": \"#/components/schemas/AssetUrl\"\n },\n \"propertyName\": \"type\"\n },\n \"oneOf\": [\n {\n \"description\": \"Asset input via publicly accessible HTTPS URL.\",\n \"properties\": {\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n },\n \"url\": {\n \"description\": \"Publicly accessible HTTPS URL for the asset\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"url\"\n ],\n \"type\": \"object\"\n },\n {\n \"description\": \"Asset input via HeyGen asset ID from the asset upload endpoint.\",\n \"properties\": {\n \"asset_id\": {\n \"description\": \"HeyGen asset ID from the asset upload endpoint\",\n \"type\": \"string\"\n },\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"asset_id\"\n ],\n \"type\": \"object\"\n }\n ]\n }\n },\n \"required\": [\n \"video\",\n \"audio\"\n ],\n \"type\": \"object\"\n}", ResponseSchema: "{\n \"properties\": {\n \"data\": {\n \"description\": \"Response for POST /v3/lipsyncs.\",\n \"properties\": {\n \"lipsync_id\": {\n \"description\": \"Lipsync ID — use GET /v3/lipsyncs/{id} to poll status\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"lipsync_id\"\n ],\n \"type\": \"object\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n}", Endpoint: "/v3/lipsyncs", Method: "POST", @@ -140,16 +140,17 @@ var LipsyncCreate = &command.Spec{ JSONName: "disable_music_track", }, { - Name: "enable-caption", - Type: "bool", - Default: "false", - Help: "Deprecated and ignored: captions are always generated; whether to display them is a download-side choice.", - Required: false, - Enum: nil, - Min: nil, - Max: nil, - Source: "body", - JSONName: "enable_caption", + Name: "enable-caption", + Type: "bool", + Default: "false", + Help: "Deprecated and ignored: captions are always generated; whether to display them is a download-side choice.", + Required: false, + Enum: nil, + Min: nil, + Max: nil, + Source: "body", + JSONName: "enable_caption", + Deprecated: true, }, { Name: "enable-dynamic-duration", diff --git a/gen/video-translate.go b/gen/video-translate.go index 4b3b224..b492476 100644 --- a/gen/video-translate.go +++ b/gen/video-translate.go @@ -9,7 +9,7 @@ var VideoTranslateBatchesCreate = &command.Spec{ Name: "batches create", Summary: "Create Video Translation Batch", Description: "Submit up to 100 video-translation payloads (identical in shape to POST /v3/video-translations) as a single batch. A payload targeting multiple output_languages expands to one batch item per language, and each item is created and processed independently so one bad source does not fail the rest. Returns 202 with a batch_id; poll GET /v3/video-translations/batches/{batch_id} for progress. Pass an Idempotency-Key header to make retries safe — the same key returns the same batch.", - RequestSchema: "{\n \"properties\": {\n \"callback_url\": {\n \"description\": \"Webhook URL invoked once when every item in the batch reaches a terminal state.\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"title\": {\n \"description\": \"Display name for the batch, shown in the HeyGen app.\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"video_translations\": {\n \"description\": \"Video-translation payloads, identical in shape to POST /v3/video-translations. A single entry targeting multiple output_languages expands to one batch item per language; the expanded item count is capped at 100.\",\n \"items\": {\n \"description\": \"Request body for POST /v3/video-translations.\",\n \"properties\": {\n \"audio\": {\n \"description\": \"Custom audio for dubbing — provide as {type: 'url', url: '...'} or {type: 'asset_id', asset_id: '...'}\",\n \"discriminator\": {\n \"mapping\": {\n \"asset_id\": \"#/components/schemas/AssetId\",\n \"url\": \"#/components/schemas/AssetUrl\"\n },\n \"propertyName\": \"type\"\n },\n \"nullable\": true,\n \"oneOf\": [\n {\n \"description\": \"Asset input via publicly accessible HTTPS URL.\",\n \"properties\": {\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n },\n \"url\": {\n \"description\": \"Publicly accessible HTTPS URL for the asset\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"url\"\n ],\n \"type\": \"object\"\n },\n {\n \"description\": \"Asset input via HeyGen asset ID from the asset upload endpoint.\",\n \"properties\": {\n \"asset_id\": {\n \"description\": \"HeyGen asset ID from the asset upload endpoint\",\n \"type\": \"string\"\n },\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"asset_id\"\n ],\n \"type\": \"object\"\n }\n ]\n },\n \"brand_glossary_id\": {\n \"description\": \"Brand glossary ID for custom term translations (e.g. translate 'Reformer' as the Pilates equipment, not 'political activist'). Alias for the legacy `brand_voice_id` field. Discover IDs via GET /v3/brand-glossaries.\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"brand_voice_id\": {\n \"deprecated\": true,\n \"description\": \"Brand glossary ID for custom term translations. Legacy field name for `brand_glossary_id` — both are accepted and resolve to the same workspace record. Discover IDs via GET /v3/brand-glossaries.\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"callback_id\": {\n \"description\": \"ID included in webhook payload\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"callback_url\": {\n \"description\": \"Webhook URL for completion notifications\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"disable_music_track\": {\n \"default\": false,\n \"description\": \"Remove background music\",\n \"type\": \"boolean\"\n },\n \"enable_caption\": {\n \"default\": false,\n \"description\": \"Deprecated and ignored: captions are always generated; whether to display them is a download-side choice.\",\n \"type\": \"boolean\"\n },\n \"enable_dynamic_duration\": {\n \"default\": true,\n \"description\": \"Allow dynamic duration adjustment\",\n \"type\": \"boolean\"\n },\n \"enable_speech_enhancement\": {\n \"default\": false,\n \"description\": \"Enhance speech quality\",\n \"type\": \"boolean\"\n },\n \"enable_watermark\": {\n \"default\": false,\n \"description\": \"Add watermark to output\",\n \"type\": \"boolean\"\n },\n \"end_time\": {\n \"description\": \"End time in seconds for partial translation\",\n \"nullable\": true,\n \"type\": \"number\"\n },\n \"folder_id\": {\n \"description\": \"Project/folder ID to organize translation into\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"fps_mode\": {\n \"description\": \"Frame rate mode for the output video. 'vfr' = variable frame rate, 'cfr' = constant frame rate, 'passthrough' = match the source. Only takes effect when a custom 'audio' track is provided.\",\n \"enum\": [\n \"vfr\",\n \"cfr\",\n \"passthrough\"\n ],\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"input_language\": {\n \"description\": \"Source language code (auto-detected if omitted)\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"keep_the_same_format\": {\n \"description\": \"Preserve the source video's encoding specs (resolution, bitrate).\",\n \"nullable\": true,\n \"type\": \"boolean\"\n },\n \"mode\": {\n \"default\": \"speed\",\n \"description\": \"Translation quality mode: 'speed' (faster) or 'precision' (higher quality, uses avatar inference)\",\n \"enum\": [\n \"speed\",\n \"precision\"\n ],\n \"type\": \"string\"\n },\n \"output_languages\": {\n \"description\": \"Target language names (e.g. 'Chinese (Cantonese, Traditional)', 'Spanish (Spain)', 'English'). Use GET /v3/video-translations/languages for valid values. Use one for single translation, multiple for batch.\",\n \"items\": {\n \"type\": \"string\"\n },\n \"type\": \"array\"\n },\n \"speaker_num\": {\n \"description\": \"Number of speakers (improves speaker separation)\",\n \"nullable\": true,\n \"type\": \"integer\"\n },\n \"srt\": {\n \"description\": \"Custom subtitle file — provide as {type: 'url', url: '...'} or {type: 'asset_id', asset_id: '...'}.\",\n \"discriminator\": {\n \"mapping\": {\n \"asset_id\": \"#/components/schemas/AssetId\",\n \"url\": \"#/components/schemas/AssetUrl\"\n },\n \"propertyName\": \"type\"\n },\n \"nullable\": true,\n \"oneOf\": [\n {\n \"description\": \"Asset input via publicly accessible HTTPS URL.\",\n \"properties\": {\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n },\n \"url\": {\n \"description\": \"Publicly accessible HTTPS URL for the asset\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"url\"\n ],\n \"type\": \"object\"\n },\n {\n \"description\": \"Asset input via HeyGen asset ID from the asset upload endpoint.\",\n \"properties\": {\n \"asset_id\": {\n \"description\": \"HeyGen asset ID from the asset upload endpoint\",\n \"type\": \"string\"\n },\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"asset_id\"\n ],\n \"type\": \"object\"\n }\n ]\n },\n \"srt_role\": {\n \"description\": \"Which video the subtitle applies to: 'input' (source) or 'output' (translated).\",\n \"enum\": [\n \"input\",\n \"output\"\n ],\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"start_time\": {\n \"description\": \"Start time in seconds for partial translation\",\n \"nullable\": true,\n \"type\": \"number\"\n },\n \"stock_voice_config\": {\n \"description\": \"Use a preset stock voice for the translation instead of recreating the original speaker's voice. By default, Video Translation clones the original speaker so the result sounds like them; with this enabled, the translation is spoken by a natural preset voice optimized for clear pronunciation and accent in the target language (the result will not sound like the original speaker). Enterprise feature, available for selected accounts and languages by request — contact your HeyGen account team.\",\n \"nullable\": true,\n \"properties\": {\n \"preferred_stock_voice_ids\": {\n \"description\": \"Optional. Pin specific stock voice IDs to draw from. If omitted, the target language's default stock-voice pool is used.\",\n \"items\": {\n \"type\": \"string\"\n },\n \"type\": \"array\"\n },\n \"use_stock_voice\": {\n \"default\": false,\n \"description\": \"Set to true to use a preset stock voice instead of cloning the original speaker.\",\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"title\": {\n \"description\": \"Title for the translation job\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"translate_audio_only\": {\n \"default\": false,\n \"description\": \"Only translate audio, keep original video\",\n \"type\": \"boolean\"\n },\n \"video\": {\n \"description\": \"Source video — provide as {type: 'url', url: '...'} or {type: 'asset_id', asset_id: '...'}\",\n \"discriminator\": {\n \"mapping\": {\n \"asset_id\": \"#/components/schemas/AssetId\",\n \"url\": \"#/components/schemas/AssetUrl\"\n },\n \"propertyName\": \"type\"\n },\n \"oneOf\": [\n {\n \"description\": \"Asset input via publicly accessible HTTPS URL.\",\n \"properties\": {\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n },\n \"url\": {\n \"description\": \"Publicly accessible HTTPS URL for the asset\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"url\"\n ],\n \"type\": \"object\"\n },\n {\n \"description\": \"Asset input via HeyGen asset ID from the asset upload endpoint.\",\n \"properties\": {\n \"asset_id\": {\n \"description\": \"HeyGen asset ID from the asset upload endpoint\",\n \"type\": \"string\"\n },\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"asset_id\"\n ],\n \"type\": \"object\"\n }\n ]\n }\n },\n \"required\": [\n \"video\",\n \"output_languages\"\n ],\n \"type\": \"object\"\n },\n \"type\": \"array\"\n }\n },\n \"required\": [\n \"video_translations\"\n ],\n \"type\": \"object\"\n}", + RequestSchema: "{\n \"properties\": {\n \"callback_url\": {\n \"description\": \"Webhook URL invoked once when every item in the batch reaches a terminal state.\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"title\": {\n \"description\": \"Display name for the batch, shown in the HeyGen app.\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"video_translations\": {\n \"description\": \"Video-translation payloads, identical in shape to POST /v3/video-translations. A single entry targeting multiple output_languages expands to one batch item per language; the expanded item count is capped at 100.\",\n \"items\": {\n \"description\": \"Request body for POST /v3/video-translations.\",\n \"properties\": {\n \"audio\": {\n \"description\": \"Custom audio for dubbing — provide as {type: 'url', url: '...'} or {type: 'asset_id', asset_id: '...'}\",\n \"discriminator\": {\n \"mapping\": {\n \"asset_id\": \"#/components/schemas/AssetId\",\n \"url\": \"#/components/schemas/AssetUrl\"\n },\n \"propertyName\": \"type\"\n },\n \"nullable\": true,\n \"oneOf\": [\n {\n \"description\": \"Asset input via publicly accessible HTTPS URL.\",\n \"properties\": {\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n },\n \"url\": {\n \"description\": \"Publicly accessible HTTPS URL for the asset\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"url\"\n ],\n \"type\": \"object\"\n },\n {\n \"description\": \"Asset input via HeyGen asset ID from the asset upload endpoint.\",\n \"properties\": {\n \"asset_id\": {\n \"description\": \"HeyGen asset ID from the asset upload endpoint\",\n \"type\": \"string\"\n },\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"asset_id\"\n ],\n \"type\": \"object\"\n }\n ]\n },\n \"brand_glossary_id\": {\n \"description\": \"Brand glossary ID for custom term translations (e.g. translate 'Reformer' as the Pilates equipment, not 'political activist'). Alias for the legacy `brand_voice_id` field. Discover IDs via GET /v3/brand-glossaries.\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"brand_voice_id\": {\n \"deprecated\": true,\n \"description\": \"Brand glossary ID for custom term translations. Legacy field name for `brand_glossary_id` — both are accepted and resolve to the same workspace record. Discover IDs via GET /v3/brand-glossaries.\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"callback_id\": {\n \"description\": \"ID included in webhook payload\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"callback_url\": {\n \"description\": \"Webhook URL for completion notifications\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"disable_music_track\": {\n \"default\": false,\n \"description\": \"Remove background music\",\n \"type\": \"boolean\"\n },\n \"enable_caption\": {\n \"default\": false,\n \"deprecated\": true,\n \"description\": \"Deprecated and ignored: captions are always generated; whether to display them is a download-side choice.\",\n \"type\": \"boolean\"\n },\n \"enable_dynamic_duration\": {\n \"default\": true,\n \"description\": \"Allow dynamic duration adjustment\",\n \"type\": \"boolean\"\n },\n \"enable_speech_enhancement\": {\n \"default\": false,\n \"description\": \"Enhance speech quality\",\n \"type\": \"boolean\"\n },\n \"enable_watermark\": {\n \"default\": false,\n \"description\": \"Add watermark to output\",\n \"type\": \"boolean\"\n },\n \"end_time\": {\n \"description\": \"End time in seconds for partial translation\",\n \"nullable\": true,\n \"type\": \"number\"\n },\n \"folder_id\": {\n \"description\": \"Project/folder ID to organize translation into\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"fps_mode\": {\n \"description\": \"Frame rate mode for the output video. 'vfr' = variable frame rate, 'cfr' = constant frame rate, 'passthrough' = match the source. Only takes effect when a custom 'audio' track is provided.\",\n \"enum\": [\n \"vfr\",\n \"cfr\",\n \"passthrough\"\n ],\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"input_language\": {\n \"description\": \"Source language code (auto-detected if omitted)\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"keep_the_same_format\": {\n \"description\": \"Preserve the source video's encoding specs (resolution, bitrate).\",\n \"nullable\": true,\n \"type\": \"boolean\"\n },\n \"mode\": {\n \"default\": \"speed\",\n \"description\": \"Translation quality mode: 'speed' (faster) or 'precision' (higher quality, uses avatar inference)\",\n \"enum\": [\n \"speed\",\n \"precision\"\n ],\n \"type\": \"string\"\n },\n \"output_languages\": {\n \"description\": \"Target language names (e.g. 'Chinese (Cantonese, Traditional)', 'Spanish (Spain)', 'English'). Use GET /v3/video-translations/languages for valid values. Use one for single translation, multiple for batch.\",\n \"items\": {\n \"type\": \"string\"\n },\n \"type\": \"array\"\n },\n \"speaker_num\": {\n \"description\": \"Number of speakers (improves speaker separation)\",\n \"nullable\": true,\n \"type\": \"integer\"\n },\n \"srt\": {\n \"description\": \"Custom subtitle file — provide as {type: 'url', url: '...'} or {type: 'asset_id', asset_id: '...'}.\",\n \"discriminator\": {\n \"mapping\": {\n \"asset_id\": \"#/components/schemas/AssetId\",\n \"url\": \"#/components/schemas/AssetUrl\"\n },\n \"propertyName\": \"type\"\n },\n \"nullable\": true,\n \"oneOf\": [\n {\n \"description\": \"Asset input via publicly accessible HTTPS URL.\",\n \"properties\": {\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n },\n \"url\": {\n \"description\": \"Publicly accessible HTTPS URL for the asset\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"url\"\n ],\n \"type\": \"object\"\n },\n {\n \"description\": \"Asset input via HeyGen asset ID from the asset upload endpoint.\",\n \"properties\": {\n \"asset_id\": {\n \"description\": \"HeyGen asset ID from the asset upload endpoint\",\n \"type\": \"string\"\n },\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"asset_id\"\n ],\n \"type\": \"object\"\n }\n ]\n },\n \"srt_role\": {\n \"description\": \"Which video the subtitle applies to: 'input' (source) or 'output' (translated).\",\n \"enum\": [\n \"input\",\n \"output\"\n ],\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"start_time\": {\n \"description\": \"Start time in seconds for partial translation\",\n \"nullable\": true,\n \"type\": \"number\"\n },\n \"stock_voice_config\": {\n \"description\": \"Use a preset stock voice for the translation instead of recreating the original speaker's voice. By default, Video Translation clones the original speaker so the result sounds like them; with this enabled, the translation is spoken by a natural preset voice optimized for clear pronunciation and accent in the target language (the result will not sound like the original speaker). Enterprise feature, available for selected accounts and languages by request — contact your HeyGen account team.\",\n \"nullable\": true,\n \"properties\": {\n \"preferred_stock_voice_ids\": {\n \"description\": \"Optional. Pin specific stock voice IDs to draw from. If omitted, the target language's default stock-voice pool is used.\",\n \"items\": {\n \"type\": \"string\"\n },\n \"type\": \"array\"\n },\n \"use_stock_voice\": {\n \"default\": false,\n \"description\": \"Set to true to use a preset stock voice instead of cloning the original speaker.\",\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"title\": {\n \"description\": \"Title for the translation job\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"translate_audio_only\": {\n \"default\": false,\n \"description\": \"Only translate audio, keep original video\",\n \"type\": \"boolean\"\n },\n \"video\": {\n \"description\": \"Source video — provide as {type: 'url', url: '...'} or {type: 'asset_id', asset_id: '...'}\",\n \"discriminator\": {\n \"mapping\": {\n \"asset_id\": \"#/components/schemas/AssetId\",\n \"url\": \"#/components/schemas/AssetUrl\"\n },\n \"propertyName\": \"type\"\n },\n \"oneOf\": [\n {\n \"description\": \"Asset input via publicly accessible HTTPS URL.\",\n \"properties\": {\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n },\n \"url\": {\n \"description\": \"Publicly accessible HTTPS URL for the asset\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"url\"\n ],\n \"type\": \"object\"\n },\n {\n \"description\": \"Asset input via HeyGen asset ID from the asset upload endpoint.\",\n \"properties\": {\n \"asset_id\": {\n \"description\": \"HeyGen asset ID from the asset upload endpoint\",\n \"type\": \"string\"\n },\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"asset_id\"\n ],\n \"type\": \"object\"\n }\n ]\n }\n },\n \"required\": [\n \"video\",\n \"output_languages\"\n ],\n \"type\": \"object\"\n },\n \"type\": \"array\"\n }\n },\n \"required\": [\n \"video_translations\"\n ],\n \"type\": \"object\"\n}", Endpoint: "/v3/video-translations/batches", Method: "POST", BodyEncoding: "json", @@ -94,7 +94,7 @@ var VideoTranslateCreate = &command.Spec{ Name: "create", Summary: "Create Video Translation", Description: "Translates a video into one or more target languages with voice cloning and lip-sync. Returns one video_translation_id per language. Use mode: 'speed' (default) for fast turnaround or 'precision' for higher lip-sync quality.", - RequestSchema: "{\n \"description\": \"Request body for POST /v3/video-translations.\",\n \"properties\": {\n \"audio\": {\n \"description\": \"Custom audio for dubbing — provide as {type: 'url', url: '...'} or {type: 'asset_id', asset_id: '...'}\",\n \"discriminator\": {\n \"mapping\": {\n \"asset_id\": \"#/components/schemas/AssetId\",\n \"url\": \"#/components/schemas/AssetUrl\"\n },\n \"propertyName\": \"type\"\n },\n \"nullable\": true,\n \"oneOf\": [\n {\n \"description\": \"Asset input via publicly accessible HTTPS URL.\",\n \"properties\": {\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n },\n \"url\": {\n \"description\": \"Publicly accessible HTTPS URL for the asset\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"url\"\n ],\n \"type\": \"object\"\n },\n {\n \"description\": \"Asset input via HeyGen asset ID from the asset upload endpoint.\",\n \"properties\": {\n \"asset_id\": {\n \"description\": \"HeyGen asset ID from the asset upload endpoint\",\n \"type\": \"string\"\n },\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"asset_id\"\n ],\n \"type\": \"object\"\n }\n ]\n },\n \"brand_glossary_id\": {\n \"description\": \"Brand glossary ID for custom term translations (e.g. translate 'Reformer' as the Pilates equipment, not 'political activist'). Alias for the legacy `brand_voice_id` field. Discover IDs via GET /v3/brand-glossaries.\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"brand_voice_id\": {\n \"deprecated\": true,\n \"description\": \"Brand glossary ID for custom term translations. Legacy field name for `brand_glossary_id` — both are accepted and resolve to the same workspace record. Discover IDs via GET /v3/brand-glossaries.\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"callback_id\": {\n \"description\": \"ID included in webhook payload\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"callback_url\": {\n \"description\": \"Webhook URL for completion notifications\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"disable_music_track\": {\n \"default\": false,\n \"description\": \"Remove background music\",\n \"type\": \"boolean\"\n },\n \"enable_caption\": {\n \"default\": false,\n \"description\": \"Deprecated and ignored: captions are always generated; whether to display them is a download-side choice.\",\n \"type\": \"boolean\"\n },\n \"enable_dynamic_duration\": {\n \"default\": true,\n \"description\": \"Allow dynamic duration adjustment\",\n \"type\": \"boolean\"\n },\n \"enable_speech_enhancement\": {\n \"default\": false,\n \"description\": \"Enhance speech quality\",\n \"type\": \"boolean\"\n },\n \"enable_watermark\": {\n \"default\": false,\n \"description\": \"Add watermark to output\",\n \"type\": \"boolean\"\n },\n \"end_time\": {\n \"description\": \"End time in seconds for partial translation\",\n \"nullable\": true,\n \"type\": \"number\"\n },\n \"folder_id\": {\n \"description\": \"Project/folder ID to organize translation into\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"fps_mode\": {\n \"description\": \"Frame rate mode for the output video. 'vfr' = variable frame rate, 'cfr' = constant frame rate, 'passthrough' = match the source. Only takes effect when a custom 'audio' track is provided.\",\n \"enum\": [\n \"vfr\",\n \"cfr\",\n \"passthrough\"\n ],\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"input_language\": {\n \"description\": \"Source language code (auto-detected if omitted)\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"keep_the_same_format\": {\n \"description\": \"Preserve the source video's encoding specs (resolution, bitrate).\",\n \"nullable\": true,\n \"type\": \"boolean\"\n },\n \"mode\": {\n \"default\": \"speed\",\n \"description\": \"Translation quality mode: 'speed' (faster) or 'precision' (higher quality, uses avatar inference)\",\n \"enum\": [\n \"speed\",\n \"precision\"\n ],\n \"type\": \"string\"\n },\n \"output_languages\": {\n \"description\": \"Target language names (e.g. 'Chinese (Cantonese, Traditional)', 'Spanish (Spain)', 'English'). Use GET /v3/video-translations/languages for valid values. Use one for single translation, multiple for batch.\",\n \"items\": {\n \"type\": \"string\"\n },\n \"type\": \"array\"\n },\n \"speaker_num\": {\n \"description\": \"Number of speakers (improves speaker separation)\",\n \"nullable\": true,\n \"type\": \"integer\"\n },\n \"srt\": {\n \"description\": \"Custom subtitle file — provide as {type: 'url', url: '...'} or {type: 'asset_id', asset_id: '...'}.\",\n \"discriminator\": {\n \"mapping\": {\n \"asset_id\": \"#/components/schemas/AssetId\",\n \"url\": \"#/components/schemas/AssetUrl\"\n },\n \"propertyName\": \"type\"\n },\n \"nullable\": true,\n \"oneOf\": [\n {\n \"description\": \"Asset input via publicly accessible HTTPS URL.\",\n \"properties\": {\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n },\n \"url\": {\n \"description\": \"Publicly accessible HTTPS URL for the asset\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"url\"\n ],\n \"type\": \"object\"\n },\n {\n \"description\": \"Asset input via HeyGen asset ID from the asset upload endpoint.\",\n \"properties\": {\n \"asset_id\": {\n \"description\": \"HeyGen asset ID from the asset upload endpoint\",\n \"type\": \"string\"\n },\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"asset_id\"\n ],\n \"type\": \"object\"\n }\n ]\n },\n \"srt_role\": {\n \"description\": \"Which video the subtitle applies to: 'input' (source) or 'output' (translated).\",\n \"enum\": [\n \"input\",\n \"output\"\n ],\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"start_time\": {\n \"description\": \"Start time in seconds for partial translation\",\n \"nullable\": true,\n \"type\": \"number\"\n },\n \"stock_voice_config\": {\n \"description\": \"Use a preset stock voice for the translation instead of recreating the original speaker's voice. By default, Video Translation clones the original speaker so the result sounds like them; with this enabled, the translation is spoken by a natural preset voice optimized for clear pronunciation and accent in the target language (the result will not sound like the original speaker). Enterprise feature, available for selected accounts and languages by request — contact your HeyGen account team.\",\n \"nullable\": true,\n \"properties\": {\n \"preferred_stock_voice_ids\": {\n \"description\": \"Optional. Pin specific stock voice IDs to draw from. If omitted, the target language's default stock-voice pool is used.\",\n \"items\": {\n \"type\": \"string\"\n },\n \"type\": \"array\"\n },\n \"use_stock_voice\": {\n \"default\": false,\n \"description\": \"Set to true to use a preset stock voice instead of cloning the original speaker.\",\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"title\": {\n \"description\": \"Title for the translation job\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"translate_audio_only\": {\n \"default\": false,\n \"description\": \"Only translate audio, keep original video\",\n \"type\": \"boolean\"\n },\n \"video\": {\n \"description\": \"Source video — provide as {type: 'url', url: '...'} or {type: 'asset_id', asset_id: '...'}\",\n \"discriminator\": {\n \"mapping\": {\n \"asset_id\": \"#/components/schemas/AssetId\",\n \"url\": \"#/components/schemas/AssetUrl\"\n },\n \"propertyName\": \"type\"\n },\n \"oneOf\": [\n {\n \"description\": \"Asset input via publicly accessible HTTPS URL.\",\n \"properties\": {\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n },\n \"url\": {\n \"description\": \"Publicly accessible HTTPS URL for the asset\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"url\"\n ],\n \"type\": \"object\"\n },\n {\n \"description\": \"Asset input via HeyGen asset ID from the asset upload endpoint.\",\n \"properties\": {\n \"asset_id\": {\n \"description\": \"HeyGen asset ID from the asset upload endpoint\",\n \"type\": \"string\"\n },\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"asset_id\"\n ],\n \"type\": \"object\"\n }\n ]\n }\n },\n \"required\": [\n \"video\",\n \"output_languages\"\n ],\n \"type\": \"object\"\n}", + RequestSchema: "{\n \"description\": \"Request body for POST /v3/video-translations.\",\n \"properties\": {\n \"audio\": {\n \"description\": \"Custom audio for dubbing — provide as {type: 'url', url: '...'} or {type: 'asset_id', asset_id: '...'}\",\n \"discriminator\": {\n \"mapping\": {\n \"asset_id\": \"#/components/schemas/AssetId\",\n \"url\": \"#/components/schemas/AssetUrl\"\n },\n \"propertyName\": \"type\"\n },\n \"nullable\": true,\n \"oneOf\": [\n {\n \"description\": \"Asset input via publicly accessible HTTPS URL.\",\n \"properties\": {\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n },\n \"url\": {\n \"description\": \"Publicly accessible HTTPS URL for the asset\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"url\"\n ],\n \"type\": \"object\"\n },\n {\n \"description\": \"Asset input via HeyGen asset ID from the asset upload endpoint.\",\n \"properties\": {\n \"asset_id\": {\n \"description\": \"HeyGen asset ID from the asset upload endpoint\",\n \"type\": \"string\"\n },\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"asset_id\"\n ],\n \"type\": \"object\"\n }\n ]\n },\n \"brand_glossary_id\": {\n \"description\": \"Brand glossary ID for custom term translations (e.g. translate 'Reformer' as the Pilates equipment, not 'political activist'). Alias for the legacy `brand_voice_id` field. Discover IDs via GET /v3/brand-glossaries.\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"brand_voice_id\": {\n \"deprecated\": true,\n \"description\": \"Brand glossary ID for custom term translations. Legacy field name for `brand_glossary_id` — both are accepted and resolve to the same workspace record. Discover IDs via GET /v3/brand-glossaries.\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"callback_id\": {\n \"description\": \"ID included in webhook payload\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"callback_url\": {\n \"description\": \"Webhook URL for completion notifications\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"disable_music_track\": {\n \"default\": false,\n \"description\": \"Remove background music\",\n \"type\": \"boolean\"\n },\n \"enable_caption\": {\n \"default\": false,\n \"deprecated\": true,\n \"description\": \"Deprecated and ignored: captions are always generated; whether to display them is a download-side choice.\",\n \"type\": \"boolean\"\n },\n \"enable_dynamic_duration\": {\n \"default\": true,\n \"description\": \"Allow dynamic duration adjustment\",\n \"type\": \"boolean\"\n },\n \"enable_speech_enhancement\": {\n \"default\": false,\n \"description\": \"Enhance speech quality\",\n \"type\": \"boolean\"\n },\n \"enable_watermark\": {\n \"default\": false,\n \"description\": \"Add watermark to output\",\n \"type\": \"boolean\"\n },\n \"end_time\": {\n \"description\": \"End time in seconds for partial translation\",\n \"nullable\": true,\n \"type\": \"number\"\n },\n \"folder_id\": {\n \"description\": \"Project/folder ID to organize translation into\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"fps_mode\": {\n \"description\": \"Frame rate mode for the output video. 'vfr' = variable frame rate, 'cfr' = constant frame rate, 'passthrough' = match the source. Only takes effect when a custom 'audio' track is provided.\",\n \"enum\": [\n \"vfr\",\n \"cfr\",\n \"passthrough\"\n ],\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"input_language\": {\n \"description\": \"Source language code (auto-detected if omitted)\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"keep_the_same_format\": {\n \"description\": \"Preserve the source video's encoding specs (resolution, bitrate).\",\n \"nullable\": true,\n \"type\": \"boolean\"\n },\n \"mode\": {\n \"default\": \"speed\",\n \"description\": \"Translation quality mode: 'speed' (faster) or 'precision' (higher quality, uses avatar inference)\",\n \"enum\": [\n \"speed\",\n \"precision\"\n ],\n \"type\": \"string\"\n },\n \"output_languages\": {\n \"description\": \"Target language names (e.g. 'Chinese (Cantonese, Traditional)', 'Spanish (Spain)', 'English'). Use GET /v3/video-translations/languages for valid values. Use one for single translation, multiple for batch.\",\n \"items\": {\n \"type\": \"string\"\n },\n \"type\": \"array\"\n },\n \"speaker_num\": {\n \"description\": \"Number of speakers (improves speaker separation)\",\n \"nullable\": true,\n \"type\": \"integer\"\n },\n \"srt\": {\n \"description\": \"Custom subtitle file — provide as {type: 'url', url: '...'} or {type: 'asset_id', asset_id: '...'}.\",\n \"discriminator\": {\n \"mapping\": {\n \"asset_id\": \"#/components/schemas/AssetId\",\n \"url\": \"#/components/schemas/AssetUrl\"\n },\n \"propertyName\": \"type\"\n },\n \"nullable\": true,\n \"oneOf\": [\n {\n \"description\": \"Asset input via publicly accessible HTTPS URL.\",\n \"properties\": {\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n },\n \"url\": {\n \"description\": \"Publicly accessible HTTPS URL for the asset\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"url\"\n ],\n \"type\": \"object\"\n },\n {\n \"description\": \"Asset input via HeyGen asset ID from the asset upload endpoint.\",\n \"properties\": {\n \"asset_id\": {\n \"description\": \"HeyGen asset ID from the asset upload endpoint\",\n \"type\": \"string\"\n },\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"asset_id\"\n ],\n \"type\": \"object\"\n }\n ]\n },\n \"srt_role\": {\n \"description\": \"Which video the subtitle applies to: 'input' (source) or 'output' (translated).\",\n \"enum\": [\n \"input\",\n \"output\"\n ],\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"start_time\": {\n \"description\": \"Start time in seconds for partial translation\",\n \"nullable\": true,\n \"type\": \"number\"\n },\n \"stock_voice_config\": {\n \"description\": \"Use a preset stock voice for the translation instead of recreating the original speaker's voice. By default, Video Translation clones the original speaker so the result sounds like them; with this enabled, the translation is spoken by a natural preset voice optimized for clear pronunciation and accent in the target language (the result will not sound like the original speaker). Enterprise feature, available for selected accounts and languages by request — contact your HeyGen account team.\",\n \"nullable\": true,\n \"properties\": {\n \"preferred_stock_voice_ids\": {\n \"description\": \"Optional. Pin specific stock voice IDs to draw from. If omitted, the target language's default stock-voice pool is used.\",\n \"items\": {\n \"type\": \"string\"\n },\n \"type\": \"array\"\n },\n \"use_stock_voice\": {\n \"default\": false,\n \"description\": \"Set to true to use a preset stock voice instead of cloning the original speaker.\",\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"title\": {\n \"description\": \"Title for the translation job\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"translate_audio_only\": {\n \"default\": false,\n \"description\": \"Only translate audio, keep original video\",\n \"type\": \"boolean\"\n },\n \"video\": {\n \"description\": \"Source video — provide as {type: 'url', url: '...'} or {type: 'asset_id', asset_id: '...'}\",\n \"discriminator\": {\n \"mapping\": {\n \"asset_id\": \"#/components/schemas/AssetId\",\n \"url\": \"#/components/schemas/AssetUrl\"\n },\n \"propertyName\": \"type\"\n },\n \"oneOf\": [\n {\n \"description\": \"Asset input via publicly accessible HTTPS URL.\",\n \"properties\": {\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n },\n \"url\": {\n \"description\": \"Publicly accessible HTTPS URL for the asset\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"url\"\n ],\n \"type\": \"object\"\n },\n {\n \"description\": \"Asset input via HeyGen asset ID from the asset upload endpoint.\",\n \"properties\": {\n \"asset_id\": {\n \"description\": \"HeyGen asset ID from the asset upload endpoint\",\n \"type\": \"string\"\n },\n \"type\": {\n \"description\": \"Input type discriminator\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\",\n \"asset_id\"\n ],\n \"type\": \"object\"\n }\n ]\n }\n },\n \"required\": [\n \"video\",\n \"output_languages\"\n ],\n \"type\": \"object\"\n}", ResponseSchema: "{\n \"properties\": {\n \"data\": {\n \"description\": \"Response for POST /v3/video-translations.\",\n \"properties\": {\n \"video_translation_ids\": {\n \"description\": \"Video translation IDs, one per target language\",\n \"items\": {\n \"type\": \"string\"\n },\n \"type\": \"array\"\n }\n },\n \"required\": [\n \"video_translation_ids\"\n ],\n \"type\": \"object\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n}", Endpoint: "/v3/video-translations", Method: "POST", @@ -166,16 +166,17 @@ var VideoTranslateCreate = &command.Spec{ JSONName: "disable_music_track", }, { - Name: "enable-caption", - Type: "bool", - Default: "false", - Help: "Deprecated and ignored: captions are always generated; whether to display them is a download-side choice.", - Required: false, - Enum: nil, - Min: nil, - Max: nil, - Source: "body", - JSONName: "enable_caption", + Name: "enable-caption", + Type: "bool", + Default: "false", + Help: "Deprecated and ignored: captions are always generated; whether to display them is a download-side choice.", + Required: false, + Enum: nil, + Min: nil, + Max: nil, + Source: "body", + JSONName: "enable_caption", + Deprecated: true, }, { Name: "enable-dynamic-duration", @@ -605,7 +606,7 @@ var VideoTranslateProofreadsGenerate = &command.Spec{ Name: "proofreads generate", Summary: "Generate Video from Proofread", Description: "Starts final video generation using the approved subtitles from a proofread session.", - RequestSchema: "{\n \"description\": \"Request body for POST /v3/video-translations/proofreads/{id}/generate.\",\n \"properties\": {\n \"callback_id\": {\n \"description\": \"ID included in webhook payload\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"callback_url\": {\n \"description\": \"Webhook URL for completion notifications\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"captions\": {\n \"default\": false,\n \"description\": \"Deprecated and ignored: captions are always generated; whether to display them is a download-side choice.\",\n \"type\": \"boolean\"\n },\n \"translate_audio_only\": {\n \"default\": false,\n \"description\": \"Only translate audio, keep original video\",\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n}", + RequestSchema: "{\n \"description\": \"Request body for POST /v3/video-translations/proofreads/{id}/generate.\",\n \"properties\": {\n \"callback_id\": {\n \"description\": \"ID included in webhook payload\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"callback_url\": {\n \"description\": \"Webhook URL for completion notifications\",\n \"nullable\": true,\n \"type\": \"string\"\n },\n \"captions\": {\n \"default\": false,\n \"deprecated\": true,\n \"description\": \"Deprecated and ignored: captions are always generated; whether to display them is a download-side choice.\",\n \"type\": \"boolean\"\n },\n \"translate_audio_only\": {\n \"default\": false,\n \"description\": \"Only translate audio, keep original video\",\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n}", ResponseSchema: "{\n \"properties\": {\n \"data\": {\n \"description\": \"Response for POST /v3/video-translations/proofreads/{id}/generate.\",\n \"properties\": {\n \"status\": {\n \"description\": \"Initial status (always processing)\",\n \"enum\": [\n \"processing\",\n \"completed\",\n \"failed\"\n ],\n \"type\": \"string\"\n },\n \"video_translation_id\": {\n \"description\": \"Video translation ID — use GET /v3/video-translations/{id} to poll status\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"video_translation_id\",\n \"status\"\n ],\n \"type\": \"object\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n}", Endpoint: "/v3/video-translations/proofreads/{proofread_id}/generate", Method: "POST", @@ -642,16 +643,17 @@ var VideoTranslateProofreadsGenerate = &command.Spec{ JSONName: "callback_url", }, { - Name: "captions", - Type: "bool", - Default: "false", - Help: "Deprecated and ignored: captions are always generated; whether to display them is a download-side choice.", - Required: false, - Enum: nil, - Min: nil, - Max: nil, - Source: "body", - JSONName: "captions", + Name: "captions", + Type: "bool", + Default: "false", + Help: "Deprecated and ignored: captions are always generated; whether to display them is a download-side choice.", + Required: false, + Enum: nil, + Min: nil, + Max: nil, + Source: "body", + JSONName: "captions", + Deprecated: true, }, { Name: "translate-audio-only",