Developer platform

Put Unmixr voices inside your product

One REST API for text to speech, your cloned voices, and long-form narration. Send JSON, get audio back — synchronously for short copy, or as a background job that calls your server the moment each paragraph is ready.

  • REST over HTTPS, JSON in and out
  • Bearer token auth
  • MP3 or WAV
  • 100+ languages
POST /api/v2/short-tts/ cURL
curl -X POST 'https://unmixr.com/api/v2/short-tts/' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "text": "Welcome back. [pause:500ms] Ready.",
    "voice_id": "VOICE_UUID",
    "output_format": "mp3",
    "response_type": "url"
}'

Everything you can call

The whole surface, from picking a voice to checking what a job will cost. Base URL https://unmixr.com/api/v2/.

POST /short-tts/

Synchronous speech for up to 2,000 characters. The audio comes back in the same response as a URL, base64, or raw bytes.

POST /long-tts/

Full scripts as a background job. Returns 202 immediately, then generates paragraph by paragraph with its own audio file for each.

GET /long-tts/:project_id/

Job status and finished audio, for when you would rather poll than receive callbacks.

GET /voices/

The voice catalog, filterable by language and gender. Retrieve a single voice with /voices/:uuid/.

GET /cloned-voices/

Voices cloned on your own account. They take the same voice id as any catalog voice.

GET /credits/

Your credit balance plus the request limits currently in force for your plan.

POST /credits/estimate/

Prices a request before you run it. Free to call, and nothing is generated.

Two ways to generate

Short copy answers in the same request. Anything book-length runs as a job so a slow chapter never holds a connection open.

Short TTS

Synchronous. Best for chat replies, notifications, IVR prompts, and anything a user is waiting on.

  • Up to 2,000 characters per request
  • Audio returned as url, base64, or bytes
  • Inline direction: [pause:500ms], [style:cheerful]
  • Optional per-request pronunciations that override your library

Long TTS

Asynchronous. Built for audiobooks, courses, and articles where the script arrives all at once.

  • Responds 202 immediately, generates per paragraph
  • A separate audio file per paragraph, plus chapter structure
  • Signed callbacks as each paragraph lands, or poll the status endpoint
  • Credits are consumed per paragraph as it succeeds, not up front

Automate the whole loop

Callbacks and credit checks are part of the API, so a pipeline can run start to finish without anyone watching it.

Signed callbacks

Give a generation request a callback URL and Unmixr posts JSON to it as work completes.

  • Events for completion and failure, per paragraph and per project
  • Every delivery is signed, so you can verify it came from Unmixr
  • The status endpoint stays available as a fallback

Know the cost first

Estimate before you spend, and read your own limits rather than hard-coding them.

  • POST /credits/estimate/ prices a request for free
  • GET /credits/ returns balance and live plan limits
  • Failed work is never charged, so retries stay safe

Request limits by plan

How much one Long TTS request can carry. These are sizes of input text — billing is separate and always in credits.

Plan Text per request Paragraphs Chapters
Standard 30,000 characters 100 20
Premium / Starter 60,000 characters 200 40
Pro 100,000 characters 350 60
Studio / Teams 200,000 characters 500 100

Every plan allows 5,000 characters per paragraph. Your own numbers are always available under long_tts_limits in GET /api/v2/credits/, and a request over the limit is rejected with a 422 rather than partially generated.

Live in three steps

No SDK to install and no build step — if your language can make an HTTP request, it can call Unmixr.

1

Create a key

Generate an API key under Manage API Keys in the app and send it as Authorization: Bearer.

2

Pick a voice

Call /voices/ and keep the uuid you want, or use one you have cloned on your account.

3

Generate

Post your script to /short-tts/ or /long-tts/ and take the audio.

Start building

The reference has runnable cURL, Python, and JavaScript for every endpoint. Try a call in the playground first if you would rather not write code yet.

FAQ

Unmixr API: Frequently Asked Questions

Have a question? Check out our frequently asked questions to find your answer.

What can I build with the Unmixr API?

Generate speech from text, browse the voice catalog, use the voices you have cloned, and run long-form narration jobs that call your server back as each paragraph finishes. Everything is REST over HTTPS with JSON requests and responses.

How do I authenticate?

Create an API key in the Unmixr app under Manage API Keys, then send it as a bearer token: Authorization: Bearer YOUR_API_KEY. The base URL is https://unmixr.com/api/v2/.

What is the difference between Short TTS and Long TTS?

Short TTS is synchronous and takes up to 2,000 characters per request, returning the audio in the same response. Long TTS accepts a full script, responds immediately with HTTP 202, generates paragraph by paragraph, and delivers a signed callback for each one. You can also poll the status endpoint.

How much does a request cost?

Requests are billed in credits from your plan balance. POST /api/v2/credits/estimate/ prices a request before you generate anything and is free to call, and GET /api/v2/credits/ returns your current balance along with your plan's request limits.

How large can a single request be?

Short TTS accepts up to 2,000 characters. Long TTS depends on your plan, from 30,000 characters per request on Standard up to 200,000 on Studio and Teams. Requests above your plan's limit are rejected with a 422 response rather than partially generated.

What audio formats does the API return?

MP3 or WAV. Short TTS can hand the audio back as a download URL, as base64, or as raw bytes, so you can stream it straight to a caller or store it yourself.

Can I use my cloned voices through the API?

Yes. GET /api/v2/cloned-voices/ lists the voices on your account, and they are used exactly like catalog voices by passing the voice id on a generation request.

Can one script use more than one voice?

Yes. Define named characters on the request and switch between them inline with [character:Name]. Text outside a switch is narrated by the request's default voice.

What happens if a generation fails?

Nothing is charged for work that does not complete. Failures arrive as a speech.failed callback event (or on the status endpoint) with the reason attached, so a retry is a normal, safe operation.

Still have a question?

If you have a specific use case or need help configuring a custom workflow, our team is always here for you. We would love to listen to your needs!