Every professional voice engineer has the same first day: an empty ElevenLabs dashboard, a blinking cursor, and a vague idea of what "voice settings" even mean. This chapter turns that empty dashboard into a fully configured production workspace — accounts, cloned voices, API keys stored safely, and four different ways to call the API. By the end you will have generated your first synthetic voice from Postman, Python, JavaScript, and a single cURL line.
1. Create Your ElevenLabs Account
- Go to elevenlabs.io and click Sign up (top right).
- Use a real work email — you will attach billing to it later.
- Verify the email link, choose a strong password, enable 2FA in Profile → Security.
- Pick the Free plan to start. You get 10,000 characters/month — enough for the whole chapter.
2. The Dashboard — a Tour
The left rail is the whole product in miniature. Top to bottom: Home, Voices,Speech, Dubbing, Projects, Sound Effects, Conversational AI, and Usage. For voice automation work you will live in Voices,Speech and Conversational AI.
3. Projects — Long-Form Studio
Projects is ElevenLabs' long-form editor: paste a book chapter, assign voices per paragraph, regenerate line-by-line, and export a stitched WAV/MP3. Perfect for audiobooks and podcasts. For real-time voice agents we won't use Projects — we'll call the API directly. Know it exists.
4. The Voice Library
Two libraries: Default (11 pro voices shipped by ElevenLabs — Rachel, Adam, Antoni, Bella, etc.) and Community (thousands of voices contributed by users). Each voice has a Voice ID — a 20-character string you will paste into your code.
5. Voice Cloning — the Two Tiers
- Instant Voice Clone (IVC) — 1 minute of audio, ready in 30 seconds, 90% quality.
- Professional Voice Clone (PVC) — 30+ minutes of studio audio, trained overnight, 99% quality.
6. Instant Voice Clone (IVC)
- Record 1–3 minutes of clean audio in WAV or MP3 (16kHz+ mono).
- Voices → Add a new voice → Instant Voice Clone.
- Upload up to 25 files, name the voice, tick the consent box.
- Click Create voice. Wait ~30 seconds. Play the preview.
7. Professional Voice Clone (PVC)
PVC is the model you use when the voice IS the product — an audiobook narrator, a branded IVR persona. Requirements: 30 minutes to 3 hours of clean studio audio, one speaker, one mic, one room. Training takes 4–8 hours. Only available on paid plans.
8. API Keys — Store Them Right
- Profile (top-right avatar) → API Keys → Create API Key.
- Name it after the project: helpdesk-prod, helpdesk-dev.
- Copy once — you cannot view it again. Paste into a .env file, never into code.
- Add .env to .gitignore. If you ever push a key: rotate immediately.
# .env
ELEVENLABS_API_KEY=sk_1234...abcd
ELEVENLABS_VOICE_ID=EXAVITQu4vr4xnSDxMaL9. Billing & Pricing (at a glance)
- Free — 10k chars/month, 3 custom voices, non-commercial.
- Starter $5/mo — 30k chars, IVC, commercial license.
- Creator $22/mo — 100k chars, PVC, 192 kbps audio.
- Pro $99/mo — 500k chars, 44.1 kHz WAV, usage analytics.
- Scale / Business — custom, priority latency, dedicated support.
10. Generate Your First Voice (in the UI)
- Speech → Text to Speech.
- Voice: Rachel. Model: eleven_multilingual_v2.
- Paste: "Hello. My name is Nova. Welcome to voice automation."
- Click Generate. Preview. Download the MP3.
11. Voice Settings — What Each Slider Does
- Stability (0–1) — low = expressive/variable, high = monotone/consistent. Start at 0.5.
- Similarity Boost (0–1) — how tightly to match the original voice. Start at 0.75.
- Style Exaggeration (0–1) — pushes the voice's characteristic style. Start at 0.0; raise for characters.
- Speaker Boost — a toggle that sharpens speaker identity. Leave on.
12. Voice IDs — the 20 Characters That Matter
Every voice has a stable ID. Memorize a few, copy the rest from the library.
export const VOICES = {
Rachel: "21m00Tcm4TlvDq8ikWAM",
Adam: "pNInz6obpgDQGcFmaJgB",
Bella: "EXAVITQu4vr4xnSDxMaL",
Antoni: "ErXwobaYiN019PkySvjV",
Domi: "AZnzlk1XvdvUeBnXmlld",
} as const;13. API Testing — the Endpoint
The one endpoint you will hit most is:
POST https://api.elevenlabs.io/v1/text-to-speech/{voice_id}
Headers:
xi-api-key: <YOUR_KEY>
Content-Type: application/json
Body:
{
"text": "Hello world",
"model_id": "eleven_multilingual_v2",
"voice_settings": { "stability": 0.5, "similarity_boost": 0.75 }
}
Response: audio/mpeg binary stream14. Using Postman
- New request → POST → paste the URL, replace {voice_id} with Rachel's ID.
- Headers: add xi-api-key = your key.
- Body → raw → JSON: paste the JSON above.
- Click Send and Download → save as hello.mp3. Play it.
15. Using Python
# pip install requests python-dotenv
import os, requests
from dotenv import load_dotenv
load_dotenv()
KEY = os.environ["ELEVENLABS_API_KEY"]
VOICE = "21m00Tcm4TlvDq8ikWAM" # Rachel
r = requests.post(
f"https://api.elevenlabs.io/v1/text-to-speech/{VOICE}",
headers={"xi-api-key": KEY, "Content-Type": "application/json"},
json={
"text": "Hello from Python.",
"model_id": "eleven_multilingual_v2",
"voice_settings": {"stability": 0.5, "similarity_boost": 0.75},
},
timeout=30,
)
r.raise_for_status()
open("hello.mp3", "wb").write(r.content)
print("wrote", len(r.content), "bytes")16. Using JavaScript (Node)
// npm i node-fetch dotenv
import "dotenv/config";
import { writeFileSync } from "node:fs";
const KEY = process.env.ELEVENLABS_API_KEY!;
const VOICE = "21m00Tcm4TlvDq8ikWAM";
const res = await fetch(`https://api.elevenlabs.io/v1/text-to-speech/${VOICE}`, {
method: "POST",
headers: { "xi-api-key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({
text: "Hello from JavaScript.",
model_id: "eleven_multilingual_v2",
voice_settings: { stability: 0.5, similarity_boost: 0.75 },
}),
});
if (!res.ok) throw new Error(await res.text());
writeFileSync("hello.mp3", Buffer.from(await res.arrayBuffer()));
console.log("done");17. Using cURL (one liner)
curl -X POST "https://api.elevenlabs.io/v1/text-to-speech/21m00Tcm4TlvDq8ikWAM" \
-H "xi-api-key: $ELEVENLABS_API_KEY" \
-H "Content-Type: application/json" \
--data '{"text":"Hello from cURL","model_id":"eleven_multilingual_v2"}' \
--output hello.mp318. Downloading Audio — Formats
- mp3_44100_128 — default, 44.1 kHz, 128 kbps — good for most cases.
- mp3_22050_32 — smaller, telephony grade.
- pcm_16000 — raw PCM, feed into Twilio / DSP.
- ulaw_8000 — μ-law 8 kHz, real phone lines.
Set with the output_format query param: ?output_format=pcm_16000.
19. Best Settings by Use Case
// Copy-paste presets
export const PRESETS = {
narration: { stability: 0.55, similarity_boost: 0.80, style: 0.0 },
conversation: { stability: 0.35, similarity_boost: 0.80, style: 0.15 },
ivr: { stability: 0.75, similarity_boost: 0.85, style: 0.0 },
character: { stability: 0.25, similarity_boost: 0.75, style: 0.6 },
};20. Troubleshooting
- 401 Unauthorized → wrong or rotated API key. Regenerate; update .env.
- 422 Unprocessable → text too long (max 5000 chars per request) or invalid voice_id.
- 429 Rate Limit → your plan's concurrency exceeded. Back off 1s and retry.
- Robotic output → stability too high. Drop to 0.35.
- Muffled clone → training audio had noise. Re-upload denoised WAV.