Migration guides / Hume Octave
Move Hume Octave TTS calls to Cartesia
Hume's Octave TTS and EVI APIs stop answering at 12:01 a.m. EST on November 13, 2026, so every Hume AI voice integration needs a replacement live before then.
Why migrate from Hume Octave now
Dated changes on the Hume Octave side, each linked to the page that announces it.
Hume's docs move to Audio Decisions
Hume's changelog announces the Audio Decisions API, and the old Octave documentation URLs now redirect to it. Keep your own copy of any TTS reference you still use.
Hume changelogOctave and EVI access ends and account data is deleted
After the cutoff Hume permanently deletes the data in your account. Anything you have not downloaded by then is gone.
Hume developer docs (archived Oct 3, 2026)Migrate from Hume Octave with your coding agent
Paste this into Claude Code, Cursor or Codex in the repo that calls Hume Octave. It carries the field mapping, the Cartesia request and a rollout that keeps Hume Octave behind a flag until you switch.
Prompt
Move this codebase from Hume Octave to Cartesia for text to speech. Keep Hume Octave working behind a flag until I switch over.
Deadline (API shutdown): November 13, 2026. Hume's archived developer docs say the TTS and EVI APIs stay fully supported until this cutoff and end at 12:01 a.m. EST. Save the source recordings behind your cloned voices, and any generated audio you still need, while the account exists.
November 2, 2026: Hume's docs move to Audio Decisions. Hume's changelog announces the Audio Decisions API, and the old Octave documentation URLs now redirect to it. Keep your own copy of any TTS reference you still use. (https://dev.hume.ai/changelog)
## 1. Find the calls
Search for `api.hume.ai` or `HUME_API_KEY`. The request to replace is `POST /v0/tts` with an `utterances` array. List every call site before you edit anything.
## 2. Target
- Request: `POST https://api.cartesia.ai/tts/bytes`
- Model: `model_id: "sonic-3.6"`
- Headers: `X-API-Key` read from the `CARTESIA_API_KEY` environment variable, and `Cartesia-Version: 2026-08-14`
- Auth swap: Hume Octave sends the key in `X-Hume-Api-Key` header from `HUME_API_KEY`. Replace it with `X-API-Key` from `CARTESIA_API_KEY` on the Cartesia path only, and keep `HUME_API_KEY` for the Hume Octave path. Hume keys stop working at the November 13 cutoff.
- Add `CARTESIA_API_KEY` wherever the project documents its environment (`.env.example`, README, deploy config). Never hardcode the key.
- Concurrency: Hume Octave allows Hume capped TTS requests per minute: 15 on Free and Starter, 75 on Creator and Pro, 150 on Scale and 225 on Business. Look up the Cartesia plan's concurrent request limit at https://www.cartesia.ai/pricing, cap parallel requests at it, and retry rate-limit errors with backoff.
- Voice IDs don't carry over. Keep each voice ID in one named constant or config value, put a placeholder where each Hume Octave voice was, and list them for me so I can pick replacements at https://www.cartesia.ai/voices.
- Suggested starting points to put in those placeholders, for me to confirm by ear: Empathic support agent, female → `d7bf7d75-64b7-4c1e-86c0-79d647366587` (Michelle - Empathetic Voice); Empathic support agent, male → `7d444628-dd13-442b-b687-71a6baf0c07e` (Joseph - Empathetic Voice); Expressive narration and character reads → `083de431-6b5c-4b18-a2dc-264eafa205f2` (Diana - Animated Narrator); Calm wellness or meditation content → `3ccc4544-84f7-45e3-ae57-5c52b5a1fac6` (Aiden - Yogi).
## 3. Field mapping, Hume Octave → Cartesia
- `POST /v0/tts` with an `utterances` array → `POST /tts/bytes`, one request per utterance. For a continuing conversation, use one WebSocket context.
- `X-Hume-Api-Key` header → `X-API-Key` and `Cartesia-Version: 2026-08-14`
- `utterances[].text` → `transcript`
- `utterances[].voice` by `name` or `id` → `voice`: `{"id": "<voice id>"}`. Hume voices don't export, so you rebuild each one on Cartesia.
- `utterances[].description` (acting instructions or voice design) → `generation_config.emotion` plus a chosen voice. Free-text descriptions have no equivalent. Pick the closest voice and an emotion, then test on your scripts.
- `utterances[].speed` → `generation_config.speed` (0.6 to 1.5)
- `utterances[].trailing_silence` → A `<break>` tag at the end of the `transcript`
- `context`: earlier utterances or a generation to continue from → One WebSocket `context_id` with `continue: true`. `/tts/bytes` has no context field, so each request starts fresh.
- `include_timestamp_types`: `word`, `phoneme` → TTS WebSocket with `add_timestamps` or `add_phoneme_timestamps`. `/tts/bytes` returns audio with no timestamps.
- `format`: `mp3`, `wav` or `pcm` → `output_format` with `container` `mp3`, `wav` or `raw`
- `generations[].audio`, base64 in JSON → The response body is the audio. Drop the base64 decode.
## 4. Hume Octave fields with no Cartesia equivalent
- `num_generations`: 1 to 5 takes per request. What to do: Send the request again for another take.
## 5. Reference request
Match the language and HTTP client the codebase already uses. This is the same request in Python:
```python
import os
import requests
text = "I'm sorry that happened. Let's get it sorted out together."
VOICE_ID = "6ccbfb76-1fc6-48f7-b71d-91ac6298247b" # from /voices
response = requests.post(
"https://api.cartesia.ai/tts/bytes",
headers={
"X-API-Key": os.environ["CARTESIA_API_KEY"],
"Cartesia-Version": "2026-08-14",
},
json={
"model_id": "sonic-3.6",
"transcript": text,
"voice": {"id": VOICE_ID},
"language": "en",
"generation_config": {"emotion": "calm"},
"output_format": {
"container": "wav",
"encoding": "pcm_s16le",
"sample_rate": 44100,
},
},
)
response.raise_for_status()
open("out.wav", "wb").write(response.content)
```
## 6. Roll out
1. Choose Hume Octave or Cartesia per request from one config flag, defaulting to Hume Octave.
2. Run the same scripts through both and save the clips side by side for me to listen to. Check that the container, encoding and sample rate match what downstream code expects.
3. Leave the Hume Octave client, call and key in place so rollback is flipping the flag. Don't delete them in this change.
4. Run the existing tests, and add one that checks the Cartesia request body.
## Docs
- Hume developer docs (archived Oct 3, 2026): https://web.archive.org/web/20261003165712/https://dev.hume.ai/intro
- Hume TTS synthesize JSON reference (archived Apr 15, 2026): https://web.archive.org/web/20260415072845/https://dev.hume.ai/reference/text-to-speech-tts/synthesize-json
- Hume changelog: https://dev.hume.ai/changelog
- Cartesia TTS bytes API reference: https://docs.cartesia.ai/api-reference/tts/bytes
- Cartesia TTS WebSocket API reference: https://docs.cartesia.ai/api-reference/tts/websocket
When you're done, tell me which files changed, which fields you couldn't map, and how to flip the flag.Every Hume Octave field, mapped to Cartesia
The prompt carries this table. Each row is a field in your Hume Octave request and the Cartesia field that replaces it.
- Hume Octave
POST /v0/ttswith anutterancesarrayCartesiaPOST /tts/bytes, one request per utteranceNoteFor a continuing conversation, use one WebSocket context. - Hume Octave
X-Hume-Api-KeyheaderCartesiaX-API-KeyandCartesia-Version: 2026-08-14 - Hume Octave
utterances[].textCartesiatranscript - Hume Octave
utterances[].voicebynameoridCartesiavoice:{"id": "<voice id>"}NoteHume voices don't export, so you rebuild each one on Cartesia. - Hume Octave
utterances[].description(acting instructions or voice design)Cartesiageneration_config.emotionplus a chosen voiceNoteFree-text descriptions have no equivalent. Pick the closest voice and an emotion, then test on your scripts. - Hume Octave
utterances[].speedCartesiageneration_config.speed(0.6 to 1.5) - Hume Octave
utterances[].trailing_silenceCartesiaA<break>tag at the end of thetranscript - Hume Octave
context: earlier utterances or a generation to continue fromCartesiaOne WebSocketcontext_idwithcontinue: trueNote/tts/byteshas no context field, so each request starts fresh. - Hume Octave
include_timestamp_types:word,phonemeCartesiaTTS WebSocket withadd_timestampsoradd_phoneme_timestampsNote/tts/bytesreturns audio with no timestamps. - Hume Octave
format:mp3,wavorpcmCartesiaoutput_formatwithcontainermp3,wavorraw - Hume Octave
generations[].audio, base64 in JSONCartesiaThe response body is the audioNoteDrop the base64 decode.
Hume Octave API key and auth, mapped to Cartesia
Cartesia reads the key from the X-API-Key header and pins the API version with Cartesia-Version on every request.
- Hume Octave
X-Hume-Api-KeyheaderCartesiaX-API-KeyplusCartesia-Version: 2026-08-14NoteHume keys stop working at the November 13 cutoff. - Hume Octave
HUME_API_KEYCartesiaCARTESIA_API_KEY
Hume Octave API pricing per 1,000 characters
List prices per 1,000 characters from the vendor's own pricing page. Plans, regions and volume discounts change what you pay.
- Model or plan
Octave 1 on the Business plan
Hume Octave$0.05Note$500 a month for 10 million characters; extra characters also $0.05 per 1,000 - Model or plan
Octave 2 on the Business plan
Hume Octave$0.025NoteHume meters Octave 2 characters at half rate, so the same $500 covers 20 million
On Cartesia, usage draws from your plan's credits: 20,000 credits a month on the Free plan (about 20,000 characters). Enterprise pricing is custom.
Cartesia plans and pricingSources
Prices read from each company's pricing page in November 2026.
Hume Octave limits compared with Cartesia
Published limits from both companies. Plans change them, so check both pages before you size a rollout.
- Limit
Free tier
Cartesia20,000 credits a month on the Free plan (about 20,000 characters)Hume Octave10,000 Octave characters a month on the Free plan, until the shutdown
Cartesia's figures come from its pricing page and voice library.
Cartesia pricing and plan limitsSources
Limits read from each company's documentation in November 2026.
Hume Octave voices and where to start on Cartesia
Voices chosen by name or id, from Hume's library or your own custom voices. Leave the voice out and Octave generates a new one from the utterance's description.
Each card is a starting point for a common Hume Octave pick, matched by language and use. Listen before you choose.
What you get on Cartesia
What changes once the Hume Octave call is gone.
One transcript in, audio out
/tts/bytes takes one transcript and returns audio. With no utterance array to build, you send one request per line or stream over the WebSocket.
Clone a voice from 10 seconds of audio
Instant clones start from 10 seconds of a recording you have permission to use, on a Pro plan or higher. Professional clones need 30 minutes of audio and a Startup plan or higher.
How to migrate from Hume Octave to Cartesia
The same changes the prompt makes, if you'd rather make them yourself.
Gather the source recording behind each voice you cloned on Hume, from your own storage if the Hume account is already gone. Each Cartesia clone starts from that recording.
A Hume designed voice has no recording, so choose the nearest match in the voice library.
Swap the request as mapped above. Compare against Hume output you saved, or against Hume itself while it still answers.
If you ran calls on Hume EVI, Managed Agents run the whole call: speech recognition, the model and the voice.
Sources
Sources
Request shapes checked against vendor documentation in November 2026.
Compare and read next
Frequently asked questions
Can I export my Hume AI voices?
No. Hume voices live on Hume's servers and don't export, so you recreate them. With the source recording, Cartesia makes an instant clone from 10 seconds of audio. Download those recordings before November 13, when Hume deletes account data.
What did Hume AI pricing look like before the shutdown?
Hume's archived pricing page listed self-serve plans from a free tier with 10,000 characters a month up to $500 a month for 10 million, with custom Enterprise terms above that. Hume Octave 2 drew down that allowance at half the rate of Octave 1.
What happens to Hume EVI?
Hume's Empathic Voice Interface shuts down at the same 12:01 a.m. EST cutoff on November 13, 2026. Cartesia Managed Agents handle the whole call: speech recognition, your model and the voice. Our Hume alternatives guide covers the wider field.
How does the request shape change?
Hume's API takes an utterances array and returns base64 audio in JSON. Cartesia's /tts/bytes takes one transcript per request and returns the audio bytes, and a WebSocket context streams a continuing conversation.
What doesn't carry over from Octave?
Voice design from a text prompt, free-text acting directions, multiple takes per request and the context field on single requests. Timestamps move to the WebSocket. Designed voices take the most work, since there is no recording to clone from.
Can I run Hume and Cartesia side by side?
Only until the November 13 cutoff. Until then, route a share of requests to Cartesia behind a flag and keep Hume as the fallback. Afterwards there is no Hume to roll back to, so test Cartesia against Hume clips you saved.
Get started today
Talk to an expert.
Connect with a member of our team and learn how Cartesia can help you build world-class voice experiences.
Start building.
Create an API key, then hand your coding agent the migration prompt and a few of your own scripts.