{ "openapi": "3.1.0", "info": { "version": "1.0.0", "title": "Firefly Services Audio and Video API", "description": "This RESTful API provides resources to use Firefly Services AI for audio and video generation and processing.", "termsOfService": "https://www.adobe.com/content/dam/cc/en/legal/terms/enterprise/pdfs/PSLT-AdobeCreativeAPI-WW-2024v2.pdf" }, "tags": [ { "name": "Dynamic Graphics Render", "description": "Endpoints for Dynamic Graphics Render (DGR): template describe, presets, render, job status, cancel a render job, and list render jobs. The Cancel (`PUT /v1/cancel/{jobId}`) and List Render Jobs (`GET /v1/templates/render-jobs`) endpoints, as well as the extended status fields (`createdDate`, `totalJobItems`, `retryPayloadUrl`, `startedDate`, `completedDate`, and the `canceling`/`canceled` statuses), apply **only to render jobs** submitted via `POST /v1/templates/render`." }, { "name": "Reframe", "description": "Endpoints for video reframing." }, { "name": "Translate and lip sync", "description": "Endpoints for transcribing and dubbing audio/video content." }, { "name": "Text-to-speech", "description": "Endpoints for text-to-speech operations." }, { "name": "Text-to-Avatar", "description": "Endpoints for Text-to-Avatar operations." }, { "name": "Manage jobs", "description": "Endpoints for managing asynchronous jobs." } ], "servers": [ { "url": "https://audio-video-api.adobe.io", "description": "Production server." } ], "security": [ { "AccessToken": [], "X-Api-Key": [] } ], "paths": { "/v1/voices": { "get": { "tags": [ "Text-to-speech", "Text-to-Avatar" ], "summary": "Get available voices", "description": "This endpoint provides the list of all available voices for the user's enterprise.", "operationId": "voices", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SuccessfulVoicesResponse" }, "examples": { "Success": { "$ref": "#/components/examples/SuccessfulVoicesResponse" } } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FailedResponse" }, "examples": { "ErrorBodyUnauthorized": { "$ref": "#/components/examples/ErrorBodyUnauthorized" } } } } }, "403": { "description": "Forbidden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FailedResponse" }, "examples": { "ErrorBodyForbidden": { "$ref": "#/components/examples/ErrorBodyForbidden" }, "ErrorBodyAPIKeyInvalid": { "$ref": "#/components/examples/ErrorBodyAPIKeyInvalid" } } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FailedResponse" }, "examples": { "ErrorBodyTooManyRequests": { "$ref": "#/components/examples/ErrorBodyTooManyRequests" } } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FailedResponse" }, "examples": { "RunTimeError": { "$ref": "#/components/examples/RunTimeError" }, "StudioAPIFailedEntitiesErrorResponse": { "$ref": "#/components/examples/StudioAPIFailedEntitiesErrorResponse" } } } } } } } }, "/v1/generate-speech": { "post": { "tags": [ "Text-to-speech" ], "summary": "Generate speech from text", "description": "This endpoint generates speech from a transcript. You can provide the transcript either as plain text or a pre-signed URL. The response will include a job ID and a status URL for tracking the job.", "operationId": "generate-speech", "requestBody": { "description": "The request body contains the transcript used for generating speech.", "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TTSRequest" }, "examples": { "TextInputForSpeechGeneration": { "$ref": "#/components/examples/TextInputForSpeechGeneration" }, "URLInputForSpeechGeneration": { "$ref": "#/components/examples/URLInputForSpeechGeneration" } } } } }, "responses": { "202": { "description": "Accepted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SubmitAPIResponse" }, "examples": { "SubmitRequestResponse": { "$ref": "#/components/examples/SubmitRequestResponse" } } } } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FailedResponse" }, "examples": { "BadRequestError": { "$ref": "#/components/examples/BadRequestError" } } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FailedResponse" }, "examples": { "UnauthorizedAccessError": { "$ref": "#/components/examples/ErrorBodyUnauthorized" }, "ErrorBodyAccessDenied": { "$ref": "#/components/examples/ErrorBodyAccessDenied" } } } } }, "403": { "description": "Forbidden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FailedResponse" }, "examples": { "ErrorBodyForbidden": { "$ref": "#/components/examples/ErrorBodyForbidden" }, "ErrorBodyAPIKeyInvalid": { "$ref": "#/components/examples/ErrorBodyAPIKeyInvalid" }, "UserNotEntitledError": { "$ref": "#/components/examples/UserNotEntitledError" }, "QuotaExceededError": { "$ref": "#/components/examples/QuotaExceededError" }, "UserProfileDeniedError": { "$ref": "#/components/examples/UserProfileDeniedError" }, "UserBlockedError": { "$ref": "#/components/examples/UserBlockedError" }, "InvalidSubscriptionError": { "$ref": "#/components/examples/InvalidSubscriptionError" }, "ViolationError": { "$ref": "#/components/examples/ViolationError" }, "TasteExhaustedError": { "$ref": "#/components/examples/TasteExhaustedError" }, "AccessError": { "$ref": "#/components/examples/AccessError" } } } } }, "422": { "description": "Unprocessable Entity", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FailedResponse" }, "examples": { "InvalidInputErrorExample": { "$ref": "#/components/examples/InvalidInputErrorExample" }, "MissingInputFileUrlErrorExample": { "$ref": "#/components/examples/MissingInputFileUrlErrorExample" }, "InvalidInputUrlErrorExample": { "$ref": "#/components/examples/InvalidInputUrlErrorExample" }, "InputFileFormatValidationErrorExample": { "$ref": "#/components/examples/InputFileFormatValidationErrorExample" }, "MissingScriptErrorExample": { "$ref": "#/components/examples/MissingScriptErrorExample" }, "EmptyTextForScriptErrorExample": { "$ref": "#/components/examples/EmptyTextForScriptErrorExample" }, "TextLengthExceededForScriptErrorExample": { "$ref": "#/components/examples/TextLengthExceededForScriptErrorExample" }, "TextLengthTooShortForScriptErrorExample": { "$ref": "#/components/examples/TextLengthTooShortForScriptErrorExample" }, "ScriptInvalidASCIIRange": { "$ref": "#/components/examples/ScriptInvalidASCIIRange" }, "ScriptInvalidTextSupportedRange": { "$ref": "#/components/examples/ScriptInvalidTextSupportedRange" }, "InvalidOrMissingLocaleCodeForScriptErrorExample": { "$ref": "#/components/examples/InvalidOrMissingLocaleCodeForScriptErrorExample" }, "MissingMediaTypeForScriptErrorExample": { "$ref": "#/components/examples/MissingMediaTypeForScriptErrorExample" }, "MediatypeIncompatibleForText": { "$ref": "#/components/examples/MediatypeIncompatibleForText" }, "MissingSourceLocaleErrorExample": { "$ref": "#/components/examples/MissingSourceLocaleErrorExample" }, "SourceUrlSourceTextConflictErrorExample": { "$ref": "#/components/examples/SourceUrlSourceTextConflictErrorExample" }, "UnsupportedVoiceIdErrorExample": { "$ref": "#/components/examples/UnsupportedVoiceIdErrorExample" }, "MissingVoiceIdErrorExample": { "$ref": "#/components/examples/MissingVoiceIdErrorExample" }, "MissingOutputErrorExample": { "$ref": "#/components/examples/MissingOutputErrorExample" }, "MissingMediaTypeForOutputErrorExample": { "$ref": "#/components/examples/MissingMediaTypeForOutputErrorExample" }, "InvalidOutputFileFormatErrorExample": { "$ref": "#/components/examples/InvalidOutputFileFormatErrorExample" }, "InvalidRequestPayloadErrorExample": { "$ref": "#/components/examples/InvalidRequestPayloadErrorExample" }, "InvalidSourceUrlErrorExample": { "$ref": "#/components/examples/InvalidSourceUrlErrorExample" }, "IncorrectVoiceNameErrorExample": { "$ref": "#/components/examples/IncorrectVoiceNameErrorExample" } } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FailedResponse" }, "examples": { "ErrorBodyTooManyRequests": { "$ref": "#/components/examples/ErrorBodyTooManyRequests" }, "ErrorBodyRateLimited": { "$ref": "#/components/examples/ErrorBodyRateLimited" } } } } }, "451": { "description": "Unauthorized For Legal Reasons", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FailedResponse" }, "examples": { "ErrorBodyLegalReasons": { "$ref": "#/components/examples/ErrorBodyLegalReasons" } } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FailedResponse" }, "examples": { "TTSServiceSubmitError": { "$ref": "#/components/examples/TTSServiceSubmitError" }, "TTSEntityCreationError": { "$ref": "#/components/examples/TTSEntityCreationError" }, "TTSRuntimeError": { "$ref": "#/components/examples/TTSRuntimeError" } } } } } } } }, "/v1/status/{jobId}": { "get": { "tags": [ "Manage jobs" ], "summary": "Get job status", "description": "Provides the status and result of an asynchronous job. For Dynamic Graphics Render (DGR), returns the status of a Describe template or Render job.", "operationId": "status", "parameters": [ { "name": "jobId", "in": "path", "description": "The job ID of an asynchronous job.", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StatusAPIResponse" }, "examples": { "StatusAPIInprogressRequestResponse": { "$ref": "#/components/examples/StatusApiInProgressRequestResponse" }, "StatusAPISuccessRequestResponse": { "$ref": "#/components/examples/StatusApiSuccessRequestResponse" }, "StatusAPIFailedInputFileDownloadResponse": { "$ref": "#/components/examples/StatusAPIFailedInputFileDownloadResponse" }, "DGRJobStatusNotStarted": { "$ref": "#/components/examples/DGRJobStatusNotStarted" }, "DGRJobStatusRunning": { "$ref": "#/components/examples/DGRJobStatusRunning" }, "DGRDescribeSuccess": { "$ref": "#/components/examples/DGRDescribeSuccess" }, "DGRDescribeAEPSuccess": { "$ref": "#/components/examples/DGRDescribeAEPSuccess" }, "DGRRenderSuccessSingle": { "$ref": "#/components/examples/DGRRenderSuccessSingle" }, "DGRRenderSuccessMultiple": { "$ref": "#/components/examples/DGRRenderSuccessMultiple" }, "DGRRenderPartialSuccess": { "$ref": "#/components/examples/DGRRenderPartialSuccess" }, "DGRRenderSuccessTwoVariations": { "$ref": "#/components/examples/DGRRenderSuccessTwoVariations" }, "DGRJobFailed": { "$ref": "#/components/examples/DGRJobFailed" }, "DGRJobCanceled": { "$ref": "#/components/examples/DGRJobCanceled" }, "StatusAPIFailedMediatypeMismatchResponse": { "$ref": "#/components/examples/StatusAPIFailedMediatypeMismatchResponse" }, "StatusAPIFailedCAISigningResponse": { "$ref": "#/components/examples/StatusAPIFailedCAISigningResponse" }, "StatusAPIFailedUploadErrorResponse": { "$ref": "#/components/examples/StatusAPIFailedUploadErrorResponse" }, "StatusAPIFailedDownloadErrorResponse": { "$ref": "#/components/examples/StatusAPIFailedDownloadErrorResponse" }, "StatusAPIFailedTTSErrorResponse": { "$ref": "#/components/examples/StatusAPIFailedTTSErrorResponse" }, "StatusAPIFailedDurationTooLongResponse": { "$ref": "#/components/examples/StatusAPIFailedDurationTooLongResponse" }, "StatusAPIFailedUnsupportedBackgroundResponse": { "$ref": "#/components/examples/StatusAPIFailedUnsupportedBackgroundResponse" }, "StatusAPIFailedBackgroundResolutionErrorResponse": { "$ref": "#/components/examples/StatusAPIFailedBackgroundResolutionErrorResponse" }, "StatusAPIFailedCropAreaErrorResponse": { "$ref": "#/components/examples/StatusAPIFailedCropAreaErrorResponse" }, "StatusAPIFailedBackgroundCropErrorResponse": { "$ref": "#/components/examples/StatusAPIFailedBackgroundCropErrorResponse" }, "StatusAPIFailedFFMpegErrorResponse": { "$ref": "#/components/examples/StatusAPIFailedFFMpegErrorResponse" }, "StatusAPIFailedAvatarErrorResponse": { "$ref": "#/components/examples/StatusAPIFailedAvatarErrorResponse" }, "StatusAPIFailedLipsyncErrorResponse": { "$ref": "#/components/examples/StatusAPIFailedLipsyncErrorResponse" }, "StatusAPIFailedLipsyncPollingErrorResponse": { "$ref": "#/components/examples/StatusAPIFailedLipsyncPollingErrorResponse" }, "StatusAPIFailedMediaTrimErrorResponse": { "$ref": "#/components/examples/StatusAPIFailedMediaTrimErrorResponse" }, "StatusAPIFailedMediaTrimAlphaErrorResponse": { "$ref": "#/components/examples/StatusAPIFailedMediaTrimAlphaErrorResponse" }, "StatusAPIFailedInternalErrorResponse": { "$ref": "#/components/examples/StatusAPIFailedInternalErrorResponse" }, "StatusAPIFailedTTSInternalErrorResponse": { "$ref": "#/components/examples/StatusAPIFailedTTSInternalErrorResponse" } } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FailedResponse" }, "examples": { "ErrorBodyUnauthorized": { "$ref": "#/components/examples/ErrorBodyUnauthorized" } } } } }, "403": { "description": "Forbidden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FailedResponse" }, "examples": { "ErrorBodyForbidden": { "$ref": "#/components/examples/ErrorBodyForbidden" }, "ErrorBodyAPIKeyInvalid": { "$ref": "#/components/examples/ErrorBodyAPIKeyInvalid" } } } } }, "404": { "description": "Not Found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FailedResponse" }, "examples": { "ErrorBodyResourceNotFound": { "$ref": "#/components/examples/ErrorBodyResourceNotFound" } } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FailedResponse" }, "examples": { "ErrorBodyTooManyRequests": { "$ref": "#/components/examples/ErrorBodyTooManyRequests" } } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FailedResponse" }, "examples": { "RunTimeError": { "$ref": "#/components/examples/RunTimeError" }, "TEXT_TO_SPEECH_ENTITY_CREATION_ERROR": { "$ref": "#/components/examples/TEXT_TO_SPEECH_ENTITY_CREATION_ERROR" }, "TEXT_TO_SPEECH_SERVICE_SUBMIT_ERROR": { "$ref": "#/components/examples/TEXT_TO_SPEECH_SERVICE_SUBMIT_ERROR" } } } } } } } }, "/v1/templates/describe": { "post": { "tags": [ "Dynamic Graphics Render" ], "summary": "Describe template", "description": "Analyzes a MOGRT (video template) file and returns a manifest of editable controls; fonts, images, audio, video and other supported values.", "operationId": "template-describe", "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TemplateDescribeRequest" }, "examples": { "SampleExample": { "summary": "MOGRT template", "value": { "source": { "url": "" } } }, "AEPDescribeExample": { "summary": "After Effects project (AEP)", "value": { "type": "aep", "source": { "url": "" }, "compName": "A. Variable Duration" } } } } } }, "responses": { "202": { "description": "Accepted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TemplateDescribeResponse" }, "examples": { "SuccessResponse": { "value": { "jobId": "", "statusUrl": "https://audio-video-api.adobe.io/v1/status/" } } } } }, "headers": { "Link": { "schema": { "type": "string" }, "description": "URL to monitor the status of the job." } } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "InvalidJsonError": { "value": { "error_code": "invalid_json", "message": "Invalid request. Please check the input data." } } } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "InvalidToken": { "value": { "error_code": "401013", "message": "OAuth token is not valid." } } } } } }, "403": { "description": "Forbidden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "InvalidContext": { "value": { "error_code": "access_error", "message": "Token not allowed in the current context." } }, "ApiKeyIsRequired": { "value": { "error_code": "403000", "message": "API key is required." } } } } } }, "422": { "description": "Unprocessable Entity", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "ValidationError": { "value": { "error_code": "validation_error", "message": "Validation error occurred", "messageId": "42206000" } }, "InvalidTemplateTypeError": { "value": { "error_code": "validation_error", "message": "Input must contain a valid template type", "messageId": "42206001" } }, "InvalidTemplateSourceError": { "value": { "error_code": "validation_error", "message": "Invalid template source", "messageId": "42206002" } }, "InvalidTemplateSourceUrlError": { "value": { "error_code": "validation_error", "message": "Invalid template source URL", "messageId": "42206003" } } } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "ServerError": { "value": { "messageId": "50006000", "message": "Internal Server Error", "error_code": "runtime_error" } } } } } } } } }, "/v1/presets": { "get": { "tags": [ "Dynamic Graphics Render" ], "summary": "Fetch video rendering presets", "description": "Returns a list of predefined social-first encoding presets for rendering outputs.", "operationId": "get-presets", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PresetsResponse" }, "examples": { "PresetsExample": { "$ref": "#/components/examples/PresetsResponse" } } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "Unauthorized": { "value": { "error_code": "401013", "message": "OAuth token is not valid." } } } } } }, "403": { "description": "Forbidden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "Forbidden": { "value": { "error_code": "403000", "message": "API key is required." } } } } } } } } }, "/v1/templates/render": { "post": { "tags": [ "Dynamic Graphics Render" ], "summary": "Render template", "description": "Renders one or more video variations by applying overrides and export presets. Submit up to 10 overrides per call for a subset of editable layers and get a pre-signed URL link to download the video file. For layers that are not editable, the system defaults are automatically applied at export.", "operationId": "template-render", "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TemplateRenderRequest" }, "examples": { "RenderExample": { "summary": "Sample render request", "value": { "source": { "url": "" }, "fonts": [ { "name": "", "source": { "url": "" } } ], "config": { "handleMissingFonts": "use_default" }, "assets": [ { "source": { "url": "" } }, { "source": { "url": "" } } ], "presets": [ { "source": { "presetId": "ffs_video_api_vert_1920p_hq" } }, { "source": { "url": "" } } ], "variations": [ { "variables": [ { "variableId": "", "selectedCheckboxValue": true }, { "variableId": "", "assetIndex": 0, "scale": "no_scale" }, { "variableId": "", "selectedDropdownValue": "0" }, { "variableId": "", "text": "First Name", "fontName": "font_name_1" }, { "variableId": "", "selectedSliderValue": -18 }, { "variableId": "", "assetIndex": 1, "audioPreference": "replace" } ] }, { "variables": [ { "variableId": "", "selectedCheckboxValue": true }, { "variableId": "", "assetIndex": 0, "scale": "fit_to_frame" }, { "variableId": "", "selectedDropdownValue": "0" }, { "variableId": "", "text": "First Name", "fontName": "font_name_1" }, { "variableId": "", "selectedSliderValue": -18 }, { "variableId": "", "assetIndex": 1, "audioPreference": "mix" } ] } ], "outputs": [ { "variationIndex": 0, "presetIndex": 0, "fileName": "some_custom_file_name", "destination": "" }, { "variationIndex": 1, "presetIndex": 0, "fileName": "output_vert_1920p_hq", "destination": "" }, { "variationIndex": 1, "presetIndex": 1, "fileName": "my_custom_file_name", "destination": "" } ] } }, "AEPRenderExample": { "summary": "AEP: replace media with scaling", "value": { "type": "aep", "compName": "A. Variable Duration", "source": { "url": "" }, "config": { "handleMissingFonts": "use_default" }, "presets": [ { "source": { "presetId": "ffs_video_api_land_1080p_hq" } } ], "assets": [ { "source": { "url": "" } } ], "variations": [ { "variables": [ { "variableId": "c259:l261:media", "assetIndex": 0, "scale": "fill_frame" } ] } ], "outputs": [ { "variationIndex": 0, "presetIndex": 0, "fileName": "aep_media_replace" } ] } }, "AEPRenderTextExample": { "summary": "AEP: replace a text control", "value": { "type": "aep", "compName": "A. Variable Duration", "source": { "url": "" }, "config": { "handleMissingFonts": "use_default" }, "fonts": [ { "name": "SourceSans3-Bold", "source": { "url": "" } } ], "presets": [ { "source": { "presetId": "ffs_video_api_land_1080p_hq" } } ], "variations": [ { "variables": [ { "variableId": "c169:l193:layer:sourceText", "text": "Certification Test Title" } ] } ], "outputs": [ { "variationIndex": 0, "presetIndex": 0, "fileName": "aep_text_replacement" } ] } }, "AEPRenderAudioExample": { "summary": "AEP: replace audio", "value": { "type": "aep", "compName": "C. Audio Replacement", "source": { "url": "" }, "config": { "handleMissingFonts": "use_default" }, "presets": [ { "source": { "presetId": "ffs_video_api_land_1080p_hq" } } ], "assets": [ { "source": { "url": "" } } ], "variations": [ { "variables": [ { "variableId": "c840:l921:audio", "assetIndex": 0, "audioPreference": "replace" } ] } ], "outputs": [ { "variationIndex": 0, "presetIndex": 0, "fileName": "aep_audio_replace" } ] } }, "AEPRenderLayerOperationsExample": { "summary": "AEP: layer operations (variable-duration timeline)", "value": { "type": "aep", "compName": "A. Variable Duration", "source": { "url": "" }, "config": { "handleMissingFonts": "use_default" }, "fonts": [ { "name": "SourceSans3-Bold", "source": { "url": "" } } ], "presets": [ { "source": { "presetId": "ffs_video_api_land_1080p_hq" } } ], "assets": [ { "source": { "url": "" } } ], "variations": [ { "variables": [ { "variableId": "c259:l261:media", "assetIndex": 0 } ] } ], "layerOperations": [ { "operation": "match_source_duration", "layerId": "c259:l261:layer" }, { "operation": "shift_inpoint", "layerId": "c259:l263:layer", "refLayerId": "c259:l261:layer", "refInOut": "out", "offsetSeconds": -1 }, { "operation": "shift_inpoint", "layerId": "c259:l265:layer", "refLayerId": "c259:l263:layer", "refInOut": "in", "offsetFrames": 90 }, { "operation": "trim_comp", "startSeconds": 0, "endLayerId": "c259:l265:layer" }, { "operation": "trim_outpoint", "layerId": "c259:l263:layer", "refLayerId": "c259:l265:layer", "refInOut": "out" }, { "operation": "trim_outpoint", "layerId": "c259:l262:layer", "refLayerId": "c259:l261:layer", "refInOut": "out" }, { "operation": "trim_outpoint", "layerId": "c259:l819:layer", "refLayerId": "c259:l265:layer", "refInOut": "out" }, { "operation": "enable_layer", "layerId": "c259:l398:layer", "videoEnabled": false } ], "outputs": [ { "variationIndex": 0, "presetIndex": 0, "fileName": "aep_layer_operations" } ] } } } } } }, "responses": { "202": { "description": "Accepted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TemplateRenderResponse" }, "examples": { "SuccessResponse": { "value": { "jobId": "", "statusUrl": "https://audio-video-api.adobe.io/v1/status/", "cancelUrl": "https://audio-video-api.adobe.io/v1/cancel/" } } } } } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "InvalidJsonError": { "value": { "error_code": "invalid_json", "message": "Invalid request. Please check the input data." } } } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "InvalidToken": { "value": { "error_code": "401013", "message": "OAuth token is not valid." } } } } } }, "403": { "description": "Forbidden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "InvalidContext": { "value": { "error_code": "access_error", "message": "Token not allowed in the current context." } }, "ApiKeyIsRequired": { "value": { "error_code": "403000", "message": "API key is required." } } } } } }, "422": { "description": "Unprocessable Entity", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "InvalidTemplateTypeError": { "value": { "error_code": "validation_error", "message": "Input must contain a valid template type", "messageId": "42205000" } }, "InvalidTemplateSourceUrlError": { "value": { "error_code": "validation_error", "message": "Invalid template source URL", "messageId": "42205001" } }, "InvalidPresetIdError": { "value": { "error_code": "validation_error", "message": "{presetId} export preset does not exist", "messageId": "42205002" } }, "InvalidFontDetailsError": { "value": { "error_code": "validation_error", "message": "Invalid font details in variation {variationIndex} control {controlIndex}", "messageId": "42205003" } }, "InvalidMediaDetailsError": { "value": { "error_code": "validation_error", "message": "Invalid media details in variation {variationIndex} control {controlIndex}", "messageId": "42205004" } }, "InvalidScaleTypeError": { "value": { "error_code": "validation_error", "message": "Invalid scale type in variation {variationIndex} control {controlIndex}", "messageId": "42205005" } }, "InvalidControlTypeError": { "value": { "error_code": "validation_error", "message": "Invalid control type in variation {variationIndex} control {controlIndex}", "messageId": "42205006" } } } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "InternalServerError": { "value": { "error_code": "runtime_error", "message": "Internal Server Error", "messageId": "50005001" } } } } } } } } }, "/v1/cancel/{jobId}": { "put": { "tags": [ "Dynamic Graphics Render", "Manage jobs" ], "summary": "Cancel a render job", "description": "Aborts an in-flight render job. Returns `202 Accepted` as soon as the cancellation has been accepted; subsequent calls to `GET /v1/status/{jobId}` will report `\"status\": \"canceled\"` once the worker has fully stopped the underlying render.\n\n**Applicable only to render jobs submitted via `POST /v1/templates/render`.** This endpoint does not apply to Describe, Reframe, TLS, TTS, or Avatar jobs.\n\n**Notes:**\n- Cancellation is idempotent.\n- Once propagated to the worker, in-progress outputs are not uploaded to the destinations specified in the original render request.\n- For a short window after the PUT, the status endpoint may still report `running`; poll until it transitions to `canceled`.", "operationId": "cancel-render-job", "parameters": [ { "name": "jobId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" }, "description": "UUID of the render job to cancel, as returned in the `jobId` field of the original 202 submit response or in the `cancelUrl` property of a List Render Jobs response item." }, { "$ref": "#/components/parameters/XRequestIdHeader" } ], "responses": { "202": { "description": "Cancellation accepted. The job is transitioning to `canceled`; poll `GET /v1/status/{jobId}` to observe the terminal state.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CancelAcceptedResponse" }, "examples": { "CancelAccepted": { "$ref": "#/components/examples/CancelAccepted" } } } } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "InvalidJsonError": { "value": { "error_code": "invalid_json", "message": "Invalid request. Please check the input data." } } } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "InvalidToken": { "value": { "error_code": "401013", "message": "OAuth token is not valid." } } } } } }, "403": { "description": "Forbidden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "InvalidContext": { "value": { "error_code": "access_error", "message": "Token not allowed in the current context." } } } } } }, "404": { "description": "Not Found — `jobId` is unknown or no longer accessible.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "JobNotFound": { "$ref": "#/components/examples/CancelJobNotFound" } } } } }, "409": { "description": "Conflict — the job is already in a terminal state and cannot be canceled.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "JobAlreadyCompleted": { "$ref": "#/components/examples/CancelJobAlreadyCompleted" }, "JobAlreadyCanceled": { "$ref": "#/components/examples/CancelJobAlreadyCanceled" } } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "RateLimited": { "value": { "error_code": "rate_limit_exceeded", "message": "Too many requests. Please retry after some time." } } } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "InternalServerError": { "value": { "error_code": "runtime_error", "message": "Internal Server Error", "messageId": "50005001" } } } } } } } } }, "/v1/templates/render-jobs": { "get": { "tags": [ "Dynamic Graphics Render", "Manage jobs" ], "summary": "List render jobs", "description": "Returns a paginated list of template render jobs owned by the authenticated caller, optionally filtered by status and creation date.\n\n**Applicable only to render jobs submitted via `POST /v1/templates/render`.** Jobs from other API types (Describe, Reframe, TLS, TTS, Avatar) are not returned.\n\n**Filter syntax (FIQL):**\n- `status==running` — single status equality\n- `status=in=(running,not_started)` — status set membership\n- `createdDate=ge=2026-05-01T00:00:00Z` — absolute ISO 8601 lower bound\n- `createdDate=ge=-P7D` — relative ISO 8601 duration (last 7 days)\n- Combine with `;` (AND): `status==running;createdDate=ge=-P7D`\n\n**Default filter:** all statuses, `createdDate` within the last 30 days.\n\n**Retention:** `createdDate` filter values must fall within the 30-day retention window.\n\n**Pagination:** follow `paging.nextUrl` until it is absent (last page).", "operationId": "list-render-jobs", "parameters": [ { "name": "filter", "in": "query", "required": false, "description": "FIQL filter string. Supported sub-params: `status` (enum) and `createdDate` (ISO 8601 date-time or relative duration). Default: `createdDate=ge=-P30D;status=in=(not_started,running,succeeded,partially_succeeded,failed,canceled)`.", "schema": { "type": "string" }, "examples": { "RunningOnly": { "summary": "Running jobs only", "value": "status==running" }, "Last7DaysRunning": { "summary": "Running jobs in last 7 days", "value": "createdDate=ge=-P7D;status==running" }, "AbsoluteDateRange": { "summary": "Absolute date range", "value": "createdDate=ge=2026-05-14T00:00:00Z;createdDate=le=2026-05-21T00:00:00Z" }, "MultipleStatuses": { "summary": "Multiple statuses", "value": "status=in=(running,not_started)" } } }, { "name": "limit", "in": "query", "required": false, "description": "Maximum number of job entries to return per page. Must be between 1 and 100 (inclusive). Defaults to 20.", "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 20 } }, { "name": "cursor", "in": "query", "required": false, "description": "Opaque pagination cursor returned in `paging.nextUrl` of a previous response. Omit to fetch the first page.", "schema": { "type": "string" } }, { "$ref": "#/components/parameters/XRequestIdHeader" } ], "responses": { "200": { "description": "Success — list of render jobs (may be empty).", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RenderJobListResponse" }, "examples": { "FirstPageWithMore": { "$ref": "#/components/examples/RenderJobListFirstPage" }, "LastPage": { "$ref": "#/components/examples/RenderJobListLastPage" }, "EmptyResult": { "$ref": "#/components/examples/RenderJobListEmpty" } } } } }, "400": { "description": "Bad request — invalid filter, limit, cursor, or date range.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "InvalidStatusFilter": { "$ref": "#/components/examples/ListJobsInvalidStatusFilter" }, "LimitOutOfRange": { "$ref": "#/components/examples/ListJobsLimitOutOfRange" }, "InvalidCursor": { "$ref": "#/components/examples/ListJobsInvalidCursor" }, "InvalidFilter": { "$ref": "#/components/examples/ListJobsInvalidFilter" }, "FilterOutOfRetention": { "$ref": "#/components/examples/ListJobsFilterOutOfRetention" } } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "InvalidToken": { "value": { "error_code": "401013", "message": "OAuth token is not valid." } } } } } }, "403": { "description": "Forbidden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "InvalidContext": { "value": { "error_code": "access_error", "message": "Token not allowed in the current context." } } } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "RateLimited": { "value": { "error_code": "rate_limit_exceeded", "message": "Too many requests. Please retry after some time." } } } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "InternalServerError": { "value": { "error_code": "runtime_error", "message": "Internal Server Error", "messageId": "50005001" } } } } } } } } }, "/v1/reframe": { "post": { "tags": [ "Reframe" ], "summary": "Reframe video", "description": "This endpoint enables you to reframe video using AI. Provide video input with a pre-signed URL to generate reframed video output. \n\nThis API has more limited capabilities than the v2 endpoint, and may be deprecated soon. **It's recommended to use the v2 endpoint instead.**", "operationId": "generate-reframed-video", "requestBody": { "description": "The reframe request body.", "required": true, "content": { "application/json": { "schema": { "properties": { "video": { "type": "object", "properties": { "source": { "type": "object", "properties": { "url": { "type": "string", "format": "uri", "description": "The pre-signed URL pointing to the input source." } }, "required": [ "url" ], "description": "Details of the source including a pre-signed URL. See the [list of allowed domains for storage](https://developer.adobe.com/audio-video-firefly-services/getting-started/storage-solutions/)." }, "mediaType": { "type": "string", "enum": [ "video/mp4", "video/quicktime" ], "description": "Supported video media types." } }, "required": [ "source", "mediaType" ], "description": "Video input details." }, "sceneEditDetection": { "type": "boolean", "description": "Apply Scene Edit Detection before reframing.", "default": true }, "overlays": { "type": "array", "items": { "$ref": "#/components/schemas/Overlay" }, "description": "Configuration details for video overlays." }, "outputConfig": { "type": "object", "properties": { "aspectRatios": { "type": "array", "items": { "type": "string", "format": "numerator:denominator" }, "description": "A list of aspect ratios for the output video." } }, "required": [ "aspectRatios" ], "description": "Configuration details for the generated reframed video." } }, "required": [ "video", "outputConfig" ], "type": "object" }, "examples": { "ReframedVideoInputRequestPayload": { "summary": "Video input to generate Reframed video output", "value": { "video": { "source": { "url": "" }, "mediaType": "video/mp4" }, "sceneEditDetection": true, "overlays": [ { "mediaType": "image/gif", "source": { "url": "" }, "startTime": "00:00:05:00", "duration": "00:00:05:00", "scale": { "width": 500, "height": 500 }, "position": { "anchorPoint": "top_left", "offsetX": 500, "offsetY": 500 }, "repeat": "loop" } ], "outputConfig": { "aspectRatios": [ "1:1", "9:16", "4:5" ] } } } } } } }, "responses": { "202": { "description": "Accepted", "content": { "application/json": { "schema": { "description": "Response indicating that the reframed video job has been successfully submitted.", "properties": { "jobId": { "type": "string", "description": "The unique identifier for the job." }, "statusUrl": { "type": "string", "description": "The URL to monitor the status of the job." } }, "required": [ "jobId", "statusUrl" ], "type": "object" }, "examples": { "GenerateReframedVideoResponse": { "summary": "Response for successful job submission", "value": { "jobId": "", "statusUrl": "https:///v1/status/" } } } } } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GenerateReframedVideoJobErrorBody" }, "examples": { "ErrorBodyBadRequest": { "$ref": "#/components/examples/ErrorBodyBadRequest" } } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GenerateReframedVideoJobErrorBody" }, "examples": { "ErrorBodyUnauthorized": { "$ref": "#/components/examples/ErrorBodyUnauthorized" } } } } }, "403": { "description": "Forbidden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GenerateReframedVideoJobErrorBody" }, "examples": { "ErrorBodyForbidden": { "$ref": "#/components/examples/ErrorBodyForbidden" } } } } }, "404": { "description": "Resource not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GenerateReframedVideoJobErrorBody" }, "examples": { "ErrorBodyResourceNotFound": { "$ref": "#/components/examples/ErrorBodyResourceNotFound" } } } } }, "405": { "description": "Method Not Allowed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GenerateReframedVideoJobErrorBody" }, "examples": { "ErrorBodyMethodNotAllowed": { "$ref": "#/components/examples/ErrorBodyMethodNotAllowed" } } } } }, "429": { "description": "Too many requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GenerateReframedVideoJobErrorBody" }, "examples": { "ErrorBodyTooManyRequests": { "$ref": "#/components/examples/ErrorBodyTooManyRequests" } } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GenerateReframedVideoJobErrorBody" }, "examples": { "ErrorBodyInternalServerError": { "$ref": "#/components/examples/ErrorBodyInternalServerError" } } } } } } } }, "/v1/transcribe": { "post": { "tags": [ "Translate and lip sync" ], "summary": "Transcribe media", "description": "Generates transcripts and captions for the input audio or video in the source language or in a target language.", "operationId": "transcribe", "requestBody": { "description": "The transcribe request body.", "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TranscribeRequest" }, "examples": { "AudioInputToGenerateTranscriptFromSourceAudio": { "$ref": "#/components/examples/AudioInputToGenerateTranscriptFromSourceAudio" }, "VideoInputToGenerateTranscriptFromSourceVideo": { "$ref": "#/components/examples/VideoInputToGenerateTranscriptFromSourceVideo" }, "AudioInputToGenerateTranscriptFromTargetLanguageAudio": { "$ref": "#/components/examples/AudioInputToGenerateTranscriptFromTargetLanguageAudio" }, "VideoInputToGenerateTranscriptFromTargetLanguageVideo": { "$ref": "#/components/examples/VideoInputToGenerateTranscriptFromTargetLanguageVideo" }, "AudioInputToGenerateTranscriptAndCaptionsFromTargetFormatsFromSourceAudio": { "$ref": "#/components/examples/AudioInputToGenerateTranscriptAndCaptionsFromTargetFormatsFromSourceAudio" }, "VideoInputToGenerateTranscriptAndCaptionsFromTargetFormatsFromSourceVideo": { "$ref": "#/components/examples/VideoInputToGenerateTranscriptAndCaptionsFromTargetFormatsFromSourceVideo" } } } } }, "responses": { "202": { "description": "Accepted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/JobStatusLinkResponse" }, "examples": { "TranscribeResponse": { "$ref": "#/components/examples/JobStatusLinkResponse" } } } } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorBody" }, "examples": { "ErrorBodyBadRequest": { "$ref": "#/components/examples/ErrorBodyBadRequest" } } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorBody" }, "examples": { "ErrorBodyUnauthorized": { "$ref": "#/components/examples/ErrorBodyUnauthorized" } } } } }, "403": { "description": "Forbidden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorBody" }, "examples": { "ErrorBodyForbidden": { "$ref": "#/components/examples/ErrorBodyForbidden" } } } } }, "404": { "description": "Resource Not Found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorBody" }, "examples": { "ErrorBodyResourceNotFound": { "$ref": "#/components/examples/ErrorBodyResourceNotFound" } } } } }, "405": { "description": "Method Not Allowed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorBody" }, "examples": { "ErrorBodyMethodNotAllowed": { "$ref": "#/components/examples/ErrorBodyMethodNotAllowed" } } } } }, "422": { "description": "Unprocessable Entity", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorBody" }, "examples": { "ErrorBodyMethodNotAllowed": { "$ref": "#/components/examples/ErrorBodyMethodNotAllowed" }, "ValidationErrorVideoSourceBlank": { "$ref": "#/components/examples/ValidationErrorVideoSourceBlank" }, "ValidationErrorAudioSourceBlank": { "$ref": "#/components/examples/ValidationErrorAudioSourceBlank" }, "ValidationErrorInputSourceBlank": { "$ref": "#/components/examples/ValidationErrorInputSourceBlank" }, "ValidationErrorVideoAndAudioSimultaneous": { "$ref": "#/components/examples/ValidationErrorVideoAndAudioSimultaneous" }, "ValidationErrorVideoInputMediaTypeMissing": { "$ref": "#/components/examples/ValidationErrorVideoInputMediaTypeMissing" }, "ValidationErrorAudioInputMediaTypeMissing": { "$ref": "#/components/examples/ValidationErrorAudioInputMediaTypeMissing" }, "ValidationErrorSourceUrlEmpty": { "$ref": "#/components/examples/ValidationErrorSourceUrlEmpty" }, "ValidationErrorInvalidVideoAudioSourceUrl": { "$ref": "#/components/examples/ValidationErrorInvalidVideoAudioSourceUrl" }, "ValidationErrorBlankTranscriptSourceField": { "$ref": "#/components/examples/ValidationErrorBlankTranscriptSourceField" }, "ValidationErrorInvalidTranscriptUrl": { "$ref": "#/components/examples/ValidationErrorInvalidTranscriptUrl" }, "ValidationErrorUnsupportedVideoMediaType": { "$ref": "#/components/examples/ValidationErrorUnsupportedVideoMediaType" }, "ValidationErrorUnsupportedAudioMediaType": { "$ref": "#/components/examples/ValidationErrorUnsupportedAudioMediaType" }, "ValidationErrorUnsupportedTargetLocaleCode": { "$ref": "#/components/examples/ValidationErrorUnsupportedTargetLocaleCode" }, "ValidationErrorBlankTargetLocaleCode": { "$ref": "#/components/examples/ValidationErrorBlankTargetLocaleCode" }, "ValidationErrorMissingTargetLocaleCode": { "$ref": "#/components/examples/ValidationErrorMissingTargetLocaleCode" }, "ValidationErrorLocaleCodeNotRequiredForEditedTranscript": { "$ref": "#/components/examples/ValidationErrorLocaleCodeNotRequiredForEditedTranscript" }, "ValidationErrorEitherTargetLocaleCodesOrTranscriptionRequired": { "$ref": "#/components/examples/ValidationErrorEitherTargetLocaleCodesOrTranscriptionRequired" }, "ValidationErrorCaptionGenerationNotSupportedWithTranslation": { "$ref": "#/components/examples/ValidationErrorCaptionGenerationNotSupportedWithTranslation" } } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorBody" }, "examples": { "ErrorBodyTooManyRequests": { "$ref": "#/components/examples/ErrorBodyTooManyRequests" } } } } }, "451": { "description": "Unauthorized For Legal Reasons", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorBody" }, "examples": { "ErrorBodyLegalReasons": { "$ref": "#/components/examples/ErrorBodyLegalReasons" } } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorBody" }, "examples": { "ErrorBodyInternalServerError": { "$ref": "#/components/examples/ErrorBodyInternalServerError" } } } } } } } }, "/v1/dub": { "post": { "tags": [ "Translate and lip sync" ], "summary": "Dub audio or video", "description": "Generate dubbed video or audio. A composited lip sync can also be added for video dubbing.", "operationId": "dub", "requestBody": { "description": "The dub request body.", "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DubRequest" }, "examples": { "DubRequestUsingAutoTranslatedTranscripts": { "$ref": "#/components/examples/DubRequestUsingAutoTranslatedTranscripts" }, "DubRequestUsingAudioAutoTranslatedTranscripts": { "$ref": "#/components/examples/DubRequestUsingAudioAutoTranslatedTranscripts" }, "DubRequestUsingEditedSourceTranscript": { "$ref": "#/components/examples/DubRequestUsingEditedSourceTranscript" }, "DubRequestUsingAudioEditedSourceTranscript": { "$ref": "#/components/examples/DubRequestUsingAudioEditedSourceTranscript" }, "DubRequestUsingEditedTranslatedTranscript": { "$ref": "#/components/examples/DubRequestUsingEditedTranslatedTranscript" }, "DubRequestUsingAudioEditedTranslatedTranscript": { "$ref": "#/components/examples/DubRequestUsingAudioEditedTranslatedTranscript" } } } } }, "responses": { "202": { "description": "Accepted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/JobStatusLinkResponse" }, "examples": { "DubResponse": { "$ref": "#/components/examples/JobStatusLinkResponse" } } } } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorBody" }, "examples": { "ErrorBodyBadRequest": { "$ref": "#/components/examples/ErrorBodyBadRequest" } } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorBody" }, "examples": { "ErrorBodyUnauthorized": { "$ref": "#/components/examples/ErrorBodyUnauthorized" } } } } }, "403": { "description": "Forbidden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorBody" }, "examples": { "ErrorBodyForbidden": { "$ref": "#/components/examples/ErrorBodyForbidden" } } } } }, "404": { "description": "Resource Not Found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorBody" }, "examples": { "ErrorBodyResourceNotFound": { "$ref": "#/components/examples/ErrorBodyResourceNotFound" } } } } }, "405": { "description": "Method Not Allowed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorBody" }, "examples": { "ErrorBodyMethodNotAllowed": { "$ref": "#/components/examples/ErrorBodyMethodNotAllowed" } } } } }, "422": { "description": "Unprocessable Entity", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorBody" }, "examples": { "ErrorBodyMethodNotAllowed": { "$ref": "#/components/examples/ErrorBodyMethodNotAllowed" }, "ValidationErrorVideoSourceBlank": { "$ref": "#/components/examples/ValidationErrorVideoSourceBlank" }, "ValidationErrorAudioSourceBlank": { "$ref": "#/components/examples/ValidationErrorAudioSourceBlank" }, "ValidationErrorInputSourceBlank": { "$ref": "#/components/examples/ValidationErrorInputSourceBlank" }, "ValidationErrorVideoAndAudioSimultaneous": { "$ref": "#/components/examples/ValidationErrorVideoAndAudioSimultaneous" }, "ValidationErrorVideoInputMediaTypeMissing": { "$ref": "#/components/examples/ValidationErrorVideoInputMediaTypeMissing" }, "ValidationErrorAudioInputMediaTypeMissing": { "$ref": "#/components/examples/ValidationErrorAudioInputMediaTypeMissing" }, "ValidationErrorSourceUrlEmpty": { "$ref": "#/components/examples/ValidationErrorSourceUrlEmpty" }, "ValidationErrorInvalidVideoAudioSourceUrl": { "$ref": "#/components/examples/ValidationErrorInvalidVideoAudioSourceUrl" }, "ValidationErrorInvalidTranscriptUrl": { "$ref": "#/components/examples/ValidationErrorInvalidTranscriptUrl" }, "ValidationErrorUnsupportedVideoMediaType": { "$ref": "#/components/examples/ValidationErrorUnsupportedVideoMediaType" }, "ValidationErrorUnsupportedAudioMediaType": { "$ref": "#/components/examples/ValidationErrorUnsupportedAudioMediaType" }, "ValidationErrorUnsupportedTargetLocaleCode": { "$ref": "#/components/examples/ValidationErrorUnsupportedTargetLocaleCode" }, "ValidationErrorMissingTargetLocaleCode": { "$ref": "#/components/examples/ValidationErrorMissingTargetLocaleCode" }, "ValidationErrorLocaleCodeNotRequiredForEditedTranscript": { "$ref": "#/components/examples/ValidationErrorLocaleCodeNotRequiredForEditedTranscript" }, "ValidationErrorEitherTargetLocaleCodesOrTranscriptionRequired": { "$ref": "#/components/examples/ValidationErrorEitherTargetLocaleCodesOrTranscriptionRequired" } } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorBody" }, "examples": { "ErrorBodyTooManyRequests": { "$ref": "#/components/examples/ErrorBodyTooManyRequests" } } } } }, "451": { "description": "Unauthorized For Legal Reasons", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorBody" }, "examples": { "ErrorBodyLegalReasons": { "$ref": "#/components/examples/ErrorBodyLegalReasons" } } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorBody" }, "examples": { "ErrorBodyInternalServerError": { "$ref": "#/components/examples/ErrorBodyInternalServerError" } } } } } } } }, "/v1/avatars": { "get": { "tags": [ "Text-to-Avatar" ], "summary": "Get available avatars", "description": "Retrieves the list of all available avatars for the user's enterprise.", "operationId": "avatars", "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SuccessfulAvatarsResponse" }, "examples": { "Success": { "$ref": "#/components/examples/SuccessfulAvatarsResponse" } } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FailedResponse" }, "examples": { "ErrorBodyUnauthorized": { "$ref": "#/components/examples/ErrorBodyUnauthorized" } } } } }, "403": { "description": "Forbidden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FailedResponse" }, "examples": { "ErrorBodyForbidden": { "$ref": "#/components/examples/ErrorBodyForbidden" }, "ErrorBodyAPIKeyInvalid": { "$ref": "#/components/examples/ErrorBodyAPIKeyInvalid" } } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FailedResponse" }, "examples": { "ErrorBodyTooManyRequests": { "$ref": "#/components/examples/ErrorBodyTooManyRequests" } } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FailedResponse" }, "examples": { "RunTimeError": { "$ref": "#/components/examples/RunTimeError" }, "StudioAPIFailedEntitiesErrorResponse": { "$ref": "#/components/examples/StudioAPIFailedEntitiesErrorResponse" } } } } } } } }, "/v2/reframe": { "post": { "tags": [ "Reframe" ], "summary": "Reframe video v2", "description": "This endpoint enables you to reframe the input media. You can provide a video input via a pre-signed URL to generate reframed output video.", "operationId": "generate-reframed-video-v2", "requestBody": { "description": "Generate reframed video request body.", "required": true, "content": { "application/json": { "schema": { "properties": { "video": { "$ref": "#/components/schemas/VideoInputV2" }, "analysis": { "$ref": "#/components/schemas/AnalysisV2" }, "composition": { "$ref": "#/components/schemas/CompositionV2" }, "output": { "type": "object", "properties": { "format": { "$ref": "#/components/schemas/OutputFormatV2" }, "renditions": { "type": "array", "uniqueItems": true, "description": "Array of output rendition specifications.", "items": { "oneOf": [ { "title": "Aspect Ratio Rendition", "type": "object", "properties": { "aspectRatio": { "$ref": "#/components/schemas/AspectRatioV2" }, "mediaDestination": { "$ref": "#/components/schemas/Destination" }, "sidecarDestination": { "$ref": "#/components/schemas/Destination" } }, "required": [ "aspectRatio" ] }, { "title": "Resolution Rendition", "type": "object", "properties": { "resolution": { "type": "object", "properties": { "width": { "type": "integer", "description": "Resolution width of the output in pixels." }, "height": { "type": "integer", "description": "Resolution height of the output in pixels." } }, "required": [ "width", "height" ] }, "mediaDestination": { "$ref": "#/components/schemas/Destination" }, "sidecarDestination": { "$ref": "#/components/schemas/Destination" } }, "required": [ "resolution" ] } ] } } }, "required": [ "renditions" ], "description": "Output configuration details for generating the reframed video." } }, "required": [ "video", "output" ], "type": "object" }, "examples": { "ReframedVideoInputRequestPayload": { "summary": "Video input to generate reframed video output", "value": { "video": { "source": { "url": "" } }, "analysis": { "sceneEditDetection": true, "focalPoints": [] }, "composition": { "overlays": [ { "source": { "url": "" }, "startTime": "00:00:05:00", "duration": "00:00:05:00", "scale": { "width": 500, "height": 500 }, "position": { "anchorPoint": "top_left", "offsetX": 500, "offsetY": 500 }, "repeat": "loop" } ] }, "output": { "format": { "media": "mp4" }, "renditions": [ { "aspectRatio": { "x": 1, "y": 1 }, "mediaDestination": { "url": "" } }, { "aspectRatio": { "x": 16, "y": 9 } } ], "layout": { "applyLetterboxing": false } } } }, "ObjectDetectionExample": { "summary": "Example with object detection for focal points", "value": { "video": { "source": { "url": "" } }, "analysis": { "sceneEditDetection": true, "focalPoints": [ "car", "people" ] }, "output": { "format": { "media": "mp4" }, "renditions": [ { "aspectRatio": { "x": 16, "y": 9 } } ], "layout": { "applyLetterboxing": false } } } } } } } }, "responses": { "202": { "description": "Accepted", "content": { "application/json": { "schema": { "description": "Response indicating that the reframed video job has been successfully submitted.", "properties": { "jobId": { "type": "string", "description": "The unique identifier for the job." }, "statusUrl": { "type": "string", "description": "The URL to monitor the status of the job." } }, "required": [ "jobId", "statusUrl" ], "type": "object" }, "examples": { "GenerateReframedVideoResponse": { "summary": "Response for successful job submission", "value": { "jobId": "", "statusUrl": "https:///v1/status/" } } } } } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "description": "Error response for the reframed video job.", "properties": { "error_code": { "type": "string", "description": "A code representing the specific error type." }, "message": { "type": "string", "description": "A description of the error that occurred." } }, "required": [ "message", "error_code" ], "type": "object" }, "examples": { "ErrorBodyBadRequest": { "summary": "Error Body Bad Request", "value": { "error_code": "400001", "message": "Invalid request. Please check the input data." } } } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "description": "Error response for the reframed video job.", "properties": { "error_code": { "type": "string", "description": "A code representing the specific error type." }, "message": { "type": "string", "description": "A description of the error that occurred." } }, "required": [ "message", "error_code" ], "type": "object" }, "examples": { "ErrorBodyUnauthorized": { "summary": "Error Body Unauthorized", "value": { "error_code": "401013", "message": "OAuth token is not valid." } } } } } }, "403": { "description": "Forbidden", "content": { "application/json": { "schema": { "description": "Error response for the reframed video job.", "properties": { "error_code": { "type": "string", "description": "A code representing the specific error type." }, "message": { "type": "string", "description": "A description of the error that occurred." } }, "required": [ "message", "error_code" ], "type": "object" }, "examples": { "ErrorBodyForbidden": { "summary": "Error Body Forbidden", "value": { "error_code": "403220", "message": "Token not allowed in the current context." } } } } } }, "404": { "description": "Resource Not Found", "content": { "application/json": { "schema": { "description": "Error response for the reframed video job.", "properties": { "error_code": { "type": "string", "description": "A code representing the specific error type." }, "message": { "type": "string", "description": "A description of the error that occurred." } }, "required": [ "message", "error_code" ], "type": "object" }, "examples": { "ErrorBodyResourceNotFound": { "summary": "Resource Not Found", "value": { "error_code": "404001", "message": "The requested resource was not found." } } } } } }, "405": { "description": "Method Not Allowed", "content": { "application/json": { "schema": { "description": "Error response for the reframed video job.", "properties": { "error_code": { "type": "string", "description": "A code representing the specific error type." }, "message": { "type": "string", "description": "A description of the error that occurred." } }, "required": [ "message", "error_code" ], "type": "object" }, "examples": { "ErrorBodyMethodNotAllowed": { "summary": "Method Not Allowed", "value": { "error_code": "405001", "message": "The requested method is not allowed on this endpoint." } } } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "description": "Error response for the reframed video job.", "properties": { "error_code": { "type": "string", "description": "A code representing the specific error type." }, "message": { "type": "string", "description": "A description of the error that occurred." } }, "required": [ "message", "error_code" ], "type": "object" }, "examples": { "ErrorBodyTooManyRequests": { "summary": "Too Many Requests", "value": { "message": "Too Many Requests", "error_code": "429011" } } } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "description": "Error response for the reframed video job.", "properties": { "error_code": { "type": "string", "description": "A code representing the specific error type." }, "message": { "type": "string", "description": "A description of the error that occurred." } }, "required": [ "message", "error_code" ], "type": "object" }, "examples": { "ErrorBodyInternalServerError": { "summary": "Internal Server Error", "value": { "error_code": "500001", "message": "An internal server error occurred. Please try again later." } } } } } } } } }, "/v2/status/{jobId}": { "get": { "tags": [ "Reframe", "Manage jobs" ], "summary": "Get job result", "description": "This endpoint retrieves the result of an asynchronous reframed job initiated using the job ID.", "operationId": "job-result-v2", "parameters": [ { "name": "jobId", "in": "path", "description": "The job ID to get status for an asynchronous generate reframed video job.", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "description": "Job response on status API.", "oneOf": [ { "title": "Job In Progress", "type": "object", "description": "Response indicating that the reframed video job is in progress.", "properties": { "status": { "type": "string", "enum": [ "not_started", "running", "failed", "succeeded", "partially_succeeded" ], "description": "The status of the reframed video job." }, "jobId": { "type": "string", "description": "The unique identifier for the job." } }, "required": [ "status", "jobId" ] }, { "title": "Job Success", "type": "object", "description": "Success response for the reframed video job.", "properties": { "status": { "type": "string", "enum": [ "not_started", "running", "failed", "succeeded", "partially_succeeded" ], "description": "The status of the reframed video job." }, "jobId": { "type": "string", "description": "The unique identifier for the job." }, "outputs": { "type": "array", "uniqueItems": true, "description": "Array of output rendition results.", "items": { "oneOf": [ { "title": "Successful Rendition", "type": "object", "properties": { "destination": { "type": "object", "properties": { "url": { "type": "string", "format": "uri", "description": "The pre-signed URL pointing to the output." } }, "required": [ "url" ], "description": "Details of the output destination, including a pre-signed URL." } }, "required": [ "destination" ] }, { "title": "Failed Rendition", "type": "object", "description": "Error response for the generate reframed video job.", "properties": { "error": { "type": "object", "properties": { "error_code": { "type": "string", "description": "A code representing the specific error type." }, "message": { "type": "string", "description": "A description of the error that occurred." } }, "required": [ "message", "error_code" ], "description": "Details of the error encountered during the reframing process." } }, "required": [ "error" ] } ] } } }, "required": [ "status", "jobId", "outputs" ] }, { "title": "Job Partial Success", "type": "object", "description": "Response for a reframed video job that partially succeeded.", "properties": { "status": { "type": "string", "enum": [ "not_started", "running", "failed", "succeeded", "partially_succeeded" ], "description": "The status of the reframed video job." }, "jobId": { "type": "string", "description": "The unique identifier for the job." }, "outputs": { "type": "array", "items": { "oneOf": [ { "title": "Successful Rendition", "type": "object", "description": "Success response for the generate reframed video job.", "properties": { "destination": { "type": "object", "properties": { "url": { "type": "string", "format": "uri", "description": "The pre-signed URL pointing to the output." } }, "required": [ "url" ], "description": "Details of the output destination, including a pre-signed URL." } }, "required": [ "destination" ] }, { "title": "Failed Rendition", "type": "object", "description": "Error response for the generate reframed video job.", "properties": { "error": { "type": "object", "properties": { "error_code": { "type": "string", "description": "A code representing the specific error type." }, "message": { "type": "string", "description": "A description of the error that occurred." } }, "required": [ "message", "error_code" ], "description": "Details of the error encountered during the reframing process." } }, "required": [ "error" ] } ] }, "description": "Details of the job's partial success, including successful outputs and any errors encountered." } }, "required": [ "status", "jobId", "outputs" ] }, { "title": "Job Failure", "type": "object", "description": "Error response for a reframed video job that failed.", "properties": { "status": { "type": "string", "enum": [ "not_started", "running", "failed", "succeeded", "partially_succeeded" ], "description": "The status of the reframed video job, indicating a failure." }, "jobId": { "type": "string", "description": "The unique identifier for the job." }, "outputs": { "type": "object", "properties": { "renditions": { "type": "array", "uniqueItems": true, "description": "Array of failed rendition outputs.", "items": { "title": "Failed Rendition", "type": "object", "description": "Error response for the generate reframed video job.", "properties": { "error": { "type": "object", "properties": { "error_code": { "type": "string", "description": "A code representing the specific error type." }, "message": { "type": "string", "description": "A description of the error that occurred." } }, "required": [ "message", "error_code" ], "description": "Details of the error encountered during the reframing process." } }, "required": [ "error" ] } } }, "required": [ "renditions" ], "description": "Details of the errors encountered during the job." } }, "required": [ "status", "jobId", "outputs" ] } ] }, "examples": { "GenerateReframedVideoJobPendingResponse": { "summary": "Job is pending", "value": { "status": "pending", "jobId": "123e4567-e89b-12d3-a456-426614174002" } }, "GenerateReframedVideoJobInProgressResponse": { "summary": "Job is in progress", "value": { "status": "running", "jobId": "123e4567-e89b-12d3-a456-426614174002" } }, "GenerateReframedVideoJobSuccessResponse": { "summary": "Job succeeded", "value": { "status": "succeeded", "jobId": "123e4567-e89b-12d3-a456-426614174002", "outputs": [ { "destination": { "url": "<<>>" } } ] } }, "GenerateReframedVideoJobPartialSuccessResponse": { "summary": "Job partially succeeded", "value": { "status": "partially_succeeded", "jobId": "123e4567-e89b-12d3-a456-426614174002", "outputs": [ { "destination": { "url": "<<>>" } }, { "error": { "error_code": "<>", "message": "<>" } } ] } }, "GenerateReframedVideoJobFailureResponse": { "summary": "Job failed", "value": { "status": "failed", "jobId": "123e4567-e89b-12d3-a456-426614174002", "outputs": [ { "error": { "error_code": "<>", "message": "<>" } }, { "error": { "error_code": "<>", "message": "<>" } } ] } } } } } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "description": "Response indicating that the reframed video job has been successfully submitted.", "properties": { "jobId": { "type": "string", "description": "The unique identifier for the job." }, "statusUrl": { "type": "string", "description": "The URL to monitor the status of the job." } }, "required": [ "jobId", "statusUrl" ], "type": "object" }, "examples": { "ErrorBodyBadRequest": { "summary": "Bad Request", "value": { "error_code": "400001", "message": "Invalid request. Please check the input data." } } } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "description": "Response indicating that the reframed video job has been successfully submitted.", "properties": { "jobId": { "type": "string", "description": "The unique identifier for the job." }, "statusUrl": { "type": "string", "description": "The URL to monitor the status of the job." } }, "required": [ "jobId", "statusUrl" ], "type": "object" }, "examples": { "ErrorBodyUnauthorized": { "summary": "Unauthorized", "value": { "error_code": "401013", "message": "OAuth token is not valid" } } } } } }, "403": { "description": "Forbidden", "content": { "application/json": { "schema": { "description": "Response indicating that the reframed video job has been successfully submitted.", "properties": { "jobId": { "type": "string", "description": "The unique identifier for the job." }, "statusUrl": { "type": "string", "description": "The URL to monitor the status of the job." } }, "required": [ "jobId", "statusUrl" ], "type": "object" }, "examples": { "ErrorBodyForbidden": { "summary": "Forbidden", "value": { "error_code": "401013", "message": "OAuth token is not valid" } } } } } }, "404": { "description": "Resource Not Found", "content": { "application/json": { "schema": { "description": "Response indicating that the reframed video job has been successfully submitted.", "properties": { "jobId": { "type": "string", "description": "The unique identifier for the job." }, "statusUrl": { "type": "string", "description": "The URL to monitor the status of the job." } }, "required": [ "jobId", "statusUrl" ], "type": "object" }, "examples": { "ErrorBodyResourceNotFound": { "summary": "Resource Not Found", "value": { "error_code": "404001", "message": "The requested resource was not found." } } } } } }, "405": { "description": "Method Not Allowed", "content": { "application/json": { "schema": { "description": "Response indicating that the reframed video job has been successfully submitted.", "properties": { "jobId": { "type": "string", "description": "The unique identifier for the job." }, "statusUrl": { "type": "string", "description": "The URL to monitor the status of the job." } }, "required": [ "jobId", "statusUrl" ], "type": "object" }, "examples": { "ErrorBodyMethodNotAllowed": { "summary": "Method Not Allowed", "value": { "error_code": "405001", "message": "The requested method is not allowed on this endpoint." } } } } } }, "422": { "description": "Unprocessable Entity", "content": { "application/json": { "schema": { "description": "Response indicating that the reframed video job has been successfully submitted.", "properties": { "jobId": { "type": "string", "description": "The unique identifier for the job." }, "statusUrl": { "type": "string", "description": "The URL to monitor the status of the job." } }, "required": [ "jobId", "statusUrl" ], "type": "object" } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "description": "Response indicating that the reframed video job has been successfully submitted.", "properties": { "jobId": { "type": "string", "description": "The unique identifier for the job." }, "statusUrl": { "type": "string", "description": "The URL to monitor the status of the job." } }, "required": [ "jobId", "statusUrl" ], "type": "object" }, "examples": { "ErrorBodyTooManyRequests": { "summary": "Too Many Requests", "value": { "message": "Too Many Requests", "error_code": "429011" } } } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "description": "Response indicating that the reframed video job has been successfully submitted.", "properties": { "jobId": { "type": "string", "description": "The unique identifier for the job." }, "statusUrl": { "type": "string", "description": "The URL to monitor the status of the job." } }, "required": [ "jobId", "statusUrl" ], "type": "object" }, "examples": { "ErrorBodyInternalServerError": { "summary": "Internal Server Error", "value": { "error_code": "500001", "message": "An internal server error occurred. Please try again later." } } } } } } } } }, "/v1/generate-avatar": { "post": { "tags": [ "Text-to-Avatar" ], "summary": "Generate avatar video from text", "description": "Generates an avatar video from a provided transcript or audio file. You can provide the transcript either as plain text or a pre-signed URL. The API is asynchronous, so the response will include a job ID and a status URL for tracking the running job.", "operationId": "generate-avatar", "requestBody": { "description": "The request body contains the transcript and details for generating an avatar.", "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AvatarRequest" }, "examples": { "PlainTextInputForAvatarGeneration": { "$ref": "#/components/examples/PlainTextInputForAvatarGeneration" }, "PlainTextInputForAvatarGenerationUsingVideoBackground": { "$ref": "#/components/examples/PlainTextInputForAvatarGenerationUsingVideoBackground" }, "PlainTextInputForAvatarGenerationUsingImageBackground": { "$ref": "#/components/examples/PlainTextInputForAvatarGenerationUsingImageBackground" }, "PlainTextInputForAvatarGenerationUsingColorBackground": { "$ref": "#/components/examples/PlainTextInputForAvatarGenerationUsingColorBackground" }, "URLTextInputForAvatarGeneration": { "$ref": "#/components/examples/URLTextInputForAvatarGeneration" }, "URLInputForAvatarGeneration": { "$ref": "#/components/examples/URLInputForAvatarGeneration" } } } } }, "responses": { "202": { "description": "Accepted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SubmitAPIResponse" }, "examples": { "SubmitRequestResponse": { "$ref": "#/components/examples/SubmitRequestResponse" } } } } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FailedResponse" }, "examples": { "BadRequestError": { "$ref": "#/components/examples/BadRequestError" } } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FailedResponse" }, "examples": { "UnauthorizedAccessError": { "$ref": "#/components/examples/ErrorBodyUnauthorized" }, "ErrorBodyAccessDenied": { "$ref": "#/components/examples/ErrorBodyAccessDenied" } } } } }, "403": { "description": "Forbidden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FailedResponse" }, "examples": { "ErrorBodyForbidden": { "$ref": "#/components/examples/ErrorBodyForbidden" }, "ErrorBodyAPIKeyInvalid": { "$ref": "#/components/examples/ErrorBodyAPIKeyInvalid" }, "UserNotEntitledError": { "$ref": "#/components/examples/UserNotEntitledError" }, "QuotaExceededError": { "$ref": "#/components/examples/QuotaExceededError" }, "UserProfileDeniedError": { "$ref": "#/components/examples/UserProfileDeniedError" }, "UserBlockedError": { "$ref": "#/components/examples/UserBlockedError" }, "InvalidSubscriptionError": { "$ref": "#/components/examples/InvalidSubscriptionError" }, "ViolationError": { "$ref": "#/components/examples/ViolationError" }, "TasteExhaustedError": { "$ref": "#/components/examples/TasteExhaustedError" }, "AccessError": { "$ref": "#/components/examples/AccessError" } } } } }, "422": { "description": "Unprocessable Entity.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FailedResponse" }, "examples": { "InvalidInputErrorExample": { "$ref": "#/components/examples/InvalidInputErrorExample" }, "MissingInputFileUrlErrorExample": { "$ref": "#/components/examples/MissingInputFileUrlErrorExample" }, "InvalidInputUrlErrorExample": { "$ref": "#/components/examples/InvalidInputUrlErrorExample" }, "InputFileFormatValidationErrorExample": { "$ref": "#/components/examples/InputFileFormatValidationErrorExample" }, "MissingScriptErrorExample": { "$ref": "#/components/examples/MissingScriptErrorExample" }, "EmptyTextForScriptErrorExample": { "$ref": "#/components/examples/EmptyTextForScriptErrorExample" }, "TextLengthExceededForScriptErrorExample": { "$ref": "#/components/examples/TextLengthExceededForScriptErrorExample" }, "TextLengthTooShortForScriptErrorExample": { "$ref": "#/components/examples/TextLengthTooShortForScriptErrorExample" }, "ScriptInvalidASCIIRange": { "$ref": "#/components/examples/ScriptInvalidASCIIRange" }, "ScriptInvalidTextSupportedRange": { "$ref": "#/components/examples/ScriptInvalidTextSupportedRange" }, "InvalidOrMissingLocaleCodeForScriptErrorExample": { "$ref": "#/components/examples/InvalidOrMissingLocaleCodeForScriptErrorExample" }, "MissingMediaTypeForScriptErrorExample": { "$ref": "#/components/examples/MissingMediaTypeForScriptErrorExample" }, "MissingSourceLocaleErrorExample": { "$ref": "#/components/examples/MissingSourceLocaleErrorExample" }, "SourceUrlSourceTextConflictErrorExample": { "$ref": "#/components/examples/SourceUrlSourceTextConflictErrorExample" }, "UnsupportedVoiceIdErrorExample": { "$ref": "#/components/examples/UnsupportedVoiceIdErrorExample" }, "MissingVoiceIdErrorExample": { "$ref": "#/components/examples/MissingVoiceIdErrorExample" }, "MissingOutputErrorExample": { "$ref": "#/components/examples/MissingOutputErrorExample" }, "MissingMediaTypeForOutputErrorExample": { "$ref": "#/components/examples/MissingMediaTypeForOutputErrorExample" }, "InvalidOutputFileFormatErrorExample": { "$ref": "#/components/examples/InvalidOutputFileFormatErrorExample" }, "InvalidRequestPayloadErrorExample": { "$ref": "#/components/examples/InvalidRequestPayloadErrorExample" }, "InputScriptAudioConflictErrorExample": { "$ref": "#/components/examples/InputScriptAudioConflictErrorExample" }, "InputScriptAudioMissingErrorExample": { "$ref": "#/components/examples/InputScriptAudioMissingErrorExample" }, "InputScriptAudioMissingOrInvalidErrorExample": { "$ref": "#/components/examples/InputScriptAudioMissingOrInvalidErrorExample" }, "InvalidOrMissingAudioUrlErrorExample": { "$ref": "#/components/examples/InvalidOrMissingAudioUrlErrorExample" }, "MissingAudioSourceErrorExample": { "$ref": "#/components/examples/MissingAudioSourceErrorExample" }, "MissingAvatarIdErrorExample": { "$ref": "#/components/examples/MissingAvatarIdErrorExample" }, "UnsupportedAvatarIdErrorExample": { "$ref": "#/components/examples/UnsupportedAvatarIdErrorExample" }, "MissingBackgroundUrlErrorExample": { "$ref": "#/components/examples/MissingBackgroundUrlErrorExample" }, "MissingBackgroundTypeErrorExample": { "$ref": "#/components/examples/MissingBackgroundTypeErrorExample" }, "InvalidBackgroundUrlErrorExample": { "$ref": "#/components/examples/InvalidBackgroundUrlErrorExample" }, "BackgroundSourceColorConflictErrorExample": { "$ref": "#/components/examples/BackgroundSourceColorConflictErrorExample" }, "BackgroundSourceColorMissingErrorExample": { "$ref": "#/components/examples/BackgroundSourceColorMissingErrorExample" }, "InvalidBackgroundColorErrorExample": { "$ref": "#/components/examples/InvalidBackgroundColorErrorExample" }, "MissingBackgroundColorErrorExample": { "$ref": "#/components/examples/MissingBackgroundColorErrorExample" }, "BackgroundIncompatibleWithFormat": { "$ref": "#/components/examples/BackgroundIncompatibleWithFormat" }, "FormatIncompatibleWithBackground": { "$ref": "#/components/examples/FormatIncompatibleWithBackground" }, "UnsupportedOutputResolution": { "$ref": "#/components/examples/UnsupportedOutputResolution" }, "UnsupportedShotTypeErrorExample": { "$ref": "#/components/examples/UnsupportedShotTypeErrorExample" }, "InvalidSourceUrlErrorExample": { "$ref": "#/components/examples/InvalidSourceUrlErrorExample" }, "IncorrectVoiceNameErrorExample": { "$ref": "#/components/examples/IncorrectVoiceNameErrorExample" }, "MediatypeIncompatibleForText": { "$ref": "#/components/examples/MediatypeIncompatibleForText" }, "MISSING_PARAMS_IN_CROP_AREA": { "$ref": "#/components/examples/MISSING_PARAMS_IN_CROP_AREA" }, "INVALID_CROP_AREA_PARAMS": { "$ref": "#/components/examples/INVALID_CROP_AREA_PARAMS" }, "CROP_AREA_ASPECT_RATIO_NOT_SUPPORTED": { "$ref": "#/components/examples/CROP_AREA_ASPECT_RATIO_NOT_SUPPORTED" }, "StatusAPIFailedBackgroundFileResponse": { "$ref": "#/components/examples/StatusAPIFailedBackgroundFileResponse" }, "CROP_AREA_UNSUPPORTED_FOR_NON_IMAGE_VIDEO_BACKGROUND": { "$ref": "#/components/examples/CROP_AREA_UNSUPPORTED_FOR_NON_IMAGE_VIDEO_BACKGROUND" } } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FailedResponse" }, "examples": { "ErrorBodyTooManyRequests": { "$ref": "#/components/examples/ErrorBodyTooManyRequests" }, "ErrorBodyRateLimited": { "$ref": "#/components/examples/ErrorBodyRateLimited" } } } } }, "451": { "description": "Unavailable For Legal Reasons", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FailedResponse" }, "examples": { "ErrorBodyLegalReasons": { "$ref": "#/components/examples/ErrorBodyLegalReasons" } } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FailedResponse" }, "examples": { "TTSServiceSubmitError": { "$ref": "#/components/examples/TTSServiceSubmitError" }, "TTSEntityCreationError": { "$ref": "#/components/examples/TTSEntityCreationError" }, "TTSRuntimeError": { "$ref": "#/components/examples/TTSRuntimeError" } } } } } } } } }, "components": { "parameters": { "XRequestIdHeader": { "name": "x-request-id", "in": "header", "required": false, "description": "GUID, unique per request. Auto-generated if not provided.", "schema": { "type": "string", "format": "uuid", "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" } } }, "securitySchemes": { "AccessToken": { "type": "http", "scheme": "bearer", "description": "The Adobe-generated access token, S2S format." }, "X-Api-Key": { "type": "apiKey", "name": "x-api-key", "in": "header", "description": "The client ID for authentication." } }, "schemas": { "SuccessfulVoicesResponse": { "type": "object", "description": "List of available voices.", "properties": { "voices": { "type": "array", "items": { "$ref": "#/components/schemas/VoiceEntity" } } } }, "VoiceEntity": { "type": "object", "description": "Details of Voice Entity.", "properties": { "voiceId": { "type": "string", "description": "The unique ID for the voice." }, "displayName": { "type": "string", "description": "The displayed name for the voice." }, "gender": { "type": "string", "description": "The gender of the voice." }, "style": { "type": "string", "description": "The speaking style of the voice.", "enum": [ "Casual", "Excited" ] }, "voiceType": { "type": "string", "description": "Not applicable at this time." }, "status": { "type": "string", "description": "This determines if the specific voice ID is available for use. Deprecated voices will have an Inactive status.", "enum": [ "Active", "Inactive" ] }, "extendedPropertyMap": { "type": "object", "description": "This is a field for any additional properties for the voice." }, "wordsPerMinute": { "type": "string", "description": "The speed of speaking, in words per minute." }, "rolePlayList": { "type": "array", "description": "Not applicable at this time.", "items": { "type": "string" } }, "sampleURL": { "type": "string", "description": "A pre-signed URL for downloading the sample audio." } } }, "SuccessfulAvatarsResponse": { "type": "object", "description": "List of available avatars.", "properties": { "avatars": { "type": "array", "items": { "$ref": "#/components/schemas/AvatarEntity" } } } }, "AvatarEntity": { "type": "object", "description": "Details of the avatar entity.", "properties": { "avatarId": { "type": "string", "description": "The unique ID for the avatar." }, "displayName": { "type": "string", "description": "The displayed name for the avatar." }, "gender": { "type": "string", "description": "The gender of the avatar." }, "clothingStyle": { "type": "string", "description": "The clothing style worn by the avatar.", "enum": [ "Casual", "Formal", "Professional" ] }, "ageGroup": { "type": "string", "description": "The intended age bracket of the avatar.", "enum": [ "Young Adult", "Middle Aged", "Senior" ] }, "ethnicity": { "type": "string", "description": "The ethnicity of the avatar." }, "style": { "type": "string", "description": "This property is used when the avatar wears a professional or region-specific costume (like Nurse, Doctor, Emergency Worker, Retail Worker, etc.)." }, "status": { "type": "string", "description": "This determines if the specific avatar ID is available for use. Deprecated avatars will have an Inactive status.", "enum": [ "Active", "Inactive" ] }, "extendedPropertyMap": { "type": "object", "properties": { "aspectRatio": { "type": "object", "properties": { "x": { "type": "integer" }, "y": { "type": "integer" } } }, "resolution": { "type": "object", "properties": { "width": { "type": "integer" }, "height": { "type": "integer" } } } }, "description": "This is a field for any additional properties for the avatar." }, "thumbnailUrls": { "type": "object", "properties": { "hd": { "type": "string", "description": "A pre-signed URL for downloading the high-resolution avatar thumbnail." }, "lowRes": { "type": "string", "description": "A pre-signed URL for downloading the low-resolution avatar thumbnail." } } }, "voiceId": { "type": "string", "description": "The unique ID for the voice." }, "sampleVideo": { "type": "object", "properties": { "webm": { "type": "string", "description": "A pre-signed URL for downloading avatar sample video in WEBM format." }, "mp4": { "type": "string", "description": "A pre-signed URL for downloading avatar sample video in MP4 format." } } } } }, "SupportedLanguageCode": { "type": "string", "enum": [ "en-US", "es-ES", "de-DE", "fr-FR", "da-DK", "en-GB", "en-IN", "es-419", "es-AR", "fr-CA", "hi-IN", "it-IT", "ja-JP", "ko-KR", "nb-NO", "pt-BR", "pt-PT", "nl-NL", "zh-CN", "sv-SE" ], "description": "The language code for the supported language desired in the result." }, "SupportedAudioOutputAudioFormat": { "type": "string", "enum": [ "audio/wav" ], "description": "The supported audio format for output." }, "SupportedOutputVideoFormat": { "type": "string", "enum": [ "video/mp4" ], "description": "The supported video format for background video for Avatar." }, "SupportedBackgroundType": { "type": "string", "enum": [ "color", "video", "image" ], "description": "Supported background type for output Avatar video." }, "TTSRequest": { "$ref": "#/components/schemas/GenerateSpeechUsingPlainText" }, "GenerateSpeechUsingPlainText": { "type": "object", "properties": { "script": { "oneOf": [ { "$ref": "#/components/schemas/TextSource" }, { "$ref": "#/components/schemas/URLSource" } ], "type": "object", "properties": { "localeCode": { "$ref": "#/components/schemas/SupportedLanguageCode" }, "mediaType": { "type": "string", "enum": [ "text/plain" ], "description": "The format of the text resource." } }, "required": [ "localeCode", "mediaType" ] }, "voiceId": { "type": "string", "description": "ID of the voice to use from the catalog of voices." }, "output": { "type": "object", "properties": { "mediaType": { "$ref": "#/components/schemas/SupportedAudioOutputAudioFormat" } }, "required": [ "mediaType" ] } }, "required": [ "voiceId", "output", "script" ] }, "AvatarRequest": { "type": "object", "oneOf": [ { "$ref": "#/components/schemas/GenerateAvatarUsingPlainText" }, { "$ref": "#/components/schemas/GenerateAvatarUsingAudioFile" } ] }, "GenerateAvatarUsingPlainText": { "title": "Using Plain Text", "type": "object", "properties": { "script": { "oneOf": [ { "$ref": "#/components/schemas/TextSource" }, { "$ref": "#/components/schemas/URLSource" } ], "type": "object", "properties": { "localeCode": { "$ref": "#/components/schemas/SupportedLanguageCode" }, "mediaType": { "type": "string", "enum": [ "text/plain" ], "description": "The format of the text resource." } }, "required": [ "localeCode", "mediaType" ] }, "voiceId": { "type": "string", "description": "ID of the voice to use from the catalog of voices." }, "avatarId": { "type": "string", "description": "ID of the avatar to use from the catalog of avatars." }, "output": { "$ref": "#/components/schemas/AvatarOutputObject" } }, "required": [ "voiceId", "output", "script", "avatarId" ] }, "GenerateAvatarUsingAudioFile": { "title": "Using Audio File", "type": "object", "properties": { "audio": { "type": "object", "properties": { "source": { "$ref": "#/components/schemas/URLObject" }, "mediaType": { "type": "string", "enum": [ "audio/wav" ] }, "localeCode": { "$ref": "#/components/schemas/SupportedLanguageCode" } }, "required": [ "localeCode", "mediaType", "source" ] }, "avatarId": { "type": "string", "description": "ID of the avatar to use from the catalog of avatars." }, "output": { "$ref": "#/components/schemas/AvatarOutputObject" } }, "required": [ "output", "audio", "avatarId" ] }, "URLSource": { "type": "object", "title": "Image or video background", "properties": { "source": { "type": "object", "properties": { "url": { "type": "string", "format": "uri", "description": "The pre-signed URL pointing to the resource to be used for avatar/speech generation." } }, "description": "Details of the source including a pre-signed URL. See the [list of allowed domains for storage](https://developer.adobe.com/audio-video-firefly-services/getting-started/storage-solutions/)." } } }, "URLObject": { "type": "object", "description": "URL object containing a pre-signed URL. See the [list of allowed domains for storage](https://developer.adobe.com/audio-video-firefly-services/getting-started/storage-solutions/).", "properties": { "url": { "type": "string", "format": "uri", "description": "The pre-signed URL pointing to the resource to be used for avatar/speech generation." } } }, "AvatarOutputObject": { "type": "object", "description": "Output configuration for avatar video generation.", "properties": { "mediaType": { "$ref": "#/components/schemas/SupportedOutputVideoFormat" }, "background": { "oneOf": [ { "$ref": "#/components/schemas/OutputColor" }, { "$ref": "#/components/schemas/URLSource" } ], "type": "object", "properties": { "type": { "$ref": "#/components/schemas/SupportedBackgroundType" } } }, "resolution": { "type": "object", "properties": { "width": { "type": "string" }, "height": { "type": "string" } } } }, "required": [ "mediaType" ] }, "TextSource": { "description": "Details of the text resource.", "type": "string", "properties": { "text": { "type": "string" } } }, "OutputColor": { "type": "string", "title": "Color background", "description": "Color specification for avatar background.", "properties": { "color": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$", "description": "Color code for the background of the output. This should be a six digit hexadecimal value." } } }, "SubmitAPIResponse": { "type": "object", "description": "Response returned when a job is successfully submitted.", "properties": { "jobId": { "type": "string" }, "statusUrl": { "type": "string" } } }, "StatusAPIResponse": { "type": "object", "description": "Response object for job status queries.", "oneOf": [ { "$ref": "#/components/schemas/StatusAPIInprogressResponse" }, { "$ref": "#/components/schemas/StatusAPICompletedResponse" }, { "$ref": "#/components/schemas/StatusAPIFailedResponse" }, { "$ref": "#/components/schemas/JobStatus" } ] }, "StatusAPIResponseStatus": { "type": "string", "enum": [ "pending", "running", "failed", "succeeded" ], "description": "Status of the job." }, "StatusAPIInprogressResponse": { "type": "object", "properties": { "jobId": { "type": "string" }, "status": { "$ref": "#/components/schemas/StatusAPIResponseStatus" } } }, "StatusAPICompletedResponse": { "type": "object", "properties": { "jobId": { "type": "string" }, "status": { "$ref": "#/components/schemas/StatusAPIResponseStatus" }, "output": { "type": "object", "properties": { "destination": { "$ref": "#/components/schemas/Destination" } } } } }, "StatusAPIFailedResponse": { "type": "object", "description": "Response object for failed jobs.", "properties": { "status": { "$ref": "#/components/schemas/StatusAPIResponseStatus" }, "jobId": { "type": "string" }, "error_code": { "type": "string" }, "message": { "type": "string" } } }, "FailedResponse": { "type": "object", "description": "Generic error response object.", "properties": { "error_code": { "type": "string" }, "message": { "type": "string" } } }, "ErrorResponse": { "type": "object", "required": [ "error_code", "message" ], "properties": { "error_code": { "type": "string", "description": "The error code returned with the response." }, "message": { "type": "string", "description": "The error message returned with the response." }, "messageId": { "type": "string", "description": "The error message ID returned with the response." } } }, "TemplateDescribeRequest": { "type": "object", "required": [ "source" ], "properties": { "type": { "type": "string", "enum": [ "mogrt", "aep" ], "default": "mogrt", "description": "Input template type. Use `mogrt` for a Motion Graphics Template or `aep` for an After Effects project. Defaults to `mogrt` when omitted." }, "source": { "type": "object", "required": [ "url" ], "properties": { "url": { "type": "string", "format": "uri", "description": "A pre-signed URL pointing to the input template file. For `mogrt`, this is a `.mogrt` file. For `aep`, this is a `.zip` archive containing exactly one `.aep` project file together with its collected footage and assets." } }, "description": "Contains metadata about the source of the input template." }, "compName": { "type": "string", "description": "Name of the After Effects composition to describe. Required when `type` is `aep`; not applicable to `mogrt`. This composition name within the AEP project must be unique so that `compName` resolves to a single composition." } }, "if": { "properties": { "type": { "const": "aep" } }, "required": [ "type" ] }, "then": { "required": [ "source", "compName" ] } }, "TemplateDescribeResponse": { "type": "object", "required": [ "jobId", "statusUrl" ], "properties": { "jobId": { "type": "string", "description": "Unique identifier for the describe job." }, "statusUrl": { "type": "string", "format": "uri", "description": "URL to poll for the status of the describe job." } } }, "PresetItem": { "type": "object", "properties": { "presetId": { "type": "string", "description": "Unique identifier for the preset." }, "label": { "type": "string", "description": "Human-readable label for the preset." }, "mediaType": { "type": "string", "description": "MIME type of the output media (e.g., video/mp4)." }, "codec": { "type": "string", "description": "Video codec used (e.g., H.264)." }, "profile": { "type": "string", "description": "Codec profile (e.g., high)." }, "maxFps": { "type": "object", "required": [ "numerator", "denominator" ], "properties": { "numerator": { "type": "integer", "description": "Frames-per-second numerator." }, "denominator": { "type": "integer", "description": "Frames-per-second denominator." } }, "description": "Maximum frames per second as a fraction." }, "bitrateMode": { "type": "string", "description": "Bitrate mode (e.g., vbr, cbr)." }, "targetBitrateInKbps": { "type": "integer", "description": "Target bitrate in kilobits per second." }, "maxBitrateInKbps": { "type": "integer", "description": "Maximum bitrate in kilobits per second." }, "alpha": { "type": "boolean", "description": "Whether the preset supports alpha channel." }, "primaryUsage": { "type": "string", "description": "Primary use case for this preset." } }, "required": [ "presetId", "label", "mediaType", "codec", "maxFps", "bitrateMode", "alpha", "primaryUsage" ] }, "PresetsResponse": { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/PresetItem" } } }, "required": [ "items" ] }, "TemplateRenderRequest": { "type": "object", "required": [ "source", "variations" ], "properties": { "type": { "type": "string", "enum": [ "mogrt", "aep" ], "default": "mogrt", "description": "Input template type. Use `mogrt` for a Motion Graphics Template or `aep` for an After Effects project. Defaults to `mogrt` when omitted." }, "source": { "type": "object", "required": [ "url" ], "properties": { "url": { "type": "string", "format": "uri", "description": "A pre-signed URL pointing to the input template file. For `mogrt`, this is a `.mogrt` file. For `aep`, this is a `.zip` archive containing exactly one `.aep` project file together with its collected footage and assets." } }, "description": "Contains metadata about the source of the input template." }, "compName": { "type": "string", "description": "Name of the After Effects composition to render. Required when `type` is `aep`; not applicable to `mogrt`. This composition name within the AEP project must be unique so that `compName` resolves to a single composition." }, "fonts": { "type": "array", "description": "Array of fonts to be used in the template.", "items": { "type": "object", "required": [ "name", "source" ], "properties": { "name": { "type": "string", "description": "PostScript name of the font." }, "source": { "type": "object", "required": [ "url" ], "properties": { "url": { "type": "string", "format": "uri", "description": "Pre-signed URL for the font file (.ttf/.otf)." } } } } } }, "config": { "type": "object", "description": "Configuration options for the render request.", "properties": { "handleMissingFonts": { "type": "string", "enum": [ "fail", "use_default" ], "default": "use_default", "description": "How to handle missing fonts. 'fail' will cause the render to fail; 'use_default' will use Premiere Pro fallback behavior." }, "sidecar": { "type": "string", "enum": [ "aep" ], "description": "Optional. Applicable only when `type` is `aep`. Set to `aep` to also produce the collected After Effects project (a self-contained archive of the `.aep` file and its footage), returned as `sidecarDestination` on each output. Not supported for `mogrt` renders." } } }, "assets": { "type": "array", "description": "Array of image, video, or audio assets referenced by variations via assetIndex.", "items": { "type": "object", "required": [ "source" ], "properties": { "source": { "type": "object", "required": [ "url" ], "properties": { "url": { "type": "string", "format": "uri", "description": "Pre-signed URL for the image, video, or audio asset." } } } } } }, "presets": { "type": "array", "description": "Array of export presets. Each item is either a built-in preset (by presetId) or a custom preset (by URL). Outputs reference presets by presetIndex.", "items": { "type": "object", "required": [ "source" ], "properties": { "source": { "type": "object", "properties": { "presetId": { "type": "string", "description": "ID of a built-in preset from the presets endpoint." }, "url": { "type": "string", "format": "uri", "description": "Pre-signed URL for a custom Encoder preset file." } } } } } }, "variations": { "type": "array", "description": "List of variations. Each variation contains variable overrides applied to the template.", "minItems": 1, "items": { "type": "object", "required": [ "variables" ], "properties": { "variables": { "type": "array", "description": "Variable overrides for this variation. Each object targets one template variable by variableId and supplies the override value.", "items": { "type": "object", "required": [ "variableId" ], "properties": { "variableId": { "type": "string", "description": "Unique identifier for the template variable, taken verbatim from the describe response. For AEP, this is the composite ID of a control (for example `c259:l261:media` for a media control or `c169:l193:layer:sourceText` for a text control)." }, "selectedCheckboxValue": { "type": "boolean", "description": "Override for checkbox controls." }, "selectedDropdownValue": { "type": "string", "description": "Override for dropdown controls." }, "selectedSliderValue": { "type": "number", "description": "Override for slider controls." }, "text": { "type": "string", "description": "Override for text controls." }, "fontName": { "type": "string", "description": "PostScript font name for text controls." }, "assetIndex": { "type": "integer", "description": "Index into the assets array for media or audio controls." }, "scale": { "type": "string", "enum": [ "no_scale", "fit_to_frame", "stretch_to_fill", "fill_frame" ], "description": "Scaling behavior for media controls." }, "audioPreference": { "type": "string", "enum": [ "replace", "mix" ], "description": "Audio preference for audio controls." } } } } } } }, "layerOperations": { "type": "array", "description": "Layer-level timing operations applied after variable overrides, in array order. Applicable only when `type` is `aep`; ignored for `mogrt`. Each operation targets a layer by its `layerId` (the `layers[].id` value from the describe response, of the form `c{comp}:l{layer}:layer`). The exact field set depends on `operation`; see the Render guide for the per-operation field reference.", "items": { "type": "object", "required": [ "operation" ], "properties": { "operation": { "type": "string", "enum": [ "trim_comp", "trim_inpoint", "trim_outpoint", "shift_inpoint", "shift_outpoint", "match_source_duration", "set_layer_duration", "stretch_layer", "enable_layer" ], "description": "The layer operation to perform." }, "layerId": { "type": "string", "description": "Target layer ID (`c{comp}:l{layer}:layer`). Used by all operations except `trim_comp`." }, "refLayerId": { "type": "string", "description": "Reference layer for `shift_inpoint`, `shift_outpoint`, `trim_inpoint`, and `trim_outpoint` (its in/out time, selected by `refInOut`, anchors the move) and for `stretch_layer` (its duration becomes the target duration when no `duration*` field is provided)." }, "refInOut": { "type": "string", "enum": [ "in", "out" ], "description": "Which end of `refLayerId` to read as the reference time." }, "startLayerId": { "type": "string", "description": "For `trim_comp`, the layer whose in point sets the start of the comp." }, "endLayerId": { "type": "string", "description": "For `trim_comp`, the layer whose out point sets the end of the comp." }, "startSeconds": { "type": "number", "description": "For `trim_comp`, the absolute start time of the comp, in seconds." }, "startFrames": { "type": "integer", "description": "For `trim_comp`, the absolute start time of the comp, in frames." }, "offsetSeconds": { "type": "number", "description": "Offset added to the resolved reference time (`shift_*`, `trim_*`) or target duration (`stretch_layer`), in seconds. Takes precedence over `offsetFrames`." }, "offsetFrames": { "type": "integer", "description": "Offset added to the resolved reference time (`shift_*`, `trim_*`) or target duration (`stretch_layer`), in frames. Used only when `offsetSeconds` is absent." }, "durationSeconds": { "type": "number", "description": "Duration in seconds for `set_layer_duration` and `stretch_layer`, or the comp duration for `trim_comp`. Takes precedence over `durationFrames`." }, "durationFrames": { "type": "integer", "description": "Duration in frames for `set_layer_duration` and `stretch_layer`, or the comp duration for `trim_comp`. Used only when `durationSeconds` is absent." }, "durationPercent": { "type": "number", "description": "For `stretch_layer`, the target duration as a percentage of the layer's native duration. Highest priority of the `stretch_layer` duration inputs: `durationPercent` > `durationSeconds` > `durationFrames` > `refLayerId`." }, "videoEnabled": { "type": "boolean", "description": "For `enable_layer`, turns the target layer's video (visuals) on or off. Optional; each `enable_layer` operation must set at least one of `videoEnabled`, `audioEnabled`, or `solo`." }, "audioEnabled": { "type": "boolean", "description": "For `enable_layer`, turns the target layer's audio on or off. Optional; each `enable_layer` operation must set at least one of `videoEnabled`, `audioEnabled`, or `solo`." }, "solo": { "type": "boolean", "description": "For `enable_layer`, solos the target layer within its comp; only solo-enabled layers will render. A comp with solo-enabled layers will render against transparency or the comp's background color setting, depending on the render output format. To render audio-only to a video output format, solo an invisible video layer (such as a null) in addition to any solo-enabled audio layers; this is not necessary when rendering to an audio output format. Optional; each `enable_layer` operation must set at least one of `videoEnabled`, `audioEnabled`, or `solo`. If `videoEnabled` and `audioEnabled` are both false for a layer, solo cannot be applied to it." } } } }, "outputs": { "type": "array", "description": "Defines which variation and preset combinations to render and optional output file names.", "items": { "type": "object", "required": [ "variationIndex", "presetIndex" ], "properties": { "variationIndex": { "type": "integer", "description": "Zero-based index of the variation to render." }, "presetIndex": { "type": "integer", "description": "Zero-based index of the preset in the presets array." }, "fileName": { "type": "string", "description": "Optional custom file name for the output." }, "destination": { "type": "string", "description": "A pre-signed URL destination for the video output." } } } } }, "if": { "properties": { "type": { "const": "aep" } }, "required": [ "type" ] }, "then": { "required": [ "source", "variations", "compName" ] } }, "TemplateRenderResponse": { "type": "object", "required": [ "jobId", "statusUrl" ], "properties": { "jobId": { "type": "string", "description": "Unique identifier for the render job." }, "statusUrl": { "type": "string", "format": "uri", "description": "URL to poll for the status of the rendering job." }, "cancelUrl": { "type": "string", "format": "uri", "description": "URL to cancel the rendering job." } } }, "JobStatus": { "type": "object", "required": [ "jobId", "status" ], "properties": { "jobId": { "type": "string", "description": "ID of the render job." }, "status": { "type": "string", "enum": [ "not_started", "running", "canceling", "canceled", "succeeded", "failed", "partially_succeeded" ], "description": "Current status of the job. `canceling` is a transient state between a `PUT /v1/cancel/{jobId}` call and the worker fully stopping; `canceled` is the terminal state once stopped. **Note:** `canceling` and `canceled` apply only to render jobs submitted via `POST /v1/templates/render`." }, "message": { "type": "string", "description": "Error message when job status is failed." }, "percentCompleted": { "type": "string", "description": "Percentage of job completed, as a string." }, "outputs": { "type": "array", "description": "Array of output files with destination URLs, keyed by variation and preset indices.", "items": { "type": "object", "required": [ "variationIndex", "presetIndex", "destination" ], "properties": { "variationIndex": { "type": "integer", "description": "Zero-based index of the variation that was rendered." }, "presetIndex": { "type": "integer", "description": "Zero-based index of the preset that was used for rendering." }, "destination": { "type": "object", "required": [ "url" ], "properties": { "url": { "type": "string", "format": "uri", "description": "URL from which the rendered video can be downloaded." } } }, "sidecarDestination": { "type": "object", "required": [ "url" ], "properties": { "url": { "type": "string", "format": "uri", "description": "URL from which the collected After Effects project archive can be downloaded. Present only when `config.sidecar` was set to `aep`." } } }, "startedDate": { "type": "string", "format": "date-time", "description": "ISO 8601 date-time when this output item started rendering. Present only for render jobs (`POST /v1/templates/render`)." }, "completedDate": { "type": "string", "format": "date-time", "description": "ISO 8601 date-time when this output item finished rendering. Present only for render jobs (`POST /v1/templates/render`)." } } } }, "errors": { "type": "array", "description": "Array of errors for failed variations (only present when status is partially_succeeded).", "items": { "type": "object", "required": [ "variationIndex", "presetIndex", "error" ], "properties": { "variationIndex": { "type": "integer", "description": "Zero-based index of the variation that failed." }, "presetIndex": { "type": "integer", "description": "Zero-based index of the preset that was used for the failed variation." }, "error": { "type": "object", "required": [ "error_code", "message" ], "properties": { "error_code": { "type": "string", "description": "Error code for the failure." }, "message": { "type": "string", "description": "Error message describing the failure." } } }, "startedDate": { "type": "string", "format": "date-time", "description": "ISO 8601 date-time when this item started processing. Present only for render jobs (`POST /v1/templates/render`)." }, "completedDate": { "type": "string", "format": "date-time", "description": "ISO 8601 date-time when this item reached a terminal failure state. Present only for render jobs (`POST /v1/templates/render`)." } } } }, "createdDate": { "type": "string", "format": "date-time", "description": "ISO 8601 date-time when the job was submitted. Present only for render jobs (`POST /v1/templates/render`)." }, "totalJobItems": { "type": "integer", "description": "Total number of output items (variation × preset combinations) in this render job. Present once the job has been dispatched to workers. Applies only to render jobs (`POST /v1/templates/render`)." }, "retryPayloadUrl": { "type": "string", "format": "uri", "description": "Pre-built retry payload URL containing only the failed items. Present only when `status` is `partially_succeeded`. Applies only to render jobs (`POST /v1/templates/render`)." }, "output": { "type": "object", "description": "Output for describe API jobs.", "properties": { "fonts": { "type": "array", "description": "Array of fonts from the template.", "items": { "type": "object", "properties": { "name": { "type": "string", "description": "PostScript name of the font." }, "uploadRequired": { "type": "boolean", "description": "Whether the font needs to be uploaded in the render request." } }, "required": [ "name" ] } }, "elements": { "type": "array", "description": "Array of elements from the template.", "items": { "type": "object", "required": [ "type", "controls" ], "properties": { "id": { "type": "string", "description": "Unique identifier for the element." }, "type": { "type": "string", "enum": [ "mogrt", "aep" ], "description": "Type of the element." }, "controls": { "type": "array", "description": "Array of controls from the template.", "items": { "type": "object", "properties": { "variableId": { "type": "string", "description": "Unique identifier for the template variable." }, "id": { "type": "string", "description": "Unique identifier for the control." }, "label": { "type": "string", "description": "Human-readable label for the control." }, "type": { "type": "string", "enum": [ "text", "media", "dropdown", "checkbox", "slider", "audio", "comment" ], "description": "Type of the control." }, "defaultData": { "type": "object", "description": "Default or current values for the control (e.g., text, fontName, selectedCheckboxValue, selectedDropdownValue, selectedSliderValue, scale)." }, "data": { "type": "object", "description": "Data associated with the control." }, "options": { "description": "Available options (object for dropdown; array for checkbox)." }, "range": { "type": "object", "description": "Minimum and maximum values for slider controls.", "properties": { "minimum": { "type": "number" }, "maximum": { "type": "number" } } }, "size": { "type": "object", "description": "Dimensions for media controls.", "properties": { "width": { "type": "integer" }, "height": { "type": "integer" } } }, "possibleScaleValues": { "type": "array", "items": { "type": "string" }, "description": "Possible scale values for media controls." }, "durationInSeconds": { "type": "number", "description": "Duration in seconds for audio controls." }, "possibleAudioPreferences": { "type": "array", "items": { "type": "string" }, "description": "Possible audio preferences (e.g., replace, mix) for audio controls." }, "text": { "type": "string", "description": "Comment text for comment controls." } } } }, "layers": { "type": "array", "description": "Layers of the described AEP composition, in render order (top-to-bottom). Present only for `aep` elements. Use a layer's composite `id` as the `layerId` in render `layerOperations`.", "items": { "type": "object", "properties": { "id": { "type": "string", "description": "Composite ID of the form `c{comp}:l{layer}:layer`." }, "name": { "type": "string", "description": "Layer name as displayed in After Effects." }, "compName": { "type": "string", "description": "Name of the composition that contains the layer." } } } } } } } } } } }, "Overlay": { "type": "object", "properties": { "mediaType": { "type": "string", "enum": [ "image/gif", "image/png", "image/jpeg" ], "description": "The media type of the overlay." }, "source": { "type": "object", "properties": { "url": { "type": "string", "format": "uri", "description": "The pre-signed URL pointing to the overlay source." } }, "required": [ "url" ], "description": "Details of the source including a pre-signed URL. See the [list of allowed domains for storage](https://developer.adobe.com/audio-video-firefly-services/getting-started/storage-solutions/)." }, "startTime": { "type": "string", "format": "timecode", "description": "The start time of the overlay in the video." }, "duration": { "type": "string", "format": "timecode", "description": "The duration of the overlay in the video." }, "scale": { "type": "object", "properties": { "width": { "type": "integer", "description": "The width of the overlay." }, "height": { "type": "integer", "description": "The height of the overlay." } }, "required": [ "width", "height" ], "description": "The scale of the overlay." }, "position": { "type": "object", "properties": { "anchorPoint": { "type": "string", "enum": [ "top_left", "top_right", "bottom_left", "bottom_right", "center" ], "description": "The anchor point of the overlay." }, "offsetX": { "type": "integer", "description": "The X offset of the overlay from the anchor point." }, "offsetY": { "type": "integer", "description": "The Y offset of the overlay from the anchor point." } }, "required": [ "anchorPoint", "offsetX", "offsetY" ], "description": "The position of the overlay." }, "repeat": { "type": "string", "enum": [ "loop", "once" ], "description": "The repeat behavior of the overlay." } }, "required": [ "mediaType", "source", "startTime", "duration", "scale", "position" ], "description": "Configuration for an overlay in the reframed video." }, "GenerateReframedVideoJobErrorBody": { "type": "object", "properties": { "error_code": { "type": "string", "description": "A code representing the specific error type." }, "message": { "type": "string", "description": "A description of the error that occurred." } }, "required": [ "error_code", "message" ], "description": "Error response for the reframed video job." }, "TranscribeRequest": { "type": "object", "oneOf": [ { "$ref": "#/components/schemas/TranscribeAudioInput" }, { "$ref": "#/components/schemas/TranscribeVideoInput" } ], "properties": { "targetLocaleCodes": { "type": "array", "description": "This determines the language used in the processed output. See the usage notes for more about [the supported languages](https://developer.adobe.com/audio-video-firefly-services/getting-started/usage/#language-support).", "items": { "$ref": "#/components/schemas/TargetLocaleCodes" } }, "captions": { "$ref": "#/components/schemas/Captions", "description": "Details to generate captions." } }, "description": "Transcribe request body." }, "TranscribeAudioInput": { "type": "object", "properties": { "audio": { "$ref": "#/components/schemas/AudioInput" } }, "required": [ "audio" ], "description": "The request body for transcribing audio." }, "TranscribeVideoInput": { "type": "object", "properties": { "video": { "$ref": "#/components/schemas/VideoInput" } }, "required": [ "video" ], "description": "The request body for transcribing video." }, "Captions": { "type": "object", "properties": { "targetFormats": { "type": "array", "items": { "$ref": "#/components/schemas/TargetCaptionFormats" }, "description": "Accepted values: ['SRT']" } } }, "Source": { "type": "object", "properties": { "url": { "type": "string", "format": "uri", "description": "The pre-signed URL pointing to the input source." } }, "required": [ "url" ], "description": "Source details including a pre-signed URL for accessing the input media. See the [list of allowed domains for storage](https://developer.adobe.com/audio-video-firefly-services/getting-started/storage-solutions/)." }, "Destination": { "type": "object", "properties": { "url": { "type": "string", "format": "uri", "description": "The pre-signed URL pointing to the output destination." } }, "required": [ "url" ], "description": "Destination details including a pre-signed URL for the output media." }, "DubRequest": { "type": "object", "oneOf": [ { "$ref": "#/components/schemas/DubAudioRequest" }, { "$ref": "#/components/schemas/DubVideoRequest" } ], "description": "The dub request body." }, "DubAudioRequest": { "type": "object", "title": "Audio dub request", "properties": { "targetLocaleCodes": { "type": "array", "items": { "$ref": "#/components/schemas/TargetLocaleCodes" }, "description": "This determines the language used in the processed output. See the usage notes for more about [the supported languages](https://developer.adobe.com/audio-video-firefly-services/getting-started/usage/#language-support)." }, "transcripts": { "type": "array", "items": { "$ref": "#/components/schemas/TranscriptInput" } }, "audio": { "$ref": "#/components/schemas/AudioInput" } }, "required": [ "audio" ], "description": "The audio dub request body." }, "DubVideoRequest": { "type": "object", "title": "Video dub request", "properties": { "targetLocaleCodes": { "type": "array", "items": { "$ref": "#/components/schemas/TargetLocaleCodes" }, "description": "This determines the language used in the processed output. See the usage notes for more about [the supported languages](https://developer.adobe.com/audio-video-firefly-services/getting-started/usage/#language-support)." }, "transcripts": { "type": "array", "items": { "$ref": "#/components/schemas/TranscriptInput" } }, "video": { "$ref": "#/components/schemas/VideoInput" }, "lipSync": { "type": "boolean", "description": "If `true`, a high-quality composited lip sync will be used in the video output.", "default": "false" } }, "required": [ "video" ], "description": "The video dub request body." }, "JobStatusLinkResponse": { "type": "object", "properties": { "statusUrl": { "type": "string", "description": "URL to download the results of the job." }, "jobId": { "type": "string", "description": "The job ID." } }, "required": [ "statusUrl", "jobId" ], "description": "Job status response." }, "FireflyJobApiResponseStatus": { "type": "string", "enum": [ "pending", "running", "failed", "succeeded" ], "description": "Status of the job." }, "FireflyJobResponse": { "type": "object", "description": "Firefly job response.", "oneOf": [ { "$ref": "#/components/schemas/FireflyJobApiResponse" }, { "$ref": "#/components/schemas/FireflyJobErrorResponse" } ] }, "FireflyJobApiResponse": { "type": "object", "description": "Firefly job success response.", "properties": { "status": { "$ref": "#/components/schemas/FireflyJobApiResponseStatus" }, "jobId": { "type": "string", "description": "Associated job ID." }, "outputs": { "description": "Job response details.", "type": "array", "items": { "oneOf": [ { "$ref": "#/components/schemas/DubJobResponse" }, { "$ref": "#/components/schemas/TranscribeOutput" } ] } } }, "required": [ "jobId", "status" ] }, "FireflyJobErrorResponse": { "type": "object", "description": "Firefly job error response.", "properties": { "status": { "$ref": "#/components/schemas/FireflyJobApiResponseStatus" }, "jobId": { "type": "string", "description": "Associated job ID." }, "message": { "type": "string", "description": "The error message." }, "error_code": { "type": "string", "description": "Associated error code." } }, "required": [ "jobId", "status" ] }, "ErrorBody": { "type": "object", "description": "The error response object.", "properties": { "message": { "type": "string", "description": "The error message." }, "error_code": { "type": "string", "description": "Associated error code." } }, "required": [ "error_code", "message" ] }, "TranscribeOutput": { "type": "array", "description": "Transcribe success response", "items": { "type": "object", "properties": { "destination": { "$ref": "#/components/schemas/Destination" }, "captions": { "$ref": "#/components/schemas/CaptionOutput" }, "localeCode": { "$ref": "#/components/schemas/TargetLocaleCodes" } } } }, "CaptionOutput": { "type": "array", "description": "Captions output", "items": { "type": "object", "properties": { "destination": { "$ref": "#/components/schemas/Destination" }, "format": { "type": "string", "$ref": "#/components/schemas/TargetCaptionFormats", "description": "Format of the caption" } } } }, "DubJobResponse": { "type": "object", "description": "Dubbing success response", "oneOf": [ { "$ref": "#/components/schemas/DubSuccess" }, { "$ref": "#/components/schemas/DubPartialFailure" } ] }, "DubSuccess": { "type": "object", "description": "Dubbing success", "properties": { "audioOutput": { "$ref": "#/components/schemas/AudioOutput" }, "videoOutput": { "$ref": "#/components/schemas/VideoOutput" }, "transcriptOutput": { "$ref": "#/components/schemas/TranscribeOutput" } } }, "AudioOutputMediaType": { "type": "string", "enum": [ "audio/wav" ], "description": "Media type of the audio output." }, "VideoOutputMediaType": { "type": "string", "enum": [ "video/mp4", "video/mov" ], "description": "Media type of the video output." }, "AudioOutput": { "type": "object", "description": "Audio output in dubbing response.", "properties": { "mediaType": { "$ref": "#/components/schemas/AudioOutputMediaType" }, "destination": { "$ref": "#/components/schemas/Destination" } } }, "VideoOutput": { "type": "object", "description": "Video output in dubbing response.", "properties": { "mediaType": { "$ref": "#/components/schemas/VideoOutputMediaType" }, "destination": { "$ref": "#/components/schemas/Destination" } } }, "DubPartialFailure": { "type": "object", "description": "Dubbing failure for specific language.", "properties": { "error": { "$ref": "#/components/schemas/ErrorBody" } } }, "TranscriptInput": { "type": "object", "properties": { "source": { "$ref": "#/components/schemas/Source", "description": "The pre-signed URL to download the translated/edited transcripts. See the [list of allowed domains for storage](https://developer.adobe.com/audio-video-firefly-services/getting-started/storage-solutions/)." } }, "required": [ "source" ], "description": "Transcript input details for a transcribe request." }, "TargetLocaleCodes": { "type": "string", "description": "Locale code for dubbing target.", "enum": [ "da-DK", "en-IN", "en-GB", "es-AR", "es-419", "fr-CA", "hi-IN", "ja-JP", "ko-KR", "nb-NO", "nl-NL", "pt-BR", "sv-SE", "zh-CN", "en-US", "es-ES", "de-DE", "fr-FR", "it-IT", "pt-PT" ] }, "TargetCaptionFormats": { "type": "string", "description": "Target caption format.", "enum": [ "SRT" ] }, "AudioInput": { "type": "object", "properties": { "source": { "$ref": "#/components/schemas/Source" }, "mediaType": { "$ref": "#/components/schemas/AudioInputMediaType" } }, "required": [ "url", "mediaType" ], "description": "The audio input details for a dub request." }, "VideoInput": { "type": "object", "properties": { "source": { "$ref": "#/components/schemas/Source" }, "mediaType": { "$ref": "#/components/schemas/VideoInputMediaType" }, "metadata": { "type": "object", "properties": { "dialogTrackNumber": { "type": "integer" } } } }, "required": [ "url", "mediaType" ], "description": "The video input details for a dub request." }, "AudioInputMediaType": { "type": "string", "description": "Media type of the audio input.", "enum": [ "audio/mp3", "audio/wav", "audio/mpeg", "audio/x-m4a", "audio/aac" ] }, "VideoInputMediaType": { "type": "string", "description": "Media type of the video input.", "enum": [ "video/mp4", "video/mov", "video/quicktime", "video/x-msvideo", "video/x-matroska" ] }, "VideoInputV2": { "type": "object", "properties": { "source": { "type": "object", "properties": { "url": { "type": "string", "format": "uri", "description": "The pre-signed URL pointing to the input source." } }, "required": [ "url" ], "description": "Details of the source including a pre-signed URL. See the [list of allowed domains for storage](https://developer.adobe.com/audio-video-firefly-services/getting-started/storage-solutions/)." } }, "required": [ "source" ], "description": "Video input details for generate reframed video request." }, "AnalysisV2": { "type": "object", "properties": { "sceneEditDetection": { "type": "boolean", "default": true, "description": "Applies scene edit detection before reframing." }, "focalPoints": { "type": "array", "items": { "type": "string", "maxLength": 1000, "pattern": "^[a-zA-Z0-9\\s\\-_]+$", "description": "Focal point keyword to utilize Semantic Subject Lock. Must be alphanumeric characters, spaces, hyphens, or underscores only. Maximum 1000 characters per keyword." }, "maxItems": 10, "description": "Array of focal point keyword identifiers for reframing. Up to 10 keywords are allowed. Keywords must be alphanumeric characters, spaces, hyphens, or underscores only, with a maximum of 1000 characters per keyword.", "default": [], "externalDocs": { "description": "See documentation for Semantic Subject Lock.", "url": "https://developer.adobe.com/reframev2/getting-started/semantic-search/" } } }, "description": "Analysis configuration for the video processing." }, "OverlayV2": { "type": "object", "properties": { "source": { "$ref": "#/components/schemas/Source" }, "startTime": { "type": "string", "format": "HH:MM:SS:FRAME_NUMBER", "description": "Start time for the overlay in the format HH:MM:SS:FF." }, "duration": { "type": "string", "format": "HH:MM:SS:FRAME_NUMBER", "description": "Duration of the overlay in the format HH:MM:SS:FF." }, "scale": { "$ref": "#/components/schemas/ScaleV2" }, "position": { "$ref": "#/components/schemas/PositionV2" }, "repeat": { "oneOf": [ { "type": "null" }, { "$ref": "#/components/schemas/RepeatV2" } ], "description": "Repeat behavior for GIF overlay (optional)." } } }, "PositionV2": { "type": "object", "description": "Position configuration for overlay placement.", "properties": { "anchorPoint": { "type": "string", "enum": [ "top_left", "top_right", "bottom_left", "bottom_right", "center" ], "description": "Anchor point for taking the position reference." }, "offsetX": { "type": [ "integer", "null" ], "description": "Horizontal offset for the anchor point." }, "offsetY": { "type": [ "integer", "null" ], "description": "Vertical offset for the anchor point." } } }, "RepeatV2": { "type": "string", "enum": [ "stop_on_last_frame", "loop", "time_stretch" ], "description": "Defines the repeat behavior of the overlay." }, "ScaleV2": { "type": "object", "description": "Scale configuration for overlay dimensions.", "properties": { "width": { "type": "integer", "description": "The width of the scaled overlay." }, "height": { "type": "integer", "description": "The height of the scaled overlay." } } }, "AspectRatioV2": { "type": "object", "description": "Aspect ratio specification for video output.", "properties": { "x": { "type": "integer", "description": "AspectRatio x ratio." }, "y": { "type": "integer", "description": "AspectRatio y ratio." } }, "required": [ "x", "y" ] }, "OutputFormatV2": { "type": "object", "default": "source", "properties": { "media": { "type": "string", "enum": [ "none", "mp4", "mov", "source" ], "description": "Media format for the output video. If only the OTIO file is needed, set this as `none`." }, "sidecar": { "type": "string", "enum": [ "json", "otio" ], "description": "Sidecar format for additional metadata." } }, "description": "Output format configuration. A media property is mandatory when this format object is specified.", "required": [ "media", "sidecar" ] }, "CompositionV2": { "type": "object", "properties": { "overlays": { "type": "array", "items": { "$ref": "#/components/schemas/OverlayV2" }, "description": "List of overlays to be composed on the video." } }, "description": "Configuration for composing elements on the video." }, "CancelAcceptedResponse": { "type": "object", "description": "Success response body returned with HTTP 202 when a render job cancel request is accepted. Applies only to render jobs submitted via `POST /v1/templates/render`.", "required": ["jobId", "status"], "properties": { "jobId": { "type": "string", "format": "uuid", "description": "UUID of the render job for which cancellation was accepted." }, "status": { "type": "string", "enum": ["canceling"], "description": "Transient in-progress status. Poll `GET /v1/status/{jobId}` to observe the terminal `canceled` state." } } }, "PagingInfo": { "type": "object", "description": "Cursor-based pagination metadata returned by the List Render Jobs endpoint.", "required": ["totalRecords"], "properties": { "nextUrl": { "type": "string", "format": "uri", "description": "Absolute URL to the next page of results. Absent on the last page — treat its absence as the end of the result set." }, "totalRecords": { "type": "integer", "description": "Total number of render jobs matching the filter across all pages." } } }, "RenderJobListItem": { "type": "object", "description": "Summary of a single template render job as returned by `GET /v1/templates/render-jobs`. Applies only to render jobs submitted via `POST /v1/templates/render`.", "required": ["jobId", "status", "totalJobItems", "createdDate", "statusUrl"], "properties": { "jobId": { "type": "string", "format": "uuid", "description": "Unique identifier of the render job." }, "status": { "type": "string", "enum": ["not_started", "running", "succeeded", "partially_succeeded", "failed", "canceled"], "description": "Current overall status of the render job." }, "totalJobItems": { "type": "integer", "description": "Total number of output items (variation × preset combinations) in this batch render job." }, "percentCompleted": { "type": "number", "format": "float", "minimum": 0, "maximum": 100, "description": "Percentage of the job completed (0–100). Present only when `status` is `running`." }, "createdDate": { "type": "string", "format": "date-time", "description": "ISO 8601 date-time when the render job was submitted." }, "completedDate": { "type": "string", "format": "date-time", "description": "ISO 8601 date-time when the job reached a terminal state. Present only when `status` is `succeeded`, `partially_succeeded`, `failed`, or `canceled`." }, "statusUrl": { "type": "string", "format": "uri", "description": "Absolute URL to poll for the latest job status (`GET /v1/status/{jobId}`)." }, "cancelUrl": { "type": "string", "format": "uri", "description": "Absolute URL to submit a cancel request (`PUT /v1/cancel/{jobId}`). Present only when the job is still cancellable (`status` is `not_started` or `running`)." } } }, "RenderJobListResponse": { "type": "object", "description": "Response body for `GET /v1/templates/render-jobs`. Contains render jobs submitted via `POST /v1/templates/render` only.", "required": ["paging", "jobs"], "properties": { "paging": { "$ref": "#/components/schemas/PagingInfo" }, "jobs": { "type": "array", "items": { "$ref": "#/components/schemas/RenderJobListItem" }, "description": "Ordered list of render job summaries for the current page. Empty array when no jobs match the filter." } } } }, "examples": { "TextInputForSpeechGeneration": { "summary": "Generate speech using plain text", "value": { "script": { "text": "", "mediaType": "text/plain", "localeCode": "en-US" }, "voiceId": "", "output": { "mediaType": "audio/wav" } } }, "URLInputForSpeechGeneration": { "summary": "Generate speech using text file", "value": { "script": { "source": { "url": "" }, "mediaType": "text/plain", "localeCode": "en-US" }, "voiceId": "", "output": { "mediaType": "audio/wav" } } }, "SuccessfulVoicesResponse": { "summary": "Successful response with voices details", "value": { "voices": [ { "voiceId": "v123", "displayName": "John Doe", "gender": "M", "style": "Professional", "voiceType": "Nurse", "status": "Active", "extendedPropertyMap": {}, "wordsPerMinute": "100", "rolePlayList": [], "sampleURL": "" } ] } }, "SuccessfulAvatarsResponse": { "summary": "Successful response with avatars details", "value": { "avatars": [ { "avatarId": "a321", "displayName": "Alice", "gender": "F", "clothingStyle": "Formal", "ageGroup": "Young Adult", "ethnicity": "Caucasian", "status": "Active", "style": "Doctor", "extendedPropertyMap": { "aspectRatio": { "x": 16, "y": 9 }, "resolution": { "width": 1920, "height": 1080 } }, "thumbnailUrls": { "hd": "", "lowRes": "" }, "voiceId": "v321", "sampleVideo": { "webm": "", "mp4": "" } } ] } }, "SubmitRequestResponse": { "summary": "Successful response with job details", "value": { "jobId": "string", "statusUrl": "string" } }, "BadRequestError": { "summary": "Bad Request", "value": { "error_code": "invalid_json", "message": "Invalid request. Please check the input data." } }, "ErrorBodyUnauthorized": { "summary": "Invalid Token", "value": { "error_code": "401013", "message": "Oauth token is not valid" } }, "ErrorBodyAccessDenied": { "summary": "Access Denied", "value": { "error_code": "unauthorized_forbidden", "message": "Access Denied: You do not have the necessary permissions to access this resource" } }, "ErrorBodyForbidden": { "summary": "Api Key is required", "value": { "error_code": "403000", "message": "Api Key is required" } }, "ErrorBodyAPIKeyInvalid": { "summary": "Api Key is invalid", "value": { "error_code": "403003", "message": "Api Key is invalid" } }, "UserNotEntitledError": { "summary": "User Not Entitled", "value": { "error_code": "user_not_entitled", "message": "User not entitled: You do not have the entitlement to perform this operation." } }, "QuotaExceededError": { "summary": "Quota Exceeded", "value": { "error_code": "quota_exhausted", "message": "Quota exceeded: You have reached the maximum allowed usage for this service." } }, "UserProfileDeniedError": { "summary": "User Profile Denied", "value": { "error_code": "user_profile_denied", "message": "User profile denied: Your profile does not meet the requirements for this action." } }, "UserBlockedError": { "summary": "User Blocked By Admin", "value": { "error_code": "user_blocked_by_admin", "message": "Access blocked: Your account has been blocked by an administrator." } }, "InvalidSubscriptionError": { "summary": "Invalid Subscription", "value": { "error_code": "invalid_subscription", "message": "Invalid subscription: Your subscription does not cover this service or feature." } }, "ViolationError": { "summary": "User Blocked Due To Violation", "value": { "error_code": "user_blocked_due_to_violation", "message": "Account blocked: Your account has been blocked due to a violation of terms." } }, "TasteExhaustedError": { "summary": "Taste Exhausted", "value": { "error_code": "taste_exhausted", "message": "Unauthorized: Limited taste for user is exhausted." } }, "AccessError": { "summary": "Access Error", "value": { "error_code": "access_error", "message": "Token not allowed in the current context" } }, "ErrorBodyResourceNotFound": { "summary": "Not Found", "value": { "error_code": "unknown_job_id", "message": "The requested resource was not found." } }, "InvalidInputErrorExample": { "summary": "Invalid Input", "value": { "error_code": "validation_error", "message": "The request could not be processed due to invalid input" } }, "MissingInputFileUrlErrorExample": { "summary": "Missing Input URL", "value": { "error_code": "validation_error", "message": "Missing input file URL" } }, "InvalidInputUrlErrorExample": { "summary": "Invalid Input URL", "value": { "error_code": "validation_error", "message": "Invalid input 'url' specified" } }, "InputFileFormatValidationErrorExample": { "summary": "Invalid Input Format", "value": { "error_code": "validation_error", "message": "Input file format is not supported" } }, "MissingScriptErrorExample": { "summary": "Missing Input Script", "value": { "error_code": "validation_error", "message": "Script missing in the payload" } }, "EmptyTextForScriptErrorExample": { "summary": "Empty Input Text", "value": { "error_code": "validation_error", "message": "The provided 'text' is empty" } }, "TextLengthExceededForScriptErrorExample": { "summary": "Input Text Too Long", "value": { "error_code": "validation_error", "message": "Input text has more than 20000 characters" } }, "TextLengthTooShortForScriptErrorExample": { "summary": "Input Text Too Short", "value": { "error_code": "validation_error", "message": "Input text has less than 15 characters" } }, "ScriptInvalidASCIIRange": { "summary": "Non-ASCII Input Text", "value": { "error_code": "validation_error", "message": "Input contains unsupported characters. Please use only ASCII or extended ASCII." } }, "ScriptInvalidTextSupportedRange": { "summary": "Invalid Input Text", "value": { "error_code": "validation_error", "message": "Input contains unsupported characters. Please remove any Emojis or Symbols" } }, "InvalidOrMissingLocaleCodeForScriptErrorExample": { "summary": "Invalid Source Locale", "value": { "error_code": "validation_error", "message": "Invalid source locale code specified" } }, "MissingMediaTypeForScriptErrorExample": { "summary": "Missing Script Mediatype", "value": { "error_code": "validation_error", "message": "Missing script 'mediaType' in the payload" } }, "MediatypeIncompatibleForText": { "summary": "Invalid Script Mediatype", "value": { "error_code": "validation_error", "message": "Provided text format is not valid for input mediaType" } }, "MissingSourceLocaleErrorExample": { "summary": "Missing Source Locale", "value": { "error_code": "validation_error", "message": "Source locale missing in payload" } }, "SourceUrlSourceTextConflictErrorExample": { "summary": "Both URL and Text", "value": { "error_code": "validation_error", "message": "Both source url and source text is present in the request" } }, "UnsupportedVoiceIdErrorExample": { "summary": "Invalid Voice ID", "value": { "error_code": "validation_error", "message": "The requested 'voiceId' is not supported" } }, "MissingVoiceIdErrorExample": { "summary": "Missing Voice ID", "value": { "error_code": "validation_error", "message": "Missing 'voiceId' in the payload" } }, "MissingOutputErrorExample": { "summary": "Missing Output Config", "value": { "error_code": "validation_error", "message": "Missing 'output' field in the payload" } }, "MissingMediaTypeForOutputErrorExample": { "summary": "Missing Output Mediatype", "value": { "error_code": "validation_error", "message": "Missing output 'mediaType' in payload" } }, "InvalidOutputFileFormatErrorExample": { "summary": "Invalid Output Format", "value": { "error_code": "validation_error", "message": "Output file format is not valid" } }, "InvalidRequestPayloadErrorExample": { "summary": "Invalid TTS Request", "value": { "error_code": "validation_error", "message": "Text to speech service marked this request as invalid" } }, "InputScriptAudioConflictErrorExample": { "summary": "Both Script and Audio", "value": { "error_code": "validation_error", "message": "Must specify either script or audio, not both" } }, "InputScriptAudioMissingErrorExample": { "summary": "None of Script or Audio", "value": { "error_code": "validation_error", "message": "Must specify either script or audio, both cannot be empty" } }, "InputScriptAudioMissingOrInvalidErrorExample": { "summary": "None of Text or URL", "value": { "error_code": "validation_error", "message": "Provide non-empty text in 'script' or a valid URL in 'source'" } }, "InvalidOrMissingAudioUrlErrorExample": { "summary": "Invalid Audio URL", "value": { "error_code": "validation_error", "message": "Invalid or missing 'url' specified in audio" } }, "MissingAudioSourceErrorExample": { "summary": "Missing Audio Source", "value": { "error_code": "validation_error", "message": "Audio source missing in payload" } }, "MissingAvatarIdErrorExample": { "summary": "Missing Avatar ID", "value": { "error_code": "validation_error", "message": "The 'avatarId' property is required" } }, "UnsupportedAvatarIdErrorExample": { "summary": "Invalid Avatar ID", "value": { "error_code": "validation_error", "message": "The requested 'avatarId' is not supported" } }, "MissingBackgroundUrlErrorExample": { "summary": "Missing Background URL", "value": { "error_code": "validation_error", "message": "Background URL must be specified for type 'video' or 'image'" } }, "MissingBackgroundTypeErrorExample": { "summary": "Missing Background Type", "value": { "error_code": "validation_error", "message": "Background type must be set to one of the following: 'image', 'video', 'color', or 'transparent'." } }, "InvalidBackgroundUrlErrorExample": { "summary": "Invalid Background URL", "value": { "error_code": "validation_error", "message": "Invalid 'url' specified in background" } }, "BackgroundSourceColorConflictErrorExample": { "summary": "Both Background Source and Color", "value": { "error_code": "validation_error", "message": "Must specify either background source or color, not both" } }, "BackgroundSourceColorMissingErrorExample": { "summary": "None of Background Source or Color", "value": { "error_code": "validation_error", "message": "Must specify either background source or color, both cannot be empty" } }, "InvalidBackgroundColorErrorExample": { "summary": "Invalid Background Color", "value": { "error_code": "validation_error", "message": "Invalid 'color' specified in background" } }, "MissingBackgroundColorErrorExample": { "summary": "Missing Background Color", "value": { "error_code": "validation_error", "message": "Background color must be specified for type 'color'" } }, "BackgroundInvalidFormat": { "summary": "Invalid Background Type", "value": { "error_code": "validation_error", "message": "Transparent background is not supported" } }, "BackgroundIncompatibleWithFormat": { "summary": "Incompatible Background Type", "value": { "error_code": "validation_error", "message": "Transparent background is only supported for 'video/webm' output file format" } }, "FormatIncompatibleWithBackground": { "summary": "Incompatible Output Format", "value": { "error_code": "validation_error", "message": "The 'video/webm' output format can only be used when the background type is 'transparent'" } }, "UnsupportedOutputResolution": { "summary": "Invalid Output Resolution", "value": { "error_code": "validation_error", "message": "Unsupported resolution specified in output. Accepted values are [1920x1080, 3840x2160]" } }, "UnsupportedShotTypeErrorExample": { "summary": "Invalid Shot Type", "value": { "error_code": "validation_error", "message": "Shot Type is not supported." } }, "InvalidSourceUrlErrorExample": { "summary": "Invalid Source URL", "value": { "error_code": "validation_error", "message": "Invalid source url specified" } }, "IncorrectVoiceNameErrorExample": { "summary": "Invalid Voice Name", "value": { "error_code": "validation_error", "message": "The provided `voice name` is incorrect in the script text" } }, "ErrorBodyTooManyRequests": { "summary": "Too many requests", "value": { "error_code": "429050", "message": "Too many requests" } }, "ErrorBodyRateLimited": { "summary": "Rate Limited", "value": { "error_code": "rate_limited", "message": "Too many requests received" } }, "ErrorBodyLegalReasons": { "summary": "Legal Restrictions", "value": { "error_code": "unauthorized_legal_reasons", "message": "Unauthorized access: Legal restrictions prevent you from accessing this resource." } }, "RunTimeError": { "summary": "Internal Server Error", "value": { "error_code": "runtime_error", "message": "Internal Server Error" } }, "TEXT_TO_SPEECH_ENTITY_CREATION_ERROR": { "summary": "Internal Server Error during Entity Creation", "value": { "error_code": "runtime_error", "message": "Internal Server Error while creating text to speech request" } }, "TEXT_TO_SPEECH_SERVICE_SUBMIT_ERROR": { "summary": "Internal Server Error during Submit", "value": { "error_code": "runtime_error", "message": "Internal Server Error while submitting text to speech request" } }, "TTSRuntimeError": { "summary": "Error Handling Response", "value": { "error_code": "runtime_error", "message": "Internal Server Error while receiving or handling response" } }, "TTSEntityCreationError": { "summary": "Error Processing Request", "value": { "error_code": "runtime_error", "message": "Internal Server Error while creating text to speech request" } }, "TTSServiceSubmitError": { "summary": "Error Submitting Request", "value": { "error_code": "runtime_error", "message": "Internal Server Error while submitting text to speech request" } }, "PlainTextInputForAvatarGeneration": { "summary": "Generate avatar using plain text", "value": { "script": { "text": "", "mediaType": "text/plain", "localeCode": "en-US" }, "voiceId": "", "avatarId": "", "output": { "mediaType": "video/mp4" } } }, "PlainTextInputForAvatarGenerationUsingVideoBackground": { "summary": "Generate avatar using plain text and video background", "value": { "script": { "text": "", "mediaType": "text/plain", "localeCode": "en-US" }, "voiceId": "", "avatarId": "", "output": { "mediaType": "video/mp4", "background": { "type": "video", "source": { "url": "" } } } } }, "PlainTextInputForAvatarGenerationUsingImageBackground": { "summary": "Generate avatar using plain text and image background", "value": { "script": { "text": "", "mediaType": "text/plain", "localeCode": "en-US" }, "voiceId": "", "avatarId": "", "output": { "mediaType": "video/mp4", "background": { "type": "image", "source": { "url": "" } } } } }, "PlainTextInputForAvatarGenerationUsingColorBackground": { "summary": "Generate avatar using plain text and color background", "value": { "script": { "text": "", "mediaType": "text/plain", "localeCode": "en-US" }, "voiceId": "", "avatarId": "", "output": { "mediaType": "video/mp4", "background": { "type": "color", "color": "#FFF000" } } } }, "URLTextInputForAvatarGeneration": { "summary": "Generate avatar using text file", "value": { "script": { "source": { "url": "" }, "mediaType": "text/plain", "localeCode": "en-US" }, "voiceId": "", "avatarId": "", "output": { "mediaType": "video/mp4" } } }, "URLInputForAvatarGeneration": { "summary": "Generate avatar using audio file", "value": { "audio": { "source": { "url": "" }, "mediaType": "audio/wav", "localeCode": "en-US" }, "avatarId": "", "output": { "mediaType": "video/mp4" } } }, "StatusApiInProgressRequestResponse": { "summary": "Inprogress response with job details", "value": { "jobId": "string", "status": "running" } }, "StatusApiSuccessRequestResponse": { "summary": "Success response with job details", "value": { "jobId": "string", "status": "succeeded", "output": { "destination": { "url": "string" } } } }, "StatusAPIFailedInputFileDownloadResponse": { "summary": "Failed Input Download", "value": { "jobId": "string", "status": "failed", "error_code": "resource_not_found", "message": "Failed to download input file" } }, "StatusAPIFailedUnsafeScriptResponse": { "summary": "Unsafe Script", "value": { "jobId": "string", "status": "failed", "error_code": "validation_error", "message": "The provided prompt is considered unsafe and it cannot be used to generate content" } }, "StatusAPIFailedBackgroundFileResponse": { "summary": "Failed Background File Download", "value": { "error_code": "validation_error", "message": "Error while downloading file from Background URL" } }, "DentroCheckFailedResponse": { "summary": "Error Processing Unsafe Prompt", "value": { "jobId": "string", "status": "failed", "error_code": "validation_error", "message": "The provided prompt is considered unsafe and it cannot be used to generate content." } }, "MISSING_PARAMS_IN_CROP_AREA": { "summary": "Missing params in crop area", "value": { "error_code": "validation_error", "message": "Missing params in crop area" } }, "INVALID_CROP_AREA_PARAMS": { "summary": "Invalid value in crop area", "value": { "error_code": "validation_error", "message": "Invalid value in crop area params" } }, "CROP_AREA_ASPECT_RATIO_NOT_SUPPORTED": { "summary": "Aspect ratio in Crop", "value": { "error_code": "validation_error", "message": " Aspect ratio 16:9 is not maintained in crop width*height" } }, "CROP_AREA_UNSUPPORTED_FOR_NON_IMAGE_VIDEO_BACKGROUND": { "summary": "Crop area support", "value": { "error_code": "validation_error", "message": "Crop area supported only for image and video background" } }, "StatusAPIFailedBackgroundResolutionErrorResponse": { "summary": "Error in Background Resolution", "value": { "jobId": "string", "status": "failed", "error_code": "validation_error", "message": "Background asset resolution should be greater than 640x360" } }, "StatusAPIFailedCropAreaErrorResponse": { "summary": "Error in Crop Area", "value": { "jobId": "string", "status": "failed", "error_code": "validation_error", "message": "Crop Area is going out of bounds" } }, "StatusAPIFailedBackgroundCropErrorResponse": { "summary": "Error in Background Aspect Ratio", "value": { "jobId": "string", "status": "failed", "error_code": "validation_error", "message": " Image background asset should be 16:9 aspect ratio, please provide crop the media and then send" } }, "StatusAPIFailedMediatypeMismatchResponse": { "summary": "Invalid Input Mediatype", "value": { "jobId": "string", "status": "failed", "error_code": "validation_error", "message": "Provided input mediaType should match the type of source media" } }, "StatusAPIFailedUnsupportedBackgroundResponse": { "summary": "Unsupported Background File Type", "value": { "jobId": "string", "status": "failed", "error_code": "validation_error", "message": "Unsupported file type for background" } }, "StatusAPIFailedBackgroundResolutionMismatchResponse": { "summary": "Unsupported Background Resolution", "value": { "jobId": "string", "status": "failed", "error_code": "validation_error", "message": "Background asset resolution should match output background resolution (with default value 1920x1080)" } }, "StatusAPIFailedDurationTooLongResponse": { "summary": "Unsupported Audio Duration", "value": { "jobId": "string", "status": "failed", "error_code": "validation_error", "message": "Audio duration should be less than 30 mins" } }, "StatusAPIFailedCAISigningResponse": { "summary": "CAI Signing Failed", "value": { "jobId": "string", "status": "failed", "error_code": "runtime_error", "message": "CAI Signing Failed" } }, "StatusAPIFailedUploadErrorResponse": { "summary": "Failed Output Upload", "value": { "jobId": "string", "status": "failed", "error_code": "runtime_error", "message": "Unable to upload the output" } }, "StatusAPIFailedDownloadErrorResponse": { "summary": "Failed Stock Media Download", "value": { "jobId": "string", "status": "failed", "error_code": "runtime_error", "message": "Unable to download stock media" } }, "StatusAPIFailedTTSErrorResponse": { "summary": "Error in TTS", "value": { "jobId": "string", "status": "failed", "error_code": "runtime_error", "message": "Run time error in tts" } }, "StatusAPIFailedAvatarErrorResponse": { "summary": "Error in Avatar", "value": { "jobId": "string", "status": "failed", "error_code": "runtime_error", "message": "Run time error in avatar" } }, "StatusAPIFailedLipsyncErrorResponse": { "summary": "Error in lip sync", "value": { "jobId": "string", "status": "failed", "error_code": "runtime_error", "message": "Validation failure in Lipsync Pipeline" } }, "StatusAPIFailedFFMpegErrorResponse": { "summary": "Error in FFMpeg", "value": { "jobId": "string", "status": "failed", "error_code": "runtime_error", "message": "Failed in FFmpeg worker" } }, "StatusAPIFailedLipsyncPollingErrorResponse": { "summary": "Error polling for lip sync", "value": { "jobId": "string", "status": "failed", "error_code": "runtime_error", "message": "Failed while polling for Lipsync" } }, "StatusAPIFailedMediaTrimErrorResponse": { "summary": "Error Processing Avatar Video", "value": { "jobId": "string", "status": "failed", "error_code": "runtime_error", "message": "Error while triming avatar video" } }, "StatusAPIFailedMediaTrimAlphaErrorResponse": { "summary": "Error Processing Avatar Alpha Video", "value": { "jobId": "string", "status": "failed", "error_code": "runtime_error", "message": "Error while triming avatar alpha video" } }, "StatusAPIFailedConfigDownloadResponse": { "summary": "Error Processing Avatar Config", "value": { "jobId": "string", "status": "failed", "error_code": "runtime_error", "message": "Error while downloading actor config file" } }, "StatusAPIFailedInternalErrorResponse": { "summary": "Error Processing Response", "value": { "jobId": "string", "status": "failed", "error_code": "runtime_error", "message": "Internal Server Error while receiving or handling response" } }, "StatusAPIFailedTTSInternalErrorResponse": { "summary": "Error Getting Status", "value": { "jobId": "string", "status": "failed", "error_code": "runtime_error", "message": "Internal Server Error while getting text to speech request status" } }, "StudioAPIFailedEntitiesErrorResponse": { "summary": "Error Fetching Entities", "value": { "error_code": "runtime_error", "message": "Error while fetching available entities" } }, "ErrorBodyBadRequest": { "summary": "Bad Request", "value": { "error_code": "bad_request", "message": "The request was invalid or cannot be served." } }, "ErrorBodyMethodNotAllowed": { "summary": "Method Not Allowed", "value": { "error_code": "method_not_allowed", "message": "The HTTP method is not supported for this endpoint." } }, "ErrorBodyInternalServerError": { "summary": "Internal Server Error", "value": { "error_code": "internal_server_error", "message": "An unexpected error occurred while processing the request." } }, "AudioInputToGenerateTranscriptFromSourceAudio": { "summary": "Generate transcript from source audio", "value": { "audio": { "source": { "url": "" }, "mediaType": "audio/wav" } } }, "AudioInputToGenerateTranscriptFromTargetLanguageAudio": { "summary": "Generate transcript from audio in target language (Spanish)", "value": { "audio": { "source": { "url": "" }, "mediaType": "audio/wav" }, "targetLocaleCodes": [ "es-ES" ] } }, "VideoInputToGenerateTranscriptFromSourceVideo": { "summary": "Generate transcript from source video", "value": { "video": { "source": { "url": "" }, "mediaType": "video/mp4" } } }, "VideoInputToGenerateTranscriptFromTargetLanguageVideo": { "summary": "Generate transcript from video in target language (Spanish)", "value": { "video": { "source": { "url": "" }, "mediaType": "video/mp4" }, "targetLocaleCodes": [ "es-ES" ] } }, "AudioInputToGenerateTranscriptAndCaptionsFromTargetFormatsFromSourceAudio": { "summary": "Generate transcript and captions from source audio", "value": { "audio": { "source": { "url": "" }, "mediaType": "audio/wav" }, "targetLocaleCodes": [ "en-US" ], "captions": { "targetFormats": [ "SRT" ] } } }, "VideoInputToGenerateTranscriptAndCaptionsFromTargetFormatsFromSourceVideo": { "summary": "Generate transcript and captions from source video", "value": { "video": { "source": { "url": "" }, "mediaType": "video/mp4" }, "targetLocaleCodes": [ "en-US" ], "captions": { "targetFormats": [ "SRT" ] } } }, "JobStatusLinkResponse": { "summary": "Job status link response", "value": { "jobId": "", "statusUrl": "https:///v1/status/" } }, "ValidationErrorVideoSourceBlank": { "summary": "Video source blank error", "value": { "error_code": "validation_error", "message": "Video source URL cannot be blank" } }, "ValidationErrorAudioSourceBlank": { "summary": "Audio source blank error", "value": { "error_code": "validation_error", "message": "Audio source URL cannot be blank" } }, "ValidationErrorInputSourceBlank": { "summary": "Input source blank error", "value": { "error_code": "validation_error", "message": "Input source URL cannot be blank" } }, "ValidationErrorVideoAndAudioSimultaneous": { "summary": "Video and audio simultaneous error", "value": { "error_code": "validation_error", "message": "Cannot provide both video and audio input simultaneously" } }, "ValidationErrorVideoInputMediaTypeMissing": { "summary": "Video input media type missing error", "value": { "error_code": "validation_error", "message": "Video input media type is required" } }, "ValidationErrorAudioInputMediaTypeMissing": { "summary": "Audio input media type missing error", "value": { "error_code": "validation_error", "message": "Audio input media type is required" } }, "ValidationErrorSourceUrlEmpty": { "summary": "Source URL empty error", "value": { "error_code": "validation_error", "message": "Source URL cannot be empty" } }, "ValidationErrorInvalidVideoAudioSourceUrl": { "summary": "Invalid video/audio source URL error", "value": { "error_code": "validation_error", "message": "Invalid video/audio source URL format" } }, "ValidationErrorBlankTranscriptSourceField": { "summary": "Blank transcript source field error", "value": { "error_code": "validation_error", "message": "Transcript source field cannot be blank" } }, "ValidationErrorInvalidTranscriptUrl": { "summary": "Invalid transcript URL error", "value": { "error_code": "validation_error", "message": "Invalid transcript URL format" } }, "ValidationErrorUnsupportedVideoMediaType": { "summary": "Unsupported video media type error", "value": { "error_code": "validation_error", "message": "Unsupported video media type" } }, "ValidationErrorUnsupportedAudioMediaType": { "summary": "Unsupported audio media type error", "value": { "error_code": "validation_error", "message": "Unsupported audio media type" } }, "ValidationErrorUnsupportedTargetLocaleCode": { "summary": "Unsupported target locale code error", "value": { "error_code": "validation_error", "message": "Unsupported target locale code" } }, "ValidationErrorBlankTargetLocaleCode": { "summary": "Blank target locale code error", "value": { "error_code": "validation_error", "message": "Target locale code cannot be blank" } }, "ValidationErrorMissingTargetLocaleCode": { "summary": "Missing target locale code error", "value": { "error_code": "validation_error", "message": "Target locale code is required" } }, "ValidationErrorLocaleCodeNotRequiredForEditedTranscript": { "summary": "Locale code not required for edited transcript error", "value": { "error_code": "validation_error", "message": "Locale code is not required for edited transcript" } }, "ValidationErrorEitherTargetLocaleCodesOrTranscriptionRequired": { "summary": "Either target locale codes or transcription required error", "value": { "error_code": "validation_error", "message": "Either target locale codes or transcription is required" } }, "ValidationErrorCaptionGenerationNotSupportedWithTranslation": { "summary": "Caption generation not supported with translation error", "value": { "error_code": "validation_error", "message": "Caption generation is not supported with translation" } }, "DubRequestUsingAutoTranslatedTranscripts": { "summary": "Dub request using auto-translated transcripts", "value": { "video": { "source": { "url": "" }, "mediaType": "video/mp4" }, "targetLocaleCodes": [ "es-ES" ], "lipSync": true } }, "DubRequestUsingAudioAutoTranslatedTranscripts": { "summary": "Dub request using audio auto-translated transcripts", "value": { "audio": { "source": { "url": "" }, "mediaType": "audio/wav" }, "targetLocaleCodes": [ "es-ES" ] } }, "DubRequestUsingEditedSourceTranscript": { "summary": "Dub request using edited source transcript", "value": { "video": { "source": { "url": "" }, "mediaType": "video/mp4" }, "transcripts": [ { "source": { "url": "" } } ], "targetLocaleCodes": [ "es-ES" ], "lipSync": true } }, "DubRequestUsingAudioEditedSourceTranscript": { "summary": "Dub request using audio edited source transcript", "value": { "audio": { "source": { "url": "" }, "mediaType": "audio/wav" }, "transcripts": [ { "source": { "url": "" } } ], "targetLocaleCodes": [ "es-ES" ] } }, "DubRequestUsingEditedTranslatedTranscript": { "summary": "Dub request using edited translated transcript", "value": { "video": { "source": { "url": "" }, "mediaType": "video/mp4" }, "transcripts": [ { "source": { "url": "" } } ], "lipSync": true } }, "DubRequestUsingAudioEditedTranslatedTranscript": { "summary": "Dub request using audio edited translated transcript", "value": { "audio": { "source": { "url": "" }, "mediaType": "audio/wav" }, "transcripts": [ { "source": { "url": "" } } ] } }, "PresetsResponse": { "summary": "List of supported presets", "value": { "items": [ { "presetId": "ffs_video_api_land_1080p_hq", "label": "Landscape 1920\u00d71080 \u2013 HQ", "mediaType": "video/mp4", "codec": "H.264", "maxFps": { "numerator": 30, "denominator": 1 }, "bitrateMode": "vbr", "targetBitrateInKbps": 8000, "maxBitrateInKbps": 12000, "alpha": false, "primaryUsage": "Youtube, Web Promos" }, { "presetId": "ffs_video_api_land_1080p_lq", "label": "Landscape 1920\u00d71080 \u2013 LQ", "mediaType": "video/mp4", "codec": "H.264", "maxFps": { "numerator": 30, "denominator": 1 }, "bitrateMode": "vbr", "targetBitrateInKbps": 6000, "maxBitrateInKbps": 8000, "alpha": false, "primaryUsage": "Previews" }, { "presetId": "ffs_video_api_square_1080p_hq", "label": "Square 1080\u00d71080 \u2013 HQ", "mediaType": "video/mp4", "codec": "H.264", "maxFps": { "numerator": 30, "denominator": 1 }, "bitrateMode": "vbr", "targetBitrateInKbps": 6000, "maxBitrateInKbps": 8000, "alpha": false, "primaryUsage": "IG / FB feed ads, LinkedIn videos, X" }, { "presetId": "ffs_video_api_square_1080p_lq", "label": "Square 1080\u00d71080 \u2013 LQ", "mediaType": "video/mp4", "codec": "H.264", "maxFps": { "numerator": 30, "denominator": 1 }, "bitrateMode": "vbr", "targetBitrateInKbps": 3000, "maxBitrateInKbps": 4000, "alpha": false, "primaryUsage": "Previews" }, { "presetId": "ffs_video_api_vert_1920p_hq", "label": "Vertical 1080\u00d71920 \u2013 HQ", "mediaType": "video/mp4", "codec": "H.264", "profile": "high", "maxFps": { "numerator": 30, "denominator": 1 }, "bitrateMode": "vbr", "targetBitrateInKbps": 6000, "maxBitrateInKbps": 8000, "alpha": false, "primaryUsage": "Reels, TikTok, Snapchat Paid Ads" }, { "presetId": "ffs_video_api_vert_1920p_lq", "label": "Vertical 1080\u00d71920 \u2013 LQ", "mediaType": "video/mp4", "codec": "H.264", "profile": "high", "maxFps": { "numerator": 30, "denominator": 1 }, "bitrateMode": "vbr", "targetBitrateInKbps": 3000, "maxBitrateInKbps": 4000, "alpha": false, "primaryUsage": "Previews" }, { "presetId": "ffs_video_api_prores", "label": "ProRes export preset supporting Alpha channel", "mediaType": "video/quicktime", "codec": "Apple ProRes 4444", "profile": "high", "maxFps": { "numerator": 30, "denominator": 1 }, "bitrateMode": "vbr", "alpha": true, "primaryUsage": "Logo stings, overlay plates, compositing" } ] } }, "DGRJobStatusNotStarted": { "summary": "DGR job not started", "value": { "status": "not_started", "jobId": "" } }, "DGRJobStatusRunning": { "summary": "DGR job running", "value": { "status": "running", "percentCompleted": "55", "jobId": "" } }, "DGRDescribeSuccess": { "summary": "DGR describe template succeeded", "value": { "jobId": "", "status": "succeeded", "output": { "fonts": [ { "name": "FranklinGothicURW-Boo", "uploadRequired": false }, { "name": "", "uploadRequired": true } ], "elements": [ { "type": "mogrt", "controls": [ { "variableId": "", "label": "Headline", "type": "text", "defaultData": { "text": "This is your headline.", "fontName": "FranklinGothicURW-Boo" } }, { "variableId": "", "label": "Show Extra?", "type": "checkbox", "defaultData": { "selectedCheckboxValue": true }, "options": [ true, false ] }, { "variableId": "", "label": "Choices Dropdown", "type": "dropdown", "defaultData": { "selectedDropdownValue": "2" }, "options": { "0": "AAA", "1": "BBB", "2": "CCC", "3": "DDD", "4": "EEE" } }, { "variableId": "", "label": "Size selector", "type": "slider", "defaultData": { "selectedSliderValue": 1 }, "range": { "minimum": 1, "maximum": 5 } }, { "variableId": "", "label": "Logo", "type": "media", "size": { "width": 1344, "height": 768 }, "defaultData": { "scale": "no_scale" }, "possibleScaleValues": [ "no_scale", "fit_to_frame", "stretch_to_fill", "fill_frame" ] }, { "variableId": "", "label": "Mogrt Audio", "type": "audio", "durationInSeconds": 22.3, "possibleAudioPreferences": [ "replace", "mix" ] }, { "label": "Logo comment", "type": "comment", "text": "Add your company logo here." } ] } ] } } }, "DGRDescribeAEPSuccess": { "summary": "DGR describe AEP project succeeded", "value": { "jobId": "", "status": "succeeded", "output": { "fonts": [ { "name": "AdobeClean-ExtraBold", "uploadRequired": true }, { "name": "ArialMT", "uploadRequired": false } ], "elements": [ { "type": "aep", "controls": [ { "variableId": "c169:l193:layer:sourceText", "label": "Show Title", "type": "text", "defaultData": { "text": "Beach Runners", "fontName": "AdobeClean-ExtraBold" } }, { "variableId": "c259:l261:media", "label": "Video", "type": "media", "defaultData": { "scale": "no_scale" }, "size": { "width": 1920, "height": 1080 }, "possibleScaleValues": [ "no_scale", "fit_to_frame", "stretch_to_fill", "fill_frame" ] }, { "variableId": "c786:l799:layer:sourceText", "label": "Test color", "type": "text", "defaultData": { "text": "000000", "fontName": "ArialMT" } }, { "variableId": "c786:l810:eff:1:1", "label": "Test checkbox", "type": "checkbox", "defaultData": { "selectedCheckboxValue": false }, "options": [ true, false ] }, { "variableId": "c786:l810:eff:2:1", "label": "Test dropdown", "type": "dropdown", "defaultData": { "selectedDropdownValue": "1" }, "options": { "1": "Item 1", "2": "Item 2", "3": "Item 3" } }, { "variableId": "c786:l810:eff:3:1", "label": "Test slider", "type": "slider", "defaultData": { "selectedSliderValue": 0 }, "range": {} } ], "layers": [ { "id": "c259:l819:layer", "name": "1. Controls Checker", "compName": "A. Variable Duration" }, { "id": "c259:l398:layer", "name": "2. Intro", "compName": "A. Variable Duration" }, { "id": "c259:l265:layer", "name": "3. Outro", "compName": "A. Variable Duration" }, { "id": "c259:l263:layer", "name": "4. Show Details", "compName": "A. Variable Duration" }, { "id": "c259:l262:layer", "name": "5. Show Title", "compName": "A. Variable Duration" }, { "id": "c259:l261:layer", "name": "6. Video Media", "compName": "A. Variable Duration" } ] } ] } } }, "DGRRenderSuccessSingle": { "summary": "DGR render succeeded (single output)", "value": { "jobId": "", "status": "succeeded", "outputs": [ { "variationIndex": 0, "presetIndex": 0, "destination": { "url": "https://.mp4" } } ] } }, "DGRRenderSuccessMultiple": { "summary": "DGR render succeeded (multiple outputs)", "value": { "jobId": "", "status": "succeeded", "outputs": [ { "variationIndex": 0, "presetIndex": 0, "destination": { "url": "https://.mp4" } }, { "variationIndex": 0, "presetIndex": 1, "destination": { "url": "https://.mp4" } } ] } }, "DGRRenderPartialSuccess": { "summary": "DGR render partially succeeded", "value": { "jobId": "", "status": "partially_succeeded", "outputs": [ { "variationIndex": 1, "presetIndex": 0, "destination": { "url": "https://.mp4" } } ], "errors": [ { "variationIndex": 0, "presetIndex": 0, "error": { "error_code": "validation_error", "message": "You have exceeded the limit for..." } } ] } }, "DGRRenderSuccessTwoVariations": { "summary": "DGR render succeeded (two variations)", "value": { "jobId": "", "status": "succeeded", "outputs": [ { "variationIndex": 0, "presetIndex": 0, "destination": { "url": "https://.mp4" } }, { "variationIndex": 1, "presetIndex": 0, "destination": { "url": "https://.mp4" } } ] } }, "DGRJobFailed": { "summary": "DGR job failed", "value": { "jobId": "6b77c479-b599-46d3-a6bc-307b5389c105", "status": "failed", "message": "Error extracting definition.json: [Errno 2] No such file or directory: '6b77c479-b599-46d3-a6bc-307b5389c105/template.zip'" } }, "DGRJobCanceled": { "summary": "DGR render job canceled (applies only to render jobs from POST /v1/templates/render)", "value": { "jobId": "27776956-d405-4754-97e9-7e9cfd3809af", "status": "canceled", "createdDate": "2024-02-21T14:00:00Z", "totalJobItems": 3, "outputs": [ { "destination": { "url": "https://mogrt-outputs-prod.s3.amazonaws.com/27776956-d405-4754-97e9-7e9cfd3809af/some_custom_file_name.mp4" }, "startedDate": "2024-02-21T14:05:00Z", "completedDate": "2024-02-21T14:07:17Z", "variationIndex": 0, "presetIndex": 0 } ], "errors": [ { "variationIndex": 1, "presetIndex": 0, "error": { "error_code": "validation_error", "message": "You have exceeded the limit for..." } } ] } }, "CancelAccepted": { "summary": "Render job cancellation accepted", "value": { "jobId": "27776956-d405-4754-97e9-7e9cfd3809af", "status": "canceling" } }, "CancelJobNotFound": { "summary": "Render job not found", "value": { "error_code": "job_not_found", "message": "Render job 27776956-d405-4754-97e9-7e9cfd3809af does not exist or is no longer accessible." } }, "CancelJobAlreadyCompleted": { "summary": "Render job already completed", "value": { "error_code": "job_completed", "message": "Render job 27776956-d405-4754-97e9-7e9cfd3809af was already completed and cannot be canceled." } }, "CancelJobAlreadyCanceled": { "summary": "Render job already canceled", "value": { "error_code": "job_already_canceled", "message": "Render job 27776956-d405-4754-97e9-7e9cfd3809af was already canceled." } }, "RenderJobListFirstPage": { "summary": "First page of render jobs, more pages available", "value": { "paging": { "nextUrl": "https://audio-video-api.adobe.io/v1/templates/render-jobs?cursor=eyJzIjoiMjAyNi0wNS0wNFQwOToxNDowMVoifQ&limit=20", "totalRecords": 47 }, "jobs": [ { "jobId": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "status": "succeeded", "totalJobItems": 5, "createdDate": "2026-05-20T10:00:00Z", "completedDate": "2026-05-20T10:05:30Z", "statusUrl": "https://audio-video-api.adobe.io/v1/status/3fa85f64-5717-4562-b3fc-2c963f66afa6" }, { "jobId": "7ba95c74-6828-5673-c4fd-3d074g77bgb7", "status": "running", "totalJobItems": 10, "percentCompleted": 42.0, "createdDate": "2026-05-20T11:00:00Z", "statusUrl": "https://audio-video-api.adobe.io/v1/status/7ba95c74-6828-5673-c4fd-3d074g77bgb7", "cancelUrl": "https://audio-video-api.adobe.io/v1/cancel/7ba95c74-6828-5673-c4fd-3d074g77bgb7" } ] } }, "RenderJobListLastPage": { "summary": "Last page of render jobs (no nextUrl)", "value": { "paging": { "totalRecords": 47 }, "jobs": [ { "jobId": "9cd06d85-7939-6784-d5ge-4e185h88chc8", "status": "running", "totalJobItems": 50, "percentCompleted": 23.0, "createdDate": "2026-05-04T08:01:09Z", "statusUrl": "https://audio-video-api.adobe.io/v1/status/9cd06d85-7939-6784-d5ge-4e185h88chc8", "cancelUrl": "https://audio-video-api.adobe.io/v1/cancel/9cd06d85-7939-6784-d5ge-4e185h88chc8" } ] } }, "RenderJobListEmpty": { "summary": "No matching render jobs", "value": { "paging": { "totalRecords": 0 }, "jobs": [] } }, "ListJobsInvalidStatusFilter": { "summary": "Invalid status value in filter", "value": { "error_code": "invalid_status_filter", "message": "status must be one of not_started, running, succeeded, partially_succeeded, failed, canceled." } }, "ListJobsLimitOutOfRange": { "summary": "limit parameter outside [1, 100]", "value": { "error_code": "limit_out_of_range", "message": "limit must be between 1 and 100." } }, "ListJobsInvalidCursor": { "summary": "Malformed or expired cursor", "value": { "error_code": "invalid_cursor", "message": "The provided cursor is invalid or has expired." } }, "ListJobsInvalidFilter": { "summary": "Syntactically invalid FIQL expression", "value": { "error_code": "invalid_filter", "message": "Invalid filter: unexpected token at position 5." } }, "ListJobsFilterOutOfRetention": { "summary": "createdDate outside 30-day retention window", "value": { "error_code": "filter_out_of_retention", "message": "createdDate filter values must fall within the 30-day retention window." } } } } }