OpenAI Prompt-to-Voice: Create a GPT-Live Voice From Text

TL;DR
OpenAI prompt-to-voice turns a text description into a saved GPT-Live voice. Creating it is free, the limit is 100 per org, and it only works in GPT-Live.
Last updated: October 17, 2026
OpenAI's prompt-to-voice turns a plain-language description ("a calm adult voice, mid-range pitch, steady pace") into a saved custom voice for GPT-Live. It became generally available to all API customers on October 16, 2026. You POST a description to /v1/audio/voices with type: "prompt", get back a voice ID, and pass that ID as the output voice when a GPT-Live session starts. Creating the voice is free. You pay normal GPT-Live session rates when it speaks. There are two limits that shape everything else: the voice only works in GPT-Live, and you get 100 per organization.
Until now, a custom OpenAI voice meant a consent recording plus a reference sample, and that path is still gated to eligible customers. Prompt-to-voice needs no recordings, which makes it the first custom-voice option most developers can actually use. If you are new to GPT-Live itself, our breakdown of how GPT-Live works covers the full-duplex model this plugs into.
What shipped#
From the custom voices guide and the API changelog:
- Endpoint:
POST /v1/audio/voiceswithtypeset toprompt, aname, and apromptdescribing the voice.modeldefaults toauto. - Optional
script_hint: up to 2,000 characters of representative speech used during creation. If you leave it out, the service writes a script from your description. Blank or too-short scripts are rejected. - Price: creating a voice is free; using it in GPT-Live is billed at regular session rates.
- Limit: 100 prompt-generated voices per organization, including voices your app creates for its customers.
- Where it works: GPT-Live only. Not the Text to Speech, Realtime or Chat Completions APIs.
- Also new: nine natural built-in voices for GPT-Live, per the changelog: Nuri, Juni and Flitz (German); Brise and Sillage (French); Nira (Hindi); Harema and Shida (Japanese); and Noeul (Korean).
%% title: Prompt-to-voice flow from description to GPT-Live speech
flowchart LR
A["Voice description"] --> B["POST /v1/audio/voices type: prompt"]
B --> C["Saved voice: voice_123"]
C --> D["GPT-Live session start: audio.output.voice.id"]
A --> E["Same description in session.instructions"]
E --> D
D --> F["Speech billed at GPT-Live session rates"]Step 1: Create the voice#
The raw request, copied from the guide:
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": "A calm, reassuring adult voice for a customer support assistant. Speak with an American English accent, a mid-range pitch, a smooth, warm tone, and a steady, conversational pace.",
"model": "auto"
}' \
-o voice.json
The response is metadata only. You get object: "audio.voice", an id, the name, created_at in Unix seconds, type: "prompt", and your original prompt. No audio, no preview. Save the ID and the prompt, because you need the prompt again in Step 2.
The same call through the Node SDK, plus the session config that uses it:
import OpenAI from "openai";
import type { MediaSessionConfig } from "openai/resources/live/live";
const client = new OpenAI();
const description =
"A calm, reassuring adult voice for a customer support assistant. Speak with an American English accent, a mid-range pitch, a smooth, warm tone, and a steady, conversational pace.";
// Each call saves a new voice (100 prompt-generated voices per organization).
const voice = await client.audio.voices.create({
type: "prompt",
name: "Support assistant",
prompt: description,
model: "auto"
});
console.log(voice.id, voice.type);
// GPT-Live session config: custom voices are objects, built-in voices are strings.
// Repeat the voice description in instructions for voice performance.
const session: MediaSessionConfig = {
model: "gpt-live-1",
instructions: `You are a helpful voice assistant. ${description}`,
audio: { output: { voice: { id: voice.id } } }
};
console.log(JSON.stringify(session));
We type-checked this with tsc --strict against openai 7.37.0, where audio.voices.create accepts the prompt variant and MediaSessionConfig types audio.output.voice as a string or { id }. It was not run against the live API. A typo like type: "promptx" fails to compile.
Step 2: Use it in a GPT-Live session#
Set session.audio.output.voice.id to the returned ID. The guide also says to put the original voice description in session.instructions next to your app's own instructions, which is why the example above concatenates them. The description shapes the voice at creation time and the delivery during the session.
Where the config goes depends on transport:
- WebRTC: your server puts it in the JSON
sessionfield alongsidetransport. - WebSockets: it goes in the first
session.startevent.
The voice is fixed for the life of a session. To try a different saved voice, start a new session. For the connection mechanics, see our OpenAI realtime voice getting started guide and OpenAI's GPT-Live guide.
Writing a description that works#
The guide lists the qualities you can describe. They are words in your prompt, not API parameters:
| Quality | What to describe | Example wording |
|---|---|---|
| Accent | Regional pronunciation and strength | American English, with a strong accent |
| Age | Perceived age | An adult in their 30s |
| Presentation | How the voice presents | Feminine |
| Pitch | How low or high | Mid-range pitch |
| Timbre | Tone | Smooth and rich |
| Texture | Raspiness, hoarseness, clarity | Smooth |
| Loudness | Vocal effort | Moderate vocal effort |
| Speech rate | Pace | Medium pace |
| Distinctiveness | How pronounced the character is | Moderately distinctive |
OpenAI's advice for iterating: change one quality at a time, compare with the same short passage and a few conversational turns, and keep the ID you prefer. Keep conversation rules (answer length, interruptions, when to delegate) in the session instructions, not the voice description.
Gotchas and limits#
Every create call is a new voice. There is no "update". Iterating ten times on one voice burns ten of your 100 slots, so budget experiments, and do not create voices on every user signup without a cap.
GPT-Live only. If your pipeline also uses the Text to Speech or Realtime API for notifications or batch audio, a prompt-generated voice will not follow you there. Pick a built-in voice for those paths, or plan around the recording-based route (eligible customers only).
Previewing costs money. Creation is free, but hearing the voice means running a GPT-Live session, in the Playground or your app, and that is billed as a regular session.
Not ZDR compatible. Voice creation through /v1/audio/voices is not compatible with Zero Data Retention. GPT-Live speech generations themselves are ZDR eligible when ZDR is enabled for your org or project.
Policy limits. Children's voices are not allowed, and you cannot ask for an imitation of a named person, public figure or fictional character. You must tell listeners the speech is AI-generated. OpenAI also says voices are not guaranteed to be unique; someone else can generate a similar one.
SDK types lag the voice list. In openai 7.37.0, the BuiltInVoice union does not list most of the nine new voices, though the field also accepts any string. Check the voice options page, not your editor's autocomplete.
The closest alternative#
If you need one voice across live conversation, TTS and batch audio, a dedicated TTS vendor with voice design is still the more portable choice. We compared those in text-to-speech APIs for developers in 2026. Prompt-to-voice wins when GPT-Live is already your conversation layer: zero creation cost, no recordings, no consent workflow, and the voice lives next to the model that speaks it.
What people are actually saying#
- OpenAI's own developer forum announcement thread for GPT-Live-1.1 went up on October 15, the day before prompt-to-voice shipped, and had 28 posts by October 20. The announcement says GPT-Live-1.1 is rolling out in ChatGPT, Codex and dots, and is "coming soon to the API", so do not assume API sessions get 1.1 behavior yet. The API changelog entry names
gpt-live-1. - A Reddit post in r/CodexAutomation mostly restates the changelog: free creation, no consent recordings, GPT-Live only.
- There is no Hacker News thread of note yet. Most of the coverage so far is restated launch notes, so treat any quality claims, including ours, as untested until you listen in your own app.
What to do Monday#
- Write one description using three or four qualities from the table, create the voice, and store both the ID and the prompt.
- Start a GPT-Live session with the ID in
audio.output.voiceand the description ininstructions. - Change one quality per attempt and keep a log of IDs, since every attempt is a new saved voice.
- If you also ship TTS or Realtime audio, decide now which built-in voice covers those paths.
FAQ#
How much does OpenAI prompt-to-voice cost?#
Creating a voice is free. Speech generated with it in GPT-Live is billed at regular session rates, and so is previewing it in the Playground.
Can I use a prompt-to-voice voice with the Text to Speech or Realtime API?#
No. Prompt-generated voices are GPT-Live only. Recording-based custom voices work with Text to Speech, Realtime and Chat Completions audio, but that path is limited to eligible customers.
How many prompt-to-voice voices can I create?#
Up to 100 per organization, including voices your app creates for its customers. Each successful create request saves a new voice.
Does the API return a preview of the voice?#
No. The response is metadata only: ID, name, creation time, type and your prompt. Start a GPT-Live session or use the voice Playground to hear it.
Continue Reading#
- How OpenAI Built GPT-Live: Full-Duplex Voice, WARP, and the Death of the Turn Detector - the model your custom voice runs on
- OpenAI Realtime Voice API: Getting Started Guide - the connection plumbing for WebRTC and WebSockets
- Text-to-Speech APIs for Developers in 2026: What to Actually Use - when you need a voice outside GPT-Live
Sources#
Get the next deep dive like this in your inbox
One email a week on OpenAI and the rest of the AI dev stack. Free.
Read next
How OpenAI Built GPT-Live: Full-Duplex Voice, WARP, and the Death of the Turn Detector
How OpenAI built GPT-Live: a full-duplex voice model with no turn detector, Go on the media path, stateful handoffs, and the new WARP WebRTC transport.
8 min readOpenAI Realtime Voice API: Getting Started Guide
The Realtime API uses WebSockets for two-way voice interaction with function calling and stateful conversations. Here is how to set it up and build on it.
8 min readText-to-Speech APIs for Developers in 2026: What to Actually Use
Text-to-speech APIs compared for developers: OpenAI, ElevenLabs, xAI Grok and Cartesia on quality, latency, price, streaming and voice cloning policies.
8 min readNew here? Start with
Technical content at the intersection of AI and development. Building with AI agents, Claude Code, and modern dev tools - then showing you exactly how it works.







