openapi: 3.0.3 info: title: Camb.AI Dubbing API description: 'The Camb.AI API provides generative voice AI - text-to-speech, dubbing, translation, voice discovery and cloning, and transcription - powered by the MARS (speech / voice) and BOLI (translation) research models. The REST API is served from https://client.camb.ai/apis and authenticated with an x-api-key header. Most operations are asynchronous: a POST starts a task and returns a task_id, the task is polled with a GET until its status is SUCCESS, and the result (audio, transcript, or translation) is then retrieved. Real-time streaming for TTS, transcription, and speech-to-speech translation is offered over separate public WebSocket channels (see the companion AsyncAPI document). Endpoint paths are grounded in the public documentation at https://docs.camb.ai; request and response schemas below are modeled from the documented parameters and may be simplified.' version: '1.0' contact: name: Camb.AI url: https://www.camb.ai servers: - url: https://client.camb.ai/apis description: Camb.AI production API security: - apiKeyAuth: [] tags: - name: Dubbing description: End-to-end video and audio dubbing across languages. paths: /dub: post: operationId: createDub tags: - Dubbing summary: Create an end-to-end dubbing task description: Starts an end-to-end dubbing task for a media file, translating and re-voicing it into one or more target languages while preserving delivery. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DubRequest' responses: '200': description: Dubbing task accepted. content: application/json: schema: $ref: '#/components/schemas/TaskCreated' '401': $ref: '#/components/responses/Unauthorized' /dub/{task_id}: get: operationId: getDubStatus tags: - Dubbing summary: Poll a dubbing task description: Returns the status and, when complete, the results of a dubbing task. parameters: - $ref: '#/components/parameters/TaskId' responses: '200': description: Current dubbing task status and results. content: application/json: schema: $ref: '#/components/schemas/TaskStatus' '401': $ref: '#/components/responses/Unauthorized' components: schemas: DubRequest: type: object required: - video_url - source_language - target_languages properties: video_url: type: string description: URL of the media file to dub. source_language: type: string description: Source language locale tag, for example en-us. target_languages: type: array description: Target language locale tags, for example ["es-es", "fr-fr"]. items: type: string Error: type: object properties: message: type: string code: type: string TaskCreated: type: object properties: task_id: type: string description: Identifier used to poll the task. TaskStatus: type: object properties: status: type: string description: Task status, for example PENDING, PROCESSING, SUCCESS, or FAILED. enum: - PENDING - PROCESSING - SUCCESS - FAILED run_id: type: integer description: Present when the task has completed; used to fetch the result. responses: Unauthorized: description: Missing or invalid API key. content: application/json: schema: $ref: '#/components/schemas/Error' parameters: TaskId: name: task_id in: path required: true description: The task identifier returned when the task was created. schema: type: string securitySchemes: apiKeyAuth: type: apiKey in: header name: x-api-key