OpenAI GPT-Live Lets You Create Custom Voices From Text
OpenAI now lets you build GPT-Live custom voices from a short text description. On October 16, 2026, the API changelog announced prompt-to-voice for all API customers: describe a voice, get back an ID, and use it in GPT-Live sessions. Creating the voice is free. You pay regular GPT-Live session rates when it speaks.
What GPT-Live custom voices change
Presets are still there. The session default is marin, and the same changelog entry adds nine more: Nuri, Juni and Flitz (German), Brise and Sillage (French), Nira (Hindi), Harema and Shida (Japanese), and Noeul (Korean).
Prompt-to-voice is the other route. You describe the voice in plain language, and OpenAI generates and stores it. The custom voices guide suggests covering accent, age, pitch, timbre, texture, loudness, speech rate and distinctiveness.
The rules are strict. Adult voices only, and no imitating a named person, public figure or fictional character.
Create a voice with the /v1/audio/voices endpoint
One POST creates the voice. This body follows OpenAI's example:
curl --fail-with-body https://api.openai.com/v1/audio/voices \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "prompt",
"name": "Support assistant",
"prompt": "An adult voice with an American English accent, mid-range pitch, smooth and warm tone, calm and reassuring, steady pace.",
"model": "auto"
}'
The response is an audio.voice object with an id (shaped like voice_123), the name, created_at, type and your original prompt. There is no audio preview in the response, so listen in the voice Playground. That listening runs a billed session.
You can also pass an optional script_hint, sample speech of up to 2,000 characters that guides generation. Blank or too-short scripts are rejected.
Use the custom voice in a GPT-Live session
Put the returned ID at audio.output.voice.id when you start a session on v1/live/sessions:
{
"model": "gpt-live-1",
"instructions": "<your conversation instructions, plus the original voice description>",
"audio": {
"output": {
"voice": {
"id": "<voice id from the create call>"
}
}
}
}
On WebRTC this goes in the JSON session field next to transport. On WebSockets it goes in the first session.start event. The session guide covers the rest of the setup.
The voice is fixed for the life of the session. To change it, start a new one. OpenAI also says to repeat the voice description in instructions, and to keep conversation rules like answer length out of the voice prompt.
Limits to plan around for enterprise voice agents
A branded voice for a support line is the obvious use. The limits are what you need to plan around:
- GPT-Live only. Prompt-generated voices don't work with the Text to Speech, Realtime or Chat Completions APIs. If your phone menu uses another API, the voices won't match.
- 100 voices per organization. That count includes voices your application creates for its own customers, so per-tenant voices run out fast.
- No list or delete endpoint in the guide. Store the voice
idand the exact prompt in your own system. - Zero Data Retention. Voice creation through
/v1/audio/voicesisn't compatible with it. GPT-Live speech generations can be eligible when ZDR is enabled for your organization or project. - Voices aren't guaranteed unique. Another customer could land on something similar.
- Disclosure. OpenAI asks you to be transparent that the speech is AI-generated and to keep provenance metadata or watermarks.
I didn't find a per-minute price on the pages I read. Check OpenAI's pricing before you size a budget.
What to do on Monday morning
- Write the voice prompt in a file and commit it, so the brand voice is reviewable like any other config.
- Create one test voice with the curl call above and save the
idnext to the prompt. - Start a GPT-Live session with that ID and listen to a few real call scripts, including interruptions.
- Check whether your project runs with Zero Data Retention before you promise a customer this.
- Add an AI disclosure line to the greeting.
For anyone shipping voice agents, the voice is now a versioned config object with a hard quota and a vendor lock, so treat it that way from the first commit.