API shutdown: November 13, 2026

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 changelog

Octave 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.

11 fields mapped, with a rollback plan

Prompt

Connect MCP
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.

  1. Hume Octave

    POST /v0/tts with an utterances array

    Cartesia
    POST /tts/bytes, one request per utterance
    Note
    For a continuing conversation, use one WebSocket context.
  2. Hume Octave

    X-Hume-Api-Key header

    Cartesia
    X-API-Key and Cartesia-Version: 2026-08-14
  3. Hume Octave

    utterances[].text

    Cartesia
    transcript
  4. Hume Octave

    utterances[].voice by name or id

    Cartesia
    voice: {"id": "<voice id>"}
    Note
    Hume voices don't export, so you rebuild each one on Cartesia.
  5. Hume Octave

    utterances[].description (acting instructions or voice design)

    Cartesia
    generation_config.emotion plus a chosen voice
    Note
    Free-text descriptions have no equivalent. Pick the closest voice and an emotion, then test on your scripts.
  6. Hume Octave

    utterances[].speed

    Cartesia
    generation_config.speed (0.6 to 1.5)
  7. Hume Octave

    utterances[].trailing_silence

    Cartesia
    A <break> tag at the end of the transcript
  8. Hume Octave

    context: earlier utterances or a generation to continue from

    Cartesia
    One WebSocket context_id with continue: true
    Note
    /tts/bytes has no context field, so each request starts fresh.
  9. Hume Octave

    include_timestamp_types: word, phoneme

    Cartesia
    TTS WebSocket with add_timestamps or add_phoneme_timestamps
    Note
    /tts/bytes returns audio with no timestamps.
  10. Hume Octave

    format: mp3, wav or pcm

    Cartesia
    output_format with container mp3, wav or raw
  11. Hume Octave

    generations[].audio, base64 in JSON

    Cartesia
    The response body is the audio
    Note
    Drop 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.

  1. Hume Octave

    X-Hume-Api-Key header

    Cartesia
    X-API-Key plus Cartesia-Version: 2026-08-14
    Note
    Hume keys stop working at the November 13 cutoff.
  2. Hume Octave

    HUME_API_KEY

    Cartesia
    CARTESIA_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.

  1. Model or plan

    Octave 1 on the Business plan

    Hume Octave
    $0.05
    Note
    $500 a month for 10 million characters; extra characters also $0.05 per 1,000
  2. Model or plan

    Octave 2 on the Business plan

    Hume Octave
    $0.025
    Note
    Hume 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 pricing

Sources

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.

  1. Limit

    Free tier

    Cartesia
    20,000 credits a month on the Free plan (about 20,000 characters)
    Hume Octave
    10,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 limits

Sources

Limits read from each company's documentation in November 2026.

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.

  1. 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.

  2. A Hume designed voice has no recording, so choose the nearest match in the voice library.

  3. Swap the request as mapped above. Compare against Hume output you saved, or against Hume itself while it still answers.

  4. If you ran calls on Hume EVI, Managed Agents run the whole call: speech recognition, the model and the voice.

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.

Contact Sales

Start building.

Create an API key, then hand your coding agent the migration prompt and a few of your own scripts.

Try Cartesia