Ready to use the API?
Free account — no credit card required. Get an API key in 30 seconds.
OpenAI-compatible Text-to-Speech API. Drop-in replacement — change your base URL and API key.
curl -X POST https://your-domain.com/api/v1/audio/speech \
-H "Authorization: Bearer ev_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"model": "kokoro-82m",
"input": "Hello, this is EasyVoice!",
"voice": "af_aoede"
}' \
--output speech.mp3Generate speech from text. Returns audio file directly.
| Header | Value |
|---|---|
| Authorization | Bearer ev_your_api_key |
| Content-Type | application/json |
| Parameter | Type | Required | Description |
|---|---|---|---|
| model | string | No | Always "kokoro-82m" |
| input | string | Yes | Text to convert (max 10,000 chars) |
| voice | string | No | Voice ID (default: af_aoede) |
| response_format | string | No | "mp3" or "wav" (default: mp3) |
| speed | number | No | 0.5 to 2.0 (default: 1.0) |
from openai import OpenAI
client = OpenAI(
api_key="ev_your_api_key",
base_url="https://your-domain.com/api/v1"
)
response = client.audio.speech.create(
model="kokoro-82m",
voice="af_aoede",
input="Hello from EasyVoice!"
)
response.stream_to_file("output.mp3")import OpenAI from "openai";
const client = new OpenAI({
apiKey: "ev_your_api_key",
baseURL: "https://your-domain.com/api/v1"
});
const mp3 = await client.audio.speech.create({
model: "kokoro-82m",
voice: "af_aoede",
input: "Hello from EasyVoice!"
});
const buffer = Buffer.from(await mp3.arrayBuffer());
await fs.promises.writeFile("output.mp3", buffer);| Limit | Value |
|---|---|
| Requests per minute | 60 |
| Max input length | 10,000 characters |
| Characters per month | Unlimited (Pro plan) |
54 voices across 8 languages. Use the voice ID in your API requests.
See the voice browser for the full list with audio previews.