> ## Documentation Index
> Fetch the complete documentation index at: https://docs.reedapt.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create dubs

> Dub a completed upload into one or more languages. Each language is one dub and
reserves its minutes now; they are returned if the dub fails or is cancelled.



## OpenAPI

````yaml /openapi.json post /dubs
openapi: 3.1.0
info:
  title: Reedapt Dubbing API
  description: >-
    Dub video and audio into other languages in the speaker's own voice.
    Authenticate with `Authorization: Bearer <key>`; make keys in Reedapt under
    Developers.
  version: 1.0.0
servers:
  - url: https://api.reedapt.com/v1
security:
  - apiKey: []
paths:
  /dubs:
    post:
      tags:
        - Dubs
      summary: Create dubs
      description: >-
        Dub a completed upload into one or more languages. Each language is one
        dub and

        reserves its minutes now; they are returned if the dub fails or is
        cancelled.
      operationId: create_dubs_dubs_post
      parameters:
        - name: idempotency-key
          in: header
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              Any unique string, up to 255 characters. Sending the same request
              again with the same key returns the first answer instead of doing
              the work twice. Kept for 24 hours.
            examples:
              - 7c1f6a52-2d4e-4bb1-9e0a-5f3d8c2b1a90
            title: Idempotency-Key
          description: >-
            Any unique string, up to 255 characters. Sending the same request
            again with the same key returns the first answer instead of doing
            the work twice. Kept for 24 hours.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DubIn'
            examples:
              Two languages:
                value:
                  upload_id: job_3f9a2c7e1b4d
                  source_language: en
                  target_languages:
                    - fr
                    - es
                  metadata:
                    order_id: '1042'
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DubsCreated'
              example:
                dubs:
                  - id: job_3f9a2c7e1b4d
                    object: dub
                    status: queued
                    stage: null
                    progress: 0
                    source_language: en
                    target_language: fr
                    audio: false
                    test: false
                    preview_seconds: null
                    duration_minutes: 12.4
                    created_at: '2026-10-28T09:12:44'
                    started_at: null
                    completed_at: null
                    error: null
                    metadata:
                      order_id: '1042'
                refused:
                  - target_language: es
                    code: LANGUAGE_NOT_IN_PLAN
                    message: Your plan doesn't include this language.
        '401':
          description: The key is missing, wrong or revoked.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '404':
          description: Nothing with this id belongs to the key's account.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '409':
          description: The request conflicts with the object's state; the code says which.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '422':
          description: The request is invalid; the code and `fields` say why.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '429':
          description: >-
            Too many requests, or a plan limit was reached. Wait for
            `Retry-After` seconds.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '503':
          description: >-
            A dependency is briefly unavailable. Retry after `Retry-After`
            seconds.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
components:
  schemas:
    DubIn:
      properties:
        upload_id:
          type: string
          title: Upload Id
          description: An upload whose status is `uploaded`.
          examples:
            - job_3f9a2c7e1b4d
        source_language:
          type: string
          maxLength: 10
          minLength: 2
          title: Source Language
          description: The language spoken in the file, as a code like `en`.
          examples:
            - en
        target_languages:
          items:
            type: string
          type: array
          maxItems: 30
          minItems: 1
          title: Target Languages
          description: >-
            One dub is made per language. GET /languages lists the codes your
            plan has.
          examples:
            - - fr
              - es
        voice_cloning:
          type: boolean
          title: Voice Cloning
          description: Dub in each speaker's own voice.
          default: true
        num_speakers:
          anyOf:
            - type: integer
              maximum: 20
              minimum: 1
            - type: 'null'
          title: Num Speakers
          description: How many people speak, if you know. Left out, we work it out.
          examples:
            - 2
        media_category:
          anyOf:
            - type: string
              maxLength: 32
            - type: 'null'
          title: Media Category
          description: What the media is, e.g. `film` or `sermon`. Optional.
        metadata:
          anyOf:
            - additionalProperties:
                type: string
              type: object
            - type: 'null'
          title: Metadata
          description: >-
            Your own keys and values, up to 2 KB, returned on the dub and its
            webhooks.
          examples:
            - order_id: '1042'
      type: object
      required:
        - upload_id
        - source_language
        - target_languages
      title: DubIn
    DubsCreated:
      properties:
        dubs:
          items:
            $ref: '#/components/schemas/Dub'
          type: array
          title: Dubs
          description: One per language that started.
        refused:
          items:
            $ref: '#/components/schemas/RefusedLanguage'
          type: array
          title: Refused
          description: Languages that could not be started. Nothing is reserved for them.
      type: object
      required:
        - dubs
      title: DubsCreated
    ErrorBody:
      properties:
        error:
          $ref: '#/components/schemas/ErrorDetail'
      type: object
      required:
        - error
      title: ErrorBody
    Dub:
      properties:
        id:
          type: string
          title: Id
          examples:
            - job_3f9a2c7e1b4d
        object:
          type: string
          const: dub
          title: Object
          default: dub
        status:
          type: string
          enum:
            - queued
            - processing
            - completed
            - failed
          title: Status
          description: '`completed` and `failed` are final.'
          examples:
            - processing
        stage:
          anyOf:
            - type: string
            - type: 'null'
          title: Stage
          description: >-
            What a processing dub is doing now. For display only; the values may
            change.
          examples:
            - transcribing
        progress:
          type: integer
          title: Progress
          description: 0 to 100.
          examples:
            - 35
        source_language:
          anyOf:
            - type: string
            - type: 'null'
          title: Source Language
          examples:
            - en
        target_language:
          anyOf:
            - type: string
            - type: 'null'
          title: Target Language
          examples:
            - fr
        audio:
          type: boolean
          title: Audio
          description: >-
            Whether the dub is audio (made from an audio file) rather than
            video.
        test:
          type: boolean
          title: Test
          description: >-
            Made with a test key: only the first seconds are dubbed, with a
            watermark.
        preview_seconds:
          anyOf:
            - type: integer
            - type: 'null'
          title: Preview Seconds
          description: For a test dub, how many seconds were dubbed.
          examples:
            - 60
        duration_minutes:
          anyOf:
            - type: number
            - type: 'null'
          title: Duration Minutes
          description: The media's length, which is what the dub costs.
          examples:
            - 12.4
        created_at:
          type: string
          format: date-time
          title: Created At
        started_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Started At
        completed_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Completed At
        error:
          anyOf:
            - $ref: '#/components/schemas/DubError'
            - type: 'null'
          description: Why a failed dub failed.
        metadata:
          additionalProperties:
            type: string
          type: object
          title: Metadata
          description: What you sent when creating it.
          examples:
            - order_id: '1042'
      type: object
      required:
        - id
        - status
        - progress
        - source_language
        - target_language
        - audio
        - test
        - created_at
      title: Dub
      example:
        audio: false
        completed_at: '2026-10-28T09:31:02'
        created_at: '2026-10-28T09:12:44'
        duration_minutes: 12.4
        id: job_3f9a2c7e1b4d
        metadata:
          order_id: '1042'
        object: dub
        progress: 100
        source_language: en
        started_at: '2026-10-28T09:12:51'
        status: completed
        target_language: fr
        test: false
    RefusedLanguage:
      properties:
        target_language:
          type: string
          title: Target Language
          examples:
            - sw
        code:
          type: string
          title: Code
          examples:
            - LANGUAGE_NOT_IN_PLAN
        message:
          type: string
          title: Message
          examples:
            - Your plan doesn't include this language.
      type: object
      required:
        - target_language
        - code
        - message
      title: RefusedLanguage
    ErrorDetail:
      properties:
        code:
          type: string
          title: Code
          description: Stable and machine-readable; branch on this, not on the message.
          examples:
            - UPLOAD_INCOMPLETE
        message:
          type: string
          title: Message
          description: What went wrong and what to do, in plain English.
          examples:
            - Complete the upload before dubbing it.
        request_id:
          type: string
          title: Request Id
          description: Quote it when you contact us about this request.
          examples:
            - req_8f2c1e0a9b7d6c5e4f3a
        fields:
          anyOf:
            - items:
                additionalProperties:
                  type: string
                type: object
              type: array
            - type: 'null'
          title: Fields
          description: >-
            On INVALID_REQUEST from validation: each field that is missing or
            invalid.
          examples:
            - - field: target_languages
                message: Field required
      type: object
      required:
        - code
        - message
        - request_id
      title: ErrorDetail
    DubError:
      properties:
        code:
          type: string
          title: Code
          examples:
            - NO_SPEECH
        message:
          type: string
          title: Message
          examples:
            - We couldn't hear anyone speaking in this file.
      type: object
      required:
        - code
        - message
      title: DubError
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      description: '`rk_live_…` or `rk_test_…`, made in Reedapt under Developers.'

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.