DeepL Voice Translate Job API

**Alpha.** Async voice translation jobs. This API may change without notice.

Operations 2

POST /v1/jobs/voice/translate Create a voice translation job #
GET /v1/jobs/voice/translate/{job_id} Get voice translation job status #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/deepl:deepl-voicetranslatejob-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

deepl-voicetranslatejob-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: DeepL API Documentation Voice Translate Job API
  description: 'The DeepL API provides programmatic access to DeepL’s language AI technology.


    Note: this OpenAPI spec is embedded into our API documentation and has shortened descriptions.'
  termsOfService: https://www.deepl.com/pro-license
  contact:
    name: DeepL - Contact us
    url: https://www.deepl.com/contact-us
  version: 3.13.0
servers:
- url: https://api.deepl.com
  description: DeepL API Pro
- url: https://api-free.deepl.com
  description: DeepL API Free
tags:
- name: VoiceTranslateJob
  description: '**Alpha.** Async voice translation jobs. This API may change without notice.'
paths:
  /v1/jobs/voice/translate:
    post:
      tags:
      - VoiceTranslateJob
      operationId: createVoiceTranslateJob
      summary: Create a voice translation job
      description: Creates an async voice translation job. The response includes an upload URL for the source audio file.
      security:
      - auth_header: []
      parameters:
      - $ref: '#/components/parameters/VoiceTranslateJobIncludeParam'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VoiceTranslateCreateJobRequest'
            example:
              source_file:
                name: podcast-episode-42.mp3
                content_type: audio/mpeg
                content_length: 15728640
              parameters:
                source_language: en
              targets:
              - language: de
                type: text/plain
              - language: es
                type: audio/pcm;encoding=s16le;rate=16000
      responses:
        '201':
          description: Job created successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VoiceTranslateCreateJobResponse'
              example:
                job_id: a74d88fb-ed2a-4943-a664-a4512398b994
                upload_url: https://assets.deepl.com/collections/a74d88fb-ed2a-4943-a664-a4512398b994/assets/b1c2d3e4-f5a6-7890-abcd-ef1234567890
                signature: eyJhbGciOiJIUzI1NiIs...
        '400':
          $ref: '#/components/responses/VoiceTranslateJobBadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/jobs/voice/translate/{job_id}:
    get:
      tags:
      - VoiceTranslateJob
      operationId: getVoiceTranslateJobStatus
      summary: Get voice translation job status
      description: 'Returns the current status of a voice translation job, including per-target result statuses.


        When a target''s status is `complete`, the response includes a `download_url` and `signature` for that target. Results are returned in the same order as the targets in the create request.'
      security:
      - auth_header: []
      parameters:
      - $ref: '#/components/parameters/VoiceTranslateJobIdParam'
      - $ref: '#/components/parameters/VoiceTranslateJobIncludeParam'
      responses:
        '200':
          description: Job status retrieved successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VoiceTranslateJobStatusResponse'
              examples:
                processing:
                  summary: Job still processing
                  value:
                    job_id: a74d88fb-ed2a-4943-a664-a4512398b994
                    product: voice
                    operation: translate
                    created_at: '2026-10-01T01:03:03.444Z'
                    updated_at: '2026-10-01T04:03:03.333Z'
                    usage:
                      storage_used: 31457280
                    source_file:
                      name: podcast-episode-42.mp3
                      content_type: audio/mpeg
                      content_length: 15728640
                    parameters:
                      source_language: en
                    targets:
                    - language: de
                      type: text/plain
                    - language: es
                      type: audio/pcm;encoding=s16le;rate=16000
                    results:
                    - status: processing
                    - status: processing
                complete:
                  summary: Job with mixed results
                  value:
                    job_id: a74d88fb-ed2a-4943-a664-a4512398b994
                    product: voice
                    operation: translate
                    created_at: '2026-10-01T01:03:03.444Z'
                    updated_at: '2026-10-01T04:03:03.333Z'
                    usage:
                      storage_used: 31457280
                    source_file:
                      name: podcast-episode-42.mp3
                      content_type: audio/mpeg
                      content_length: 15728640
                    parameters:
                      source_language: en
                    targets:
                    - language: de
                      type: text/plain
                    - language: es
                      type: audio/pcm;encoding=s16le;rate=16000
                    results:
                    - status: complete
                      download_url: https://assets.deepl.com/collections/a74d88fb/assets/c3d4e5f6
                      signature: eyJhbGciOiJIUzI1NiIs...
                    - status: failed
                      error:
                        message: processing failed
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
components:
  parameters:
    VoiceTranslateJobIncludeParam:
      name: include
      in: query
      required: false
      description: 'Additional fields to include in the response.

        - `signed_url`: Include pre-signed URLs (`signed_upload_url` on create, `signed_download_url` on status) that can be used without an authorization header.'
      schema:
        type: array
        items:
          type: string
          enum:
          - signed_url
      style: form
      explode: true
    VoiceTranslateJobIdParam:
      name: job_id
      in: path
      required: true
      description: The unique identifier of the job, returned by the create job endpoint.
      schema:
        type: string
        format: uuid
        example: a74d88fb-ed2a-4943-a664-a4512398b994
  responses:
    Unauthorized:
      description: Authorization failed. Please supply a valid `DeepL-Auth-Key` via the `Authorization` header.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    VoiceTranslateJobBadRequest:
      description: Bad request. Check the error message and request parameters.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            message: '/targets/0/type: Value is not valid'
    TooManyRequests:
      description: Too many requests. Please wait and resend your request.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    NotFound:
      description: The requested resource could not be found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    Forbidden:
      description: Authorization failed. Please supply a valid `DeepL-Auth-Key` via the `Authorization` header.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  schemas:
    SourceLanguage:
      type: string
      description: 'Language of the text to be translated. If this parameter is omitted, the API will attempt to

        detect the language of the text and translate it.


        For the full list of supported source languages, see [supported languages](https://developers.deepl.com/docs/getting-started/supported-languages) or query the [`GET /v3/languages` endpoint](https://developers.deepl.com/docs/languages/using-the-languages-api).'
      example: EN
    VoiceTranslateJobTargetResponse:
      type: object
      description: A translation target as recorded on the job.
      required:
      - language
      - type
      properties:
        language:
          $ref: '#/components/schemas/TargetLanguage'
        type:
          $ref: '#/components/schemas/VoiceTranslateJobTargetOutputType'
    ErrorResponse:
      type: object
      required:
      - message
      properties:
        message:
          type: string
          description: A human-readable description of the error.
        code:
          type: string
          description: A machine-readable identifier for the error, when available. Clients should match on this value rather than on `message` when branching on error types.
          example: invalid_content_type
    VoiceTranslateJobParametersResponse:
      type: object
      description: Processing parameters as applied to the voice translation job.
      properties:
        source_language:
          allOf:
          - $ref: '#/components/schemas/SourceLanguage'
          - description: Language of the source audio.
    VoiceTranslateCreateJobRequest:
      type: object
      required:
      - source_file
      - targets
      properties:
        source_file:
          $ref: '#/components/schemas/JobSourceFileRequest'
        parameters:
          $ref: '#/components/schemas/VoiceTranslateJobParametersRequest'
        targets:
          type: array
          minItems: 1
          description: One or more translation targets. Each target produces a separate result.
          items:
            $ref: '#/components/schemas/VoiceTranslateJobTargetRequest'
    ResultStatus:
      type: string
      description: 'The processing status of a target result.

        - `pending`: Job created, awaiting file upload.

        - `uploaded`: File uploaded, awaiting processing.

        - `processing`: Translation in progress.

        - `complete`: Translation complete, result available for download.

        - `downloaded`: Result has been downloaded. Assets are marked for deletion.

        - `failed`: Processing failed. See the `error` field for details.'
      enum:
      - pending
      - uploaded
      - processing
      - complete
      - downloaded
      - failed
    TargetLanguage:
      type: string
      description: 'The language into which the text should be translated.


        For the full list of supported target languages, see [supported languages](https://developers.deepl.com/docs/getting-started/supported-languages) or query the [`GET /v3/languages` endpoint](https://developers.deepl.com/docs/languages/using-the-languages-api).'
      example: DE
    VoiceTranslateJobTargetOutputType:
      type: string
      description: The desired output format for the translation target.
      enum:
      - text/plain
      - application/x-subrip
      - audio/opus
      - audio/flac
      - audio/pcm;encoding=s16le;rate=16000
      - audio/pcm;encoding=s16le;rate=24000
      - audio/pcm;encoding=ulaw;rate=8000
      - audio/pcm;encoding=alaw;rate=8000
      - audio/x-matroska;codecs=aac
      - audio/x-matroska;codecs=flac
      - audio/x-matroska;codecs=opus
      - audio/x-matroska;codecs=pcm_s16le;rate=16000
      - audio/x-matroska;codecs=pcm_s16le;rate=24000
      - video/mp2t;codecs=aac
      - video/mp2t;codecs=opus
      - audio/ogg;codecs=flac
      - audio/ogg;codecs=opus
      - audio/webm;codecs=opus
    VoiceTranslateJobParametersRequest:
      type: object
      description: Processing parameters for the voice translation job.
      properties:
        source_language:
          allOf:
          - $ref: '#/components/schemas/SourceLanguage'
          - description: Language of the source audio. If omitted, the language is detected automatically.
    VoiceTranslateJobStatusResponse:
      type: object
      required:
      - job_id
      - product
      - operation
      - created_at
      - updated_at
      - usage
      - source_file
      - parameters
      - targets
      - results
      properties:
        job_id:
          type: string
          format: uuid
          description: The unique identifier of the job.
        product:
          type: string
          description: The product identifier.
          example: voice
        operation:
          type: string
          description: The operation identifier.
          example: translate
        created_at:
          type: string
          format: date-time
          description: When the job was created (ISO 8601).
        updated_at:
          type: string
          format: date-time
          description: When the job was last updated (ISO 8601).
        usage:
          $ref: '#/components/schemas/JobUsage'
        source_file:
          $ref: '#/components/schemas/JobSourceFileResponse'
        parameters:
          $ref: '#/components/schemas/VoiceTranslateJobParametersResponse'
        targets:
          type: array
          description: The translation targets as specified in the create request.
          items:
            $ref: '#/components/schemas/VoiceTranslateJobTargetResponse'
        results:
          type: array
          description: Per-target processing results, in the same order as the `targets` array.
          items:
            $ref: '#/components/schemas/VoiceTranslateJobTargetResult'
    VoiceTranslateJobTargetResult:
      type: object
      description: The processing result for a single translation target.
      required:
      - status
      properties:
        status:
          $ref: '#/components/schemas/ResultStatus'
        download_url:
          type: string
          format: uri
          description: 'The URL to download the translated result via `GET`.

            Requires the `Authorization: DeepL-Signature {signature}` header.

            Only present when `status` is `complete`.

            See [Download Result](/api-reference/jobs-voice-translate#download-result) for details.'
        signature:
          type: string
          description: A short-lived token used to authorize the result download. Only present when `status` is `complete`.
        signed_download_url:
          type: string
          format: uri
          description: A pre-signed download URL that does not require an authorization header. Only present when `status` is `complete` and `?include=signed_url` is specified.
        error:
          allOf:
          - $ref: '#/components/schemas/ErrorResponse'
          description: Details about the processing failure. Only present when `status` is `failed`.
    VoiceTranslateCreateJobResponse:
      type: object
      required:
      - job_id
      - upload_url
      - signature
      properties:
        job_id:
          type: string
          format: uuid
          description: The unique identifier of the created job.
        upload_url:
          type: string
          format: uri
          description: 'The URL to upload the source audio file to via `PUT` with `Content-Type: application/octet-stream`.

            Requires the `Authorization: DeepL-Signature {signature}` header.

            See [Upload File](/api-reference/jobs-voice-translate#upload-file) for details.'
        signature:
          type: string
          description: A short-lived token used to authorize the file upload. Pass it via the `Authorization` header as `DeepL-Signature {signature}` when uploading to the `upload_url`.
        signed_upload_url:
          type: string
          format: uri
          description: A pre-signed upload URL that does not require an authorization header. Only present when `?include=signed_url` is specified.
    VoiceTranslateJobTargetRequest:
      type: object
      description: A translation target specifying the desired output language and format.
      required:
      - language
      - type
      properties:
        language:
          $ref: '#/components/schemas/TargetLanguage'
        type:
          $ref: '#/components/schemas/VoiceTranslateJobTargetOutputType'
    JobUsage:
      type: object
      properties:
        storage_used:
          type: integer
          format: int64
          description: Total storage used by this job in bytes, including source and output files.
    JobSourceFileRequest:
      type: object
      description: Metadata about the source audio file to be uploaded.
      required:
      - name
      - content_type
      - content_length
      properties:
        name:
          type: string
          minLength: 1
          description: The file name of the source audio file.
          example: podcast-episode-42.mp3
        content_type:
          $ref: '#/components/schemas/VoiceTranslateJobSourceContentType'
        content_length:
          type: integer
          format: int64
          minimum: 1
          maximum: 1073741824
          description: The size of the source audio file in bytes. Maximum 1 GB (1,073,741,824 bytes).
          example: 15728640
    JobSourceFileResponse:
      type: object
      description: Metadata about the uploaded source audio file.
      required:
      - name
      - content_type
      - content_length
      properties:
        name:
          type: string
          description: The file name of the source audio file.
        content_type:
          type: string
          description: The MIME type of the source audio file.
        content_length:
          type: integer
          format: int64
          description: The size of the source audio file in bytes.
    VoiceTranslateJobSourceContentType:
      type: string
      description: The MIME type of the source audio file.
      enum:
      - audio/mpeg
      - audio/wav
      - audio/ogg
      - audio/flac
      - audio/mp4
      - audio/webm
  securitySchemes:
    auth_header:
      type: apiKey
      description: 'Authentication with `Authorization` header and `DeepL-Auth-Key` authentication scheme. Example: `DeepL-Auth-Key <api-key>`

        '
      name: Authorization
      in: header
      x-default: 'DeepL-Auth-Key '
externalDocs:
  description: DeepL Pro - Plans and pricing
  url: https://www.deepl.com/pro#developer
x-hideTryItPanel: true
x-codeSamples: false
x-provenance:
  method: harvested
  publisher: DeepL
  source: https://developers.deepl.com/api-reference/openapi.yaml
  note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
    stamped by stamp-openapi-provenance.py (roadmap#793)