Add voice to your app with one API call
Base URL: https://www.talkify.io/api/v1 · JSON in, JSON out. Every request needs an API key from your dashboard (Pro plan and above).
Quick start
const res = await fetch("https://www.talkify.io/api/v1/speech", { method: "POST", headers: { Authorization: `Bearer ${process.env.VOICEGEN_API_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ text: "Welcome to our channel!", voice: "kavya-ta-in", // Tamil · Friendly emotion: "excited", format: "mp3", }), }); const { audio_url } = await res.json(); // ✓ 0.31s
import os, requests res = requests.post( "https://www.talkify.io/api/v1/speech", headers={"Authorization": f"Bearer {os.environ['VOICEGEN_API_KEY']}"}, json={ "text": "Welcome to our channel!", "voice": "kavya-ta-in", # Tamil · Friendly "emotion": "excited", "format": "mp3", }, ) audio_url = res.json()["audio_url"] # ✓ 0.31s
curl https://www.talkify.io/api/v1/speech \ -H "Authorization: Bearer $VOICEGEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{"text":"Welcome to our channel!", "voice":"kavya-ta-in", "emotion":"excited","format":"mp3"}' # {"id":"req_8Hq2kLx9","audio_url":"…","characters":23}
Authentication
Send your secret key as a Bearer token. Keys start with vg_sk_live_ (or vg_sk_test_ for testing). Keep keys on your server — never in browser or mobile code.
Authorization: Bearer vg_sk_live_••••••••••••••••
Keys can be limited to speech only. Revoke a key at any time from API keys in your dashboard.
Endpoints
| Method | Path | Description |
|---|---|---|
| GET | /voices | List voices you can use. Filters: language (e.g. en, es, ta), gender, q. |
| GET | /languages | List supported languages with their default locale. |
| POST | /speech | Turn text into speech. Returns the request ID, audio URL, characters and duration. |
| GET | /speech/{id} | Fetch a previous request and its status. |
| GET | /speech/{id}/audio | Download the audio file of a request. |
| GET | /usage | Characters used and left in the current period. |
Create speech
POST /speech
| Field | Type | Notes |
|---|---|---|
| text | string | Required. Up to your plan’s limit per request. Tags such as [pause 0.5s] and [emphasis] are supported. |
| voice | string|int | Required. Voice slug or ID from /voices, e.g. kavya-ta-in. |
| emotion | string | neutral · friendly · excited · calm · sad · whisper |
| speed | number | 0.5 – 2.0, default 1.0 |
| format | string | mp3 · wav · ogg (depends on your plan) |
// 200 OK { "id": "req_8Hq2kLx9", "status": "completed", "audio_url": "https://www.talkify.io/api/v1/speech/req_8Hq2kLx9/audio", "characters": 23, "duration": 2, "format": "mp3" }
Webhooks
Add an endpoint in API keys → Webhooks to receive speech.done and dub.done events. Each request carries an X-VoiceGen-Signature header: an HMAC-SHA256 of the raw body with your webhook secret. Verify it before trusting the payload.
const crypto = require("crypto"); function isValid(rawBody, signature, secret) { const expected = crypto.createHmac("sha256", secret).update(rawBody).digest("hex"); return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(signature)); }
Errors
{ "error": { "code": "quota_exceeded", "message": "Not enough characters left." } }
| HTTP | Code | Meaning |
|---|---|---|
| 401 | invalid_api_key | The key is missing, wrong or revoked. |
| 402 | quota_exceeded | Not enough characters left in this period. |
| 403 | plan_required | Your plan does not include API access, or the key lacks permission. |
| 404 | not_found | The voice or request does not exist. |
| 422 | validation_error | A parameter is missing or invalid. The message says which. |
| 429 | rate_limited | Too many requests. Wait a few seconds and retry. |
| 503 | provider_unavailable | All speech engines are busy. Retry with exponential back-off. |
Rate limits
120 requests per minute per account on Pro, 600 on Business. Every response is counted against your monthly characters only when audio is produced.
Popular voices
| Voice | Language | Slug | |
|---|---|---|---|
| English (US) | sophia-en-us | ||
| English (UK) | michael-en-gb | ||
| Tamil | kavya-ta-in | ||
| Hindi | arjun-hi-in | ||
| English (UK) | isabella-en-gb | ||
| English (US) | emma-en-us | ||
| English (UK) | liam-en-gb | ||
| English (US) | james-en-us |