Murf API

REST API for Falcon TTS streaming, Gen 2 TTS, Dubbing, Voice Changer, Translation, and Voice Isolator. Falcon TTS streams at $0.01/min with under 130ms time-to-first-audio. Multi-region: us-east, us-west, India, plus global auto-routing. OpenAPI at https://murf.ai/api/docs/openapi.yaml.

OpenAPI Specification

murf-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: API Reference
  version: 1.0.0
paths:
  /v1/speech/stream:
    post:
      operationId: stream
      summary: Stream Speech
      description: >
        Synthesize speech with ultra-low latency over a streaming connection.

        Choose the `Base URL` from the URL dropdown (Global URL or a pinned Region)


        **Note**: Global URL auto-routes to the nearest region.

        | Region         | URL                                       | Default Concurrency |

        | ------------------------- | ---------------------------------------------- | -------------------- |

        | Global (Routes to the nearest server) | `https://global.api.murf.ai/v1/speech/stream`     | Region specific
        concurrency |

        | US-East                   | `https://us-east.api.murf.ai/v1/speech/stream`    | 15 |

        | US-West                   | `https://us-west.api.murf.ai/v1/speech/stream`    | 2 |

        | India                     | `https://in.api.murf.ai/v1/speech/stream`         | 2 |

        | Canada                    | `https://ca.api.murf.ai/v1/speech/stream`         | 2 |

        | South Korea               | `https://kr.api.murf.ai/v1/speech/stream`         | 2 |

        | UAE                       | `https://me.api.murf.ai/v1/speech/stream`         | 2 |

        | Japan                     | `https://jp.api.murf.ai/v1/speech/stream`         | 2 |

        | Australia                 | `https://au.api.murf.ai/v1/speech/stream`         | 2 |

        | EU (Central)              | `https://eu-central.api.murf.ai/v1/speech/stream` | 2 |

        | UK                        | `https://uk.api.murf.ai/v1/speech/stream`         | 2 |

        | South America (São Paulo) | `https://sa-east.api.murf.ai/v1/speech/stream`    | 2 |
      tags:
        - subpackage_textToSpeech
      parameters:
        - name: api-key
          in: header
          required: false
          schema:
            type: string
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/text_to_speech_stream_Response_200'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                description: Any type
        '402':
          description: Expired subscription or character limit exhausted
          content:
            application/json:
              schema:
                description: Any type
        '403':
          description: Invalid or expired token/api-key provided
          content:
            application/json:
              schema:
                description: Any type
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                description: Any type
        '503':
          description: Service Unavailable
          content:
            application/json:
              schema:
                description: Any type
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GenerateSpeechStreamingRequest'
  /v1/speech/generate:
    post:
      operationId: generate
      summary: Synthesize Speech
      description: Returns a url to the generated audio file along with other associated properties.
      tags:
        - subpackage_textToSpeech
      parameters:
        - name: api-key
          in: header
          required: false
          schema:
            type: string
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenerateSpeechResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                description: Any type
        '402':
          description: Expired subscription or character limit exhausted
          content:
            application/json:
              schema:
                description: Any type
        '403':
          description: Invalid or expired token/api-key provided
          content:
            application/json:
              schema:
                description: Any type
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                description: Any type
        '503':
          description: Service Unavailable
          content:
            application/json:
              schema:
                description: Any type
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GenerateSpeechRequest'
  /v1/speech/voices:
    get:
      operationId: get-voices
      summary: List Voices
      description: Returns a list of available voices for speech synthesis
      tags:
        - subpackage_textToSpeech
      parameters:
        - name: model
          in: query
          description: 'Valid values: FALCON, GEN2'
          required: false
          schema:
            type: string
            default: GEN2
        - name: token
          in: header
          required: false
          schema:
            type: string
        - name: api-key
          in: header
          required: false
          schema:
            type: string
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ApiVoice'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                description: Any type
        '403':
          description: Invalid or expired token provided
          content:
            application/json:
              schema:
                description: Any type
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                description: Any type
        '503':
          description: Service Unavailable
          content:
            application/json:
              schema:
                description: Any type
  /v1/voice-changer/convert:
    post:
      operationId: convert
      summary: Voice Changer
      description: Returns a url to the generated audio file along with other associated properties.
      tags:
        - subpackage_voiceChanger
      parameters:
        - name: api-key
          in: header
          required: false
          schema:
            type: string
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SpeechToSpeechResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                description: Any type
        '402':
          description: Expired subscription or character limit exhausted
          content:
            application/json:
              schema:
                description: Any type
        '403':
          description: Invalid or expired token/api-key provided
          content:
            application/json:
              schema:
                description: Any type
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                description: Any type
        '503':
          description: Service Unavailable
          content:
            application/json:
              schema:
                description: Any type
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                audio_duration:
                  type: number
                  format: double
                  description: >-
                    This parameter allows specifying the duration (in seconds) for the generated audio. If the value is
                    0, this parameter will be ignored. Only available for Gen2 model.
                channel_type:
                  type: string
                  default: MONO
                  description: 'Valid values: STEREO, MONO'
                encode_output_as_base64:
                  type: boolean
                  description: Set to true to receive audio in response as a Base64 encoded string along with a url.
                file:
                  type: string
                  format: binary
                  description: The file to upload
                file_url:
                  type: string
                format:
                  type: string
                  default: WAV
                  description: 'Format of the generated audio file. Valid values: MP3, WAV, FLAC, ALAW, ULAW'
                multi_native_locale:
                  type: string
                  description: >-
                    Specifies the language for the generated audio, enabling a voice to speak in multiple languages
                    natively. Only available in the Gen2 model.

                    Valid values: "en-US", "en-UK", "es-ES", etc.


                    Use the GET /v1/speech/voices endpoint to retrieve the list of available voices and languages.
                pitch:
                  type: integer
                  description: Pitch of the voiceover
                pronunciation_dictionary:
                  type: string
                  description: >-
                    A JSON string that defines custom pronunciations for specific words or phrases. Each key is a word
                    or phrase, and its value is an object with `type` and `pronunciation`.


                    Example 1: '{"live": {"type": "IPA", "pronunciation": "laɪv"}}'


                    Example 2: '{"2022": {"type": "SAY_AS", "pronunciation": "twenty twenty two"}}'
                rate:
                  type: integer
                  description: Speed of the voiceover
                retain_accent:
                  type: boolean
                  default: true
                  description: Set to true to retain the original accent of the speaker during voice generation.
                retain_prosody:
                  type: boolean
                  default: true
                  description: >-
                    Indicates whether to retain the original prosody (intonation, rhythm, and stress) of the input voice
                    in the generated output.
                return_transcription:
                  type: boolean
                  default: false
                  description: Set to true to include a textual transcription of the generated audio in the response.
                sample_rate:
                  type: number
                  format: double
                  default: 44100
                  description: Valid values are 8000, 24000, 44100, 48000
                style:
                  type: string
                  description: The voice style to be used for voiceover generation.
                transcription:
                  type: string
                  description: >-
                    This parameter allows specifying a transcription of the audio clip, which will then be used as input
                    for the voice changer
                variation:
                  type: integer
                  default: 1
                  description: >-
                    Higher values will add more variation in terms of Pause, Pitch, and Speed to the voice. Only
                    available for Gen2 model.
                voice_id:
                  type: string
                  description: >-
                    Use the GET /v1/speech/voices API to find supported voiceIds. You can use either the voiceId (e.g.
                    en-US-natalie) or just the voice actor's name (e.g. natalie).
              required:
                - voice_id
  /v1/text/translate:
    post:
      operationId: translate
      summary: Translate
      tags:
        - subpackage_text
      parameters:
        - name: api-key
          in: header
          required: false
          schema:
            type: string
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MurfApiTranslationResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                description: Any type
        '402':
          description: Expired subscription or character limit exhausted
          content:
            application/json:
              schema:
                description: Any type
        '403':
          description: Invalid or expired token provided
          content:
            application/json:
              schema:
                description: Any type
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                description: Any type
        '503':
          description: Service Unavailable
          content:
            application/json:
              schema:
                description: Any type
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MurfApiTranslationRequest'
  /v1/auth/token:
    get:
      operationId: generate-token
      summary: Generate auth token
      description: Generates an auth token for authenticating your requests
      tags:
        - subpackage_auth
      parameters:
        - name: api-key
          in: header
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthTokenResponse'
        '400':
          description: Bad request or missing api-key header
          content:
            application/json:
              schema:
                description: Any type
        '401':
          description: Bad api-key provided
          content:
            application/json:
              schema:
                description: Any type
        '503':
          description: Service Unavailable
          content:
            application/json:
              schema:
                description: Any type
  /v1/murfdub/list-destination-languages:
    get:
      operationId: list-destination-languages
      summary: List Destination Languages
      tags:
        - subpackage_dubbing.subpackage_dubbing/languages
      parameters:
        - name: api-key
          in: header
          description: Your Dub API key
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/LocaleResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                description: Any type
        '403':
          description: Invalid or expired token provided
          content:
            application/json:
              schema:
                description: Any type
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                description: Any type
        '503':
          description: Service Unavailable
          content:
            application/json:
              schema:
                description: Any type
  /v1/murfdub/list-source-languages:
    get:
      operationId: list-source-languages
      summary: List Source Languages
      tags:
        - subpackage_dubbing.subpackage_dubbing/languages
      parameters:
        - name: api-key
          in: header
          description: Your Dub API key
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/SourceLocaleResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                description: Any type
        '403':
          description: Invalid or expired token provided
          content:
            application/json:
              schema:
                description: Any type
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                description: Any type
        '503':
          description: Service Unavailable
          content:
            application/json:
              schema:
                description: Any type
  /v1/murfdub/jobs/create:
    post:
      operationId: create
      summary: Create
      tags:
        - subpackage_dubbing.subpackage_dubbing/jobs
      parameters:
        - name: api-key
          in: header
          description: Your Dub API key
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiJobResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                description: Any type
        '403':
          description: Invalid or expired token provided
          content:
            application/json:
              schema:
                description: Any type
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                description: Any type
        '503':
          description: Service Unavailable
          content:
            application/json:
              schema:
                description: Any type
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file:
                  type: string
                  format: binary
                  description: The file to upload
                file_url:
                  type: string
                source_locale:
                  type: string
                  description: Source locale
                target_locales:
                  type: array
                  items:
                    type: string
                  description: List of target locales
                webhook_url:
                  type: string
                file_name:
                  type: string
                priority:
                  $ref: '#/components/schemas/V1MurfdubJobsCreatePostRequestBodyContentMultipartFormDataSchemaPriority'
                  description: 'Priority of the job. Allowed values: LOW, NORMAL, HIGH'
                webhook_secret:
                  type: string
              required:
                - target_locales
  /v1/murfdub/jobs/create-with-project-id:
    post:
      operationId: create-with-project-id
      summary: Create With Project Id
      tags:
        - subpackage_dubbing.subpackage_dubbing/jobs
      parameters:
        - name: api-key
          in: header
          description: Your Dub API key
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiJobResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                description: Any type
        '403':
          description: Invalid or expired token provided
          content:
            application/json:
              schema:
                description: Any type
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                description: Any type
        '503':
          description: Service Unavailable
          content:
            application/json:
              schema:
                description: Any type
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file:
                  type: string
                  format: binary
                  description: The file to upload
                file_url:
                  type: string
                project_id:
                  type: string
                  description: Your Project Id
                webhook_url:
                  type: string
                file_name:
                  type: string
                priority:
                  $ref: >-
                    #/components/schemas/V1MurfdubJobsCreateWithProjectIdPostRequestBodyContentMultipartFormDataSchemaPriority
                  description: 'Priority of the job. Allowed values: LOW, NORMAL, HIGH'
                webhook_secret:
                  type: string
              required:
                - project_id
  /v1/murfdub/jobs/{job_id}/status:
    get:
      operationId: get-status
      summary: Get Status
      tags:
        - subpackage_dubbing.subpackage_dubbing/jobs
      parameters:
        - name: job_id
          in: path
          required: true
          schema:
            type: string
        - name: api-key
          in: header
          description: Your Dub API key
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DubJobStatusResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                description: Any type
        '403':
          description: Invalid or expired token provided
          content:
            application/json:
              schema:
                description: Any type
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                description: Any type
        '503':
          description: Service Unavailable
          content:
            application/json:
              schema:
                description: Any type
  /v1/murfdub/projects/create:
    post:
      operationId: create
      summary: Create
      tags:
        - subpackage_dubbing.subpackage_dubbing/projects
      parameters:
        - name: api-key
          in: header
          description: Your Dub API key
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiProjectResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                description: Any type
        '403':
          description: Invalid or expired token provided
          content:
            application/json:
              schema:
                description: Any type
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                description: Any type
        '503':
          description: Service Unavailable
          content:
            application/json:
              schema:
                description: Any type
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApiCreateProjectRequest'
  /v1/murfdub/projects/list:
    get:
      operationId: list
      summary: List
      tags:
        - subpackage_dubbing.subpackage_dubbing/projects
      parameters:
        - name: limit
          in: query
          description: Number of Projects in response
          required: false
          schema:
            type: integer
        - name: next
          in: query
          description: Next Page Iterator
          required: false
          schema:
            type: string
        - name: api-key
          in: header
          description: Your Dub API key
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GroupApiProjectResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                description: Any type
        '403':
          description: Invalid or expired token provided
          content:
            application/json:
              schema:
                description: Any type
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                description: Any type
        '503':
          description: Service Unavailable
          content:
            application/json:
              schema:
                description: Any type
  /v1/murfdub/projects/{project_id}/update:
    put:
      operationId: update
      summary: Update
      tags:
        - subpackage_dubbing.subpackage_dubbing/projects
      parameters:
        - name: project_id
          in: path
          required: true
          schema:
            type: string
        - name: api-key
          in: header
          description: Your Dub API key
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiProjectResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                description: Any type
        '403':
          description: Invalid or expired token provided
          content:
            application/json:
              schema:
                description: Any type
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                description: Any type
        '503':
          description: Service Unavailable
          content:
            application/json:
              schema:
                description: Any type
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApiUpdateProjectRequest'
servers:
  - url: https://api.murf.ai
  - url: https://global.api.murf.ai
  - url: https://us-east.api.murf.ai
  - url: https://us-west.api.murf.ai
  - url: https://in.api.murf.ai
  - url: https://ca.api.murf.ai
  - url: https://kr.api.murf.ai
  - url: https://me.api.murf.ai
  - url: https://jp.api.murf.ai
  - url: https://au.api.murf.ai
  - url: https://eu-central.api.murf.ai
  - url: https://uk.api.murf.ai
  - url: https://sa-east.api.murf.ai
components:
  schemas:
    PronunciationDetailType:
      type: string
      enum:
        - IPA
        - SAY_AS
      title: PronunciationDetailType
    PronunciationDetail:
      type: object
      properties:
        pronunciation:
          type: string
        type:
          $ref: '#/components/schemas/PronunciationDetailType'
      description: |-
        An object used to define custom pronunciations. 

         Example 1: {"live":{"type": "IPA", "pronunciation": "laɪv"}}. 

         Example 2: {"2022":{"type": "SAY_AS", "pronunciation": "twenty twenty two"}}
      title: PronunciationDetail
    GenerateSpeechStreamingRequest:
      type: object
      properties:
        model:
          type: string
          description: >-
            The model to use for audio output. Defaults to FALCON for all the regions except US-East. Valid values:
            FALCON, GEN2
        channelType:
          type: string
          default: MONO
          description: 'Valid values: STEREO, MONO'
        format:
          type: string
          default: WAV
          description: 'Format of the generated audio file.Valid values: MP3, FLAC, WAV, ALAW, ULAW, OGG, PCM'
        multiNativeLocale:
          type: string
          description: >-
            This field is superseded by `locale` field. Please migrate to `locale` field to ensure compatibility with
            future API versions.


            Specifies the language for the generated audio, enabling a voice to speak in multiple languages natively.

            Valid values: "en-US", "en-UK", "es-ES", etc. Use the GET /v1/speech/voices endpoint to retrieve the list of
            available voices and languages.
        locale:
          type: string
          description: >-
            Specifies the language for the generated audio, enabling a voice to speak in multiple languages natively.

            Valid values: "en-US", "en-UK", "es-ES", etc. Use the GET /v1/speech/voices endpoint to retrieve the list of
            available voices and languages.
        pitch:
          type: integer
          description: Pitch of the voiceover
        pronunciationDictionary:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/PronunciationDetail'
          description: |-
            An object used to define custom pronunciations. 

             Example 1: {"live":{"type": "IPA", "pronunciation": "laɪv"}}. 

             Example 2: {"2022":{"type": "SAY_AS", "pronunciation": "twenty twenty two"}}
        rate:
          type: integer
          description: Speed of the voiceover
        sampleRate:
          type: number
          format: double
          default: 24000
          description: >-
            Valid values are 8000, 16000, 24000, 44100, 48000. Defaults to 24000 for Falcon model and 44100 for Gen2
            model.
        style:
          type: string
          description: The voice style to be used for voiceover generation.
        text:
          type: string
          description: The text that is to be synthesised. e.g. 'Hello there [pause 1s] friend'
        variation:
          type: integer
          default: 1
          description: >-
            Higher values will add more variation in terms of Pause, Pitch, and Speed to the voice. Only available for
            Gen2 model.
        voiceId:
          type: string
          description: >-
            Use the GET /v1/speech/voices API to find supported voiceIds. You can use either the voiceId (e.g.
            en-US-natalie) or just the voice actor's name (e.g. natalie).
      required:
        - text
        - voiceId
      title: GenerateSpeechStreamingRequest
    text_to_speech_stream_Response_200:
      type: object
      properties: {}
      description: Empty response body
      title: text_to_speech_stream_Response_200
    GenerateSpeechRequestModelVersion:
      type: string
      enum:
        - GEN2
      default: GEN2
      description: >-
        Valid values: GEN2. Audio will be generated using the new and advanced GEN2 model. Outputs from GEN2 sound more
        natural and high-quality compared to earlier models.
      title: GenerateSpeechRequestModelVersion
    GenerateSpeechRequest:
      type: object
      properties:
        audioDuration:
          type: number
          format: double
          description: >-
            This parameter allows specifying the duration (in seconds) for the generated audio. If the value is 0, this
            parameter will be ignored. Only available for Gen2 model.
        channelType:
          type: string
          default: MONO
          description: 'Valid values: STEREO, MONO'
        encodeAsBase64:
          type: boolean
          description: >-
            Set to true to receive audio in response as a Base64 encoded string instead of a url. This enables zero
            retention of audio data on Murf'

# --- truncated at 32 KB (46 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/murf/refs/heads/main/openapi/murf-openapi.yml