{
"input": "Welcome to the museum.",
"voice": "3f9ac2e01b7d",
"model": "clone",
"response_format": "mp3"
}
Returns the audio as one file, as a chunked stream with "stream": true, or over a WebSocket.
First audio in 48 msMedian with one stream, 70 ms at the 95th percentile. Measured on 2026-11-10 on our RTX PRO 6000 Blackwell server. A measurement, not a promise.
Start with whatever you have.
A picture is enough. A loose direction works, and so does a precise brief. Each ends the same way: voices you can hear side by side, and one you can save.
No voice idea
A photo of the robot, and “helps visitors explore a museum.”
You get contrasting directions to listen to, each with a reason to try it.
A loose direction
“Friendly and competent, without sounding like a cartoon.”
Your words are kept as written. Different readings of them come back side by side.
A precise brief
“Adult English voice, conversational pacing, clear place names.”
Voices come back within your brief, without a conversation first.
DescribeA brief, a picture, or a few lines about the character.
ListenDirections come back as voices you can play, not as adjectives.
Compare on your linesEvery voice reads the same test lines. Listen blind if you want an unbiased choice.
Save for reuseThe voice gets an ID your API keys can speak with.
The voice you choose is an API voice.
A voice saved in the studio gets a stable ID. Speak with it over HTTP, as a stream, or over a WebSocket, from your server or your agent.
One request, or a streamHTTP for whole files and chunked streams; WebSocket for audio as it’s made.
Formats for where it playspcm, pcm_16000, pcm_8000, wav, mulaw, opus, mp3. Mu-law is for telephony.
Keys scoped to the jobLimit a key to speech, to certain voices, to a number of concurrent streams and to a monthly character budget.
Voices by descriptionDesign voices from a description through the API, refine one with feedback in plain words, and save the one you want.
Request examples
curl
curl https://api.voice.a2nada.com/v1/audio/speech \
-H "Authorization: Bearer $VOICELAB_API_KEY" \
-H "Content-Type: application/json" \
-d '{"input": "Welcome to the museum. What would you like to see first?",
"voice": "3f9ac2e01b7d", "model": "clone", "response_format": "mp3"}' \
-o welcome.mp3
Python
import os, httpx
r = httpx.post(
"https://api.voice.a2nada.com/v1/audio/speech",
headers={"Authorization": f"Bearer {os.environ['VOICELAB_API_KEY']}"},
json={"input": "Welcome to the museum. What would you like to see first?",
"voice": "3f9ac2e01b7d", "model": "clone", "response_format": "mp3"},
)
r.raise_for_status()
open("welcome.mp3", "wb").write(r.content)
WebSocket (Node.js)
// Audio arrives in chunks as it is made: 16-bit, 24 kHz mono PCM.
const ws = new WebSocket("wss://api.voice.a2nada.com/v1/audio/speech/stream");
ws.binaryType = "arraybuffer";
const chunks = [];
ws.onopen = () => ws.send(JSON.stringify({
api_key: process.env.VOICELAB_API_KEY, // server side only, never in a browser
input: "Welcome to the museum. What would you like to see first?",
voice: "3f9ac2e01b7d", model: "clone", response_format: "pcm",
}));
ws.onmessage = (e) => {
if (typeof e.data !== "string") chunks.push(e.data);
else console.log(JSON.parse(e.data)); // {"done": true, "first_audio_ms": ...} or an error
};
Output formats
response_format
Content type
Sample rate
pcm
audio/pcm
24,000 Hz
pcm_16000
audio/pcm
16,000 Hz
pcm_8000
audio/pcm
8,000 Hz
wav
audio/wav
24,000 Hz
mulaw
audio/basic
8,000 Hz
opus
audio/ogg; codecs=opus
24,000 Hz
mp3
audio/mpeg
24,000 Hz
Time to first audio, measured
Streams at once
Median
95th percentile
1
48 ms
70 ms
16
74 ms
108 ms
32
89 ms
130 ms
Measured on 2026-11-10 on one RTX PRO 6000 Blackwell server (g7e.2xlarge on AWS), from a client in the same region through the load balancer, TLS and firewall, with lines of about 70 characters. These are measurements on our hardware, not promises; your network adds to them.
For things that talk.
Software and hardware that speak to people, and the creative people who decide how they sound.
Robots
Desk companions, guides and kiosks that speak to people in the room.
Assistants
Support and planning agents where the voice is the product’s manner.
Games
Characters auditioned across the lines they will actually say.
Telephony
Phone agents that need mu-law and a voice that stays clear on a call.
Writers and sound designers cast in the studio. Engineers ship the same voice through the API, by its ID.
Where your data goes.
Speech, voice design and saved voices run on our own GPU servers. The table lists every feature and who processes it, generated from the service’s configuration.
They aren’t sent to any third party, and the model servers don’t write request text or audio to their logs.
The studio keeps your work until you delete it.
Sessions, generated audio and saved voices are stored so you can come back to them.
3 features use outside AI providers.
The Director (casting assistant): OpenAI. Listening reports: Google (Gemini API). Rewriting a voice description: OpenAI. The data handling page lists what each one receives.