openapi: 3.2.0 info: version: 1.0.0 title: Firefly Services Audio and Video Translate and lip sync 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 servers: - url: https://audio-video-api.adobe.io description: Production server. security: - AccessToken: [] X-Api-Key: [] tags: - name: Translate and lip sync description: Endpoints for transcribing and dubbing audio/video content. paths: /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' components: examples: DubRequestUsingAudioEditedTranslatedTranscript: summary: Dub request using audio edited translated transcript value: audio: source: url: mediaType: audio/wav transcripts: - source: url: ValidationErrorUnsupportedTargetLocaleCode: summary: Unsupported target locale code error value: error_code: validation_error message: Unsupported target locale code DubRequestUsingAutoTranslatedTranscripts: summary: Dub request using auto-translated transcripts value: video: source: url: mediaType: video/mp4 targetLocaleCodes: - es-ES lipSync: true ErrorBodyForbidden: summary: Api Key is required value: error_code: '403000' message: Api Key is required ValidationErrorMissingTargetLocaleCode: summary: Missing target locale code error value: error_code: validation_error message: Target locale code is required DubRequestUsingAudioAutoTranslatedTranscripts: summary: Dub request using audio auto-translated transcripts value: audio: source: url: mediaType: audio/wav targetLocaleCodes: - es-ES ErrorBodyLegalReasons: summary: Legal Restrictions value: error_code: unauthorized_legal_reasons message: 'Unauthorized access: Legal restrictions prevent you from accessing this resource.' ErrorBodyUnauthorized: summary: Invalid Token value: error_code: '401013' message: Oauth token is not valid ErrorBodyInternalServerError: summary: Internal Server Error value: error_code: internal_server_error message: An unexpected error occurred while processing the request. ValidationErrorLocaleCodeNotRequiredForEditedTranscript: summary: Locale code not required for edited transcript error value: error_code: validation_error message: Locale code is not required for edited transcript ValidationErrorInvalidTranscriptUrl: summary: Invalid transcript URL error value: error_code: validation_error message: Invalid transcript URL format ValidationErrorBlankTranscriptSourceField: summary: Blank transcript source field error value: error_code: validation_error message: Transcript source field cannot be blank ValidationErrorUnsupportedVideoMediaType: summary: Unsupported video media type error value: error_code: validation_error message: Unsupported video media type AudioInputToGenerateTranscriptFromSourceAudio: summary: Generate transcript from source audio value: audio: source: url: mediaType: audio/wav JobStatusLinkResponse: summary: Job status link response value: jobId: statusUrl: https:///v1/status/ VideoInputToGenerateTranscriptAndCaptionsFromTargetFormatsFromSourceVideo: summary: Generate transcript and captions from source video value: video: source: url: mediaType: video/mp4 targetLocaleCodes: - en-US captions: targetFormats: - SRT DubRequestUsingEditedSourceTranscript: summary: Dub request using edited source transcript value: video: source: url: mediaType: video/mp4 transcripts: - source: url: targetLocaleCodes: - es-ES lipSync: true ErrorBodyBadRequest: summary: Bad Request value: error_code: bad_request message: The request was invalid or cannot be served. ValidationErrorCaptionGenerationNotSupportedWithTranslation: summary: Caption generation not supported with translation error value: error_code: validation_error message: Caption generation is not supported with translation ValidationErrorAudioInputMediaTypeMissing: summary: Audio input media type missing error value: error_code: validation_error message: Audio input media type is required VideoInputToGenerateTranscriptFromSourceVideo: summary: Generate transcript from source video value: video: source: url: mediaType: video/mp4 ValidationErrorInvalidVideoAudioSourceUrl: summary: Invalid video/audio source URL error value: error_code: validation_error message: Invalid video/audio source URL format ValidationErrorVideoAndAudioSimultaneous: summary: Video and audio simultaneous error value: error_code: validation_error message: Cannot provide both video and audio input simultaneously DubRequestUsingEditedTranslatedTranscript: summary: Dub request using edited translated transcript value: video: source: url: mediaType: video/mp4 transcripts: - source: url: lipSync: true ValidationErrorEitherTargetLocaleCodesOrTranscriptionRequired: summary: Either target locale codes or transcription required error value: error_code: validation_error message: Either target locale codes or transcription is required VideoInputToGenerateTranscriptFromTargetLanguageVideo: summary: Generate transcript from video in target language (Spanish) value: video: source: url: mediaType: video/mp4 targetLocaleCodes: - es-ES ValidationErrorInputSourceBlank: summary: Input source blank error value: error_code: validation_error message: Input source URL cannot be blank ErrorBodyTooManyRequests: summary: Too many requests value: error_code: '429050' message: Too many requests ValidationErrorSourceUrlEmpty: summary: Source URL empty error value: error_code: validation_error message: Source URL cannot be empty ErrorBodyMethodNotAllowed: summary: Method Not Allowed value: error_code: method_not_allowed message: The HTTP method is not supported for this endpoint. ErrorBodyResourceNotFound: summary: Not Found value: error_code: unknown_job_id message: The requested resource was not found. ValidationErrorVideoInputMediaTypeMissing: summary: Video input media type missing error value: error_code: validation_error message: Video input media type is required ValidationErrorAudioSourceBlank: summary: Audio source blank error value: error_code: validation_error message: Audio source URL cannot be blank ValidationErrorUnsupportedAudioMediaType: summary: Unsupported audio media type error value: error_code: validation_error message: Unsupported audio media type AudioInputToGenerateTranscriptFromTargetLanguageAudio: summary: Generate transcript from audio in target language (Spanish) value: audio: source: url: mediaType: audio/wav 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 ValidationErrorBlankTargetLocaleCode: summary: Blank target locale code error value: error_code: validation_error message: Target locale code cannot be blank ValidationErrorVideoSourceBlank: summary: Video source blank error value: error_code: validation_error message: Video source URL cannot be blank DubRequestUsingAudioEditedSourceTranscript: summary: Dub request using audio edited source transcript value: audio: source: url: mediaType: audio/wav transcripts: - source: url: targetLocaleCodes: - es-ES schemas: 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 TranscribeVideoInput: type: object properties: video: $ref: '#/components/schemas/VideoInput' required: - video description: The request body for transcribing video. VideoInputMediaType: type: string description: Media type of the video input. enum: - video/mp4 - video/mov - video/quicktime - video/x-msvideo - video/x-matroska AudioInputMediaType: type: string description: Media type of the audio input. enum: - audio/mp3 - audio/wav - audio/mpeg - audio/x-m4a - audio/aac Captions: type: object properties: targetFormats: type: array items: $ref: '#/components/schemas/TargetCaptionFormats' description: 'Accepted values: [''SRT'']' 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. 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. 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 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. DubRequest: type: object oneOf: - $ref: '#/components/schemas/DubAudioRequest' - $ref: '#/components/schemas/DubVideoRequest' description: The dub request body. 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/). 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. 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. TargetCaptionFormats: type: string description: Target caption format. enum: - SRT 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. 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. 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.