Custom voices used to require a recording, a consent statement from the speaker, and approval through an eligible-customer program. OpenAI’s Prompt-to-Voice removes most of that work. You describe the vocal qualities you want in plain language, the API saves a voice, and you reuse its ID in a GPT-Live session.
This guide follows OpenAI’s official workflow: write the voice description, create the voice through the Voices API, configure it in GPT-Live, and test the result. One constraint comes first: prompt-generated voices work only with GPT-Live. They are not supported by the Text-to-Speech, Realtime, or Chat Completions APIs.
Quick Summary
- Prompt-to-Voice creates a saved voice from a text description, with no reference recording.
- Creation uses POST /v1/audio/voices with type set to prompt.
- The response returns voice metadata and an ID. It includes no audio or preview.
- You set the saved ID at session.audio.output.voice.id in a GPT-Live session.
- Creating a prompt-generated voice is free. Speech generated in GPT-Live is billed at regular session rates.
- Each organization can create up to 100 prompt-generated voices.
What Is OpenAI’s Prompt-to-Voice API?
Prompt-to-Voice generates a synthetic voice from a natural-language description and saves it to your organization. It is generally available to all API customers and can also be created in OpenAI’s voice Playground.
Preset voices are fixed choices that other products may also use. A prompt-generated voice takes its character from your description, so you can shape the accent, pitch, texture, and pace for one product. Recording-based voices require a consent recording from the voice owner, a reference sample of 30 seconds or less, and access limited to eligible customers. A prompt-generated voice needs only text.
This suits support agents, onboarding guides, and branded assistants that need a distinct voice without recording a real speaker. If you are still deciding between GPT-Live, Realtime, and the Text-to-Speech API, review OpenAI’s audio guide first.
| Approach | Input | Main purpose | Compatibility |
| Prompt-to-Voice | Text description | Create a saved voice for GPT-Live | GPT-Live only |
| Recording-based custom voice | Consent recording and reference audio | Replicate an authorized sample | GPT-Live, Text to Speech, Realtime, Chat Completions with audio output |
| Preset voice | Voice name | Use a built-in voice | Preset voice options in supported APIs |
Prerequisites
You need an OpenAI API account with a project and an API key, a terminal with curl or another HTTP client, and basic familiarity with JSON and environment variables. Because prompt-to-voice is generally available, you do not need the eligible-customer approval that recording-based voices require. For the final step, you also need a GPT-Live connection using WebRTC or WebSockets.
Store your key in an environment variable instead of in source code:
bash
export OPENAI_API_KEY=”your_api_key_here”
Keep the key on a server. Never place it in browser-side JavaScript, screenshots, or public repositories. Check billing and project permissions in your own OpenAI project before you start.
Step 1: Write an Effective Voice Prompt
Describe the voice the way a casting director would. The official Custom Voices guide covers accent, perceived age, presentation, pitch, timbre, texture, loudness, speech rate, and distinctiveness. These are words in your prompt, not separate API parameters.
Customer support assistant: “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.”
Interactive product guide: “A bright, clear adult voice with a slightly higher pitch and a lightly textured tone. Use a lively, conversational delivery at a brisk but easy-to-follow pace.”
Specific descriptions work better than “make it sound professional,” which leaves pitch, pace, and accent for the service to guess.
The optional script_hint parameter supplies representative speech for the voice to use during generation. It accepts up to 2,000 characters. If you omit it, the service writes a script from your description. Blank scripts are rejected, and so are scripts that are too short, although the reference does not state a minimum length.
Two rules apply to every prompt. Do not request imitation of a named person, public figure, or fictional character. Do not describe a child’s voice, because the voices must be adult.
Step 2: Create the Voice Through the API
Send a JSON request to POST /v1/audio/voices. The required fields are type, name, and prompt. The name field accepts 1 to 256 characters. The prompt field accepts 1 to 2,000 characters and cannot be only whitespace. The model field is optional and defaults to auto. The reference also accepts “2026-10-08”, but it does not explain the difference, so the default is the safer choice.
bash
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
Line by line:
- The request targets the voice creation endpoint. –fail-with-body makes curl report HTTP errors of 400 and above while still writing the response body.
- The Authorization header authenticates the request with your key.
- The Content-Type header tells the server the body is JSON.
- The body sets the type to prompt, supplies a name and description, and selects the default model.
- -o voice.json saves the response so you can inspect it.
A successful response contains metadata. This example is illustrative, and the prompt is shortened:
json
{
“object”: “audio.voice”,
“id”: “voice_123”,
“name”: “Support assistant”,
“created_at”: 0,
“type”: “prompt”,
“prompt”: “A calm, reassuring adult voice for a customer support assistant…”
}
Here, voice_123 is a placeholder. Your real ID will differ, and created_at is a Unix timestamp in seconds. The response contains no audio and no preview. You hear the voice only by starting a GPT-Live session with its ID.
Every successful request saves a new voice, so avoid recreating the same voice by accident. The limit of 100 prompt-generated voices per organization also includes voices your application creates for its own customers.
If the request fails, check these first. An authentication error usually means OPENAI_API_KEY is empty or was set in a different shell session. Malformed JSON often comes from an unescaped double quote inside the prompt, which needs a backslash. An empty, whitespace-only, or over-length prompt fails the validation rules above. Read the error body in voice.json. This article does not list error codes because the reference does not document them for these cases.
Step 3: Configure the Voice in GPT-Live
- Copy the ID from the creation response.
- Keep the original voice description.
- Set session.audio.output.voice.id to that ID.
- Include the description in session. instructions alongside your conversation rules.
- Connect through WebRTC or WebSockets.
- Start a new session for each saved voice you test.
json
{
“model”: “gpt-live-1”,
“instructions”: “You are a helpful voice assistant. A calm, reassuring adult voice for customer support. Speak with an American English accent, a mid-range pitch, a smooth, warm tone, and a steady conversational pace.”,
“audio”: {
“output”: {
“voice”: {
“id”: “voice_123”
}
}
}
}
Replace voice_123 with your saved ID. This snippet shows session configuration only. It does not open a connection or stream audio.
The ID and the instructions do different jobs. The ID selects the voice. The description in the instructions helps the model perform that voice as intended. Conversation rules, such as answer length and when to hand off, belong in the instructions too, so keep them separate from the voice description. The GPT-Live prompting guide covers those rules in more depth.
With WebRTC, your application server places this configuration in the JSON session field alongside transport. With WebSockets, you include it in the first session.start event. Follow the GPT-Live getting started guide for the rest of the connection flow.
Step 4: Test, Compare, and Refine
Use one short script and the same few conversational turns for every candidate. Change one quality at a time, such as pace or texture, so you can tell which change caused which difference. Record each prompt and the voice ID it produced. When a voice works, reuse its ID instead of creating another.
| Criterion | What to evaluate | Possible adjustment |
| Accent | Pronunciation and regional consistency | Name the intended accent more precisely |
| Pace | Whether speech feels rushed or slow | Describe a steady, moderate pace |
| Tone | Warmth, clarity, and vocal texture | Use more specific timbre and texture words |
| Distinctiveness | Whether the voice suits the product | Adjust the description without referring to a real person |
Test realistic conversations, not only a greeting, because clarity and pacing often change during follow-up questions. Treat each saved voice as a configuration you evaluate. The documentation does not promise identical output in every session, and it does not guarantee that the voice is unique.
Pricing and Limitations
Creating a prompt-generated voice is free. Speech generated in GPT-Live is billed at regular session rates. Listening to the voice in the Playground also runs a regular GPT-Live session, so budget for that during testing. This article does not list dollar amounts. Check OpenAI’s pricing documentation for current rates.
Several limits matter for planning. The voice works only in GPT-Live. The response includes no preview audio. Each organization is capped at 100 prompt-generated voices. Voice creation through /v1/audio/voices is not compatible with Zero Data Retention. GPT-Live speech generation is eligible for Zero Data Retention when it is enabled for your organization or project, but stored session recordings, recording downloads, and session forking are not available under it. Teams with Zero Data Retention requirements should review this before creating voices.
Responsible Use
Tell listeners that the speech is AI-generated, and keep any provenance metadata, watermarks, or other synthetic-origin indicators in your output. Use adult voice descriptions only. Avoid requests that imitate a named person, public figure, or fictional character. Review OpenAI’s Usage Policies and Terms before deployment. Other users may generate similar voices, so do not build a brand around the assumption that your voice is unique.
Conclusion
The workflow is short. Describe the voice, create it through the API, save the ID, configure GPT-Live with that ID and a matching description, and test with realistic conversations. Teams building conversational products with a distinct vocal identity benefit most, especially when they have no recorded speaker to work from.
If your project depends on Text-to-Speech, Realtime, or Chat Completions output, prompt-generated voices are not the right fit today. Use a preset voice or a recording-based custom voice instead.
Your next step is to read OpenAI’s Custom Voices guide and build a small GPT-Live prototype before you connect the voice to production traffic.
Frequently Asked Questions
Is OpenAI’s Prompt-to-Voice API free?
Creating a prompt-generated voice is free. Speech generated with that voice in GPT-Live is billed at regular session rates, and so is listening to it in the Playground. Budget for session usage during testing.
How do I create a custom AI voice with OpenAI?
Write a voice description, then send a POST request to /v1/audio/voices with type set to prompt. Save the returned ID, add the description to your GPT-Live session instructions, set the voice ID in the session configuration, and test in a new session.
Can I use a prompt-generated voice with the OpenAI Text-to-Speech API?
No. Prompt-generated voices work only with GPT-Live. They are not supported by the Text-to-Speech, Realtime, or Chat Completions APIs. For those APIs, use a preset voice or a recording-based custom voice.
Does the voice creation API return an audio preview?
No. The response contains metadata only: the voice ID, name, creation time, type, and original prompt. To hear the voice, start a GPT-Live session with its ID.
What is the script_hint parameter?
It is an optional script the voice speaks during creation, up to 2,000 characters. If you omit it, the service generates a script from your description. Blank scripts are rejected, and so are scripts that are too short, though the documentation does not state a minimum length.
How many custom AI voices can I create with OpenAI?
Each organization can create up to 100 prompt-generated voices. The limit includes voices your application creates for its own customers, so plan how you will reuse voices as you scale.
Do I need to upload a recording to create an AI voice?
No. Prompt-to-Voice uses only a text description. Recording-based voices are a separate workflow that requires a consent recording and a reference sample.
Can I use an OpenAI custom voice in a commercial application?
The Custom Voices guide states that output ownership is governed by your agreement with OpenAI and that the Terms apply to your use of prompt-to-voice. Review those documents and the Usage Policies for your use case, and consult legal counsel for commercial decisions. This article does not provide legal assurance.
