Text-to-speech API for Urdu, Hindi and English
Send text from your server and get an MP3 back. The Voicely API is in Public Beta: a small set of REST endpoints that work today, with 30 voices and self-serve keys.
Server-side REST API · 30 voices · MP3 output · up to 1,000 characters per request
How the text-to-speech API works
- Step 1
Create a server-side key
Sign in, accept the API Beta Terms and create a key on the API access page. Store it in an environment variable on your server.
- Step 2
Send text, a voice and a model
POST your text to /v1/text-to-speech/{voice_id} with the xi-api-key header, model_id voicely-flash-v1 and an optional language_code.
- Step 3
Receive an MP3
The response body is the finished audio (MP3, 44.1 kHz, 128 kbps). Save it or serve it to your users from your backend.
One request, one MP3. Run it on your server with the key in an environment variable:
# A new unique Idempotency-Key per synthesis (uuidgen on macOS/Linux; /proc fallback on Linux)
IDEMPOTENCY_KEY="$(uuidgen 2>/dev/null || cat /proc/sys/kernel/random/uuid)"
curl --fail-with-body -sS -X POST \
"https://api.tryvoicely.com/v1/text-to-speech/vly_f02?output_format=mp3_44100_128" \
-H "xi-api-key: $VOICELY_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $IDEMPOTENCY_KEY" \
-d '{"text":"Hello from the Voicely API.","model_id":"voicely-flash-v1","language_code":"en"}' \
--output speech.mp3Node.js and Python versions, every parameter and the full error list are in the Voicely API reference. The machine-readable OpenAPI 3.1 specification describes the same endpoints.
What developers build with it
App and product narration
Read out onboarding, lessons, notifications or articles inside your app, generated on your server.
Accessibility and audio publishing
Offer a listen version of written content in Urdu, Hindi or English for readers who prefer audio.
Automated content pipelines
Turn scripts from your CMS or batch jobs into MP3 files without anyone opening a studio.
Backend integrations
Call the API from any server language that can send an HTTPS request and store a file.
Urdu, Hindi, English and every Studio language
The API accepts every language available in Voicely Studio: 31 languages, as an ISO code (es) or an exact Studio locale (es-MX). Urdu works in Urdu script, or in Roman Urdu with language_code ur. 30 built-in voices are available; Urdu uses two dedicated voices, one female and one male, and Urdu sent with any other voice ID is read by the dedicated voice of the same gender (the response headers say which voice was used).
Urdu text-to-speech API
Send Urdu in Urdu script. Set language_code to ur, or leave it out and Arabic-script text is read as Urdu.
Prefer no code? Try Urdu text to speech in the browser studio.
Hindi text-to-speech API
Send Hindi in Devanagari. Set language_code to hi, or leave it out and Devanagari text is read as Hindi.
Prefer no code? Try Hindi text to speech in the browser studio.
English text-to-speech API
Set language_code to en. Without a language_code, any text in Latin letters is treated as English.
Prefer no code? Try English text to speech in the browser studio.
Also available: Arabic, Bangla, Dutch, French, German, Indonesian, Italian, Japanese, Korean, Marathi, Polish, Portuguese, Romanian, Russian, Spanish, Tamil, Telugu, Thai, Turkish, Ukrainian, Vietnamese, Chinese Mandarin, Punjabi, Gujarati, Kannada, Malayalam, Hebrew, Swahili. The codes and locales are listed in the API reference.
Moving from another TTS API
The request shape is one many TTS clients already use: an xi-api-key header, POST /v1/text-to-speech/{voice_id} with a JSON body, and GET /v1/voices and GET /v1/models for discovery.
To switch, change the base URL to https://api.tryvoicely.com, use a Voicely key, pick Voicely voice IDs and set model_id to voicely-flash-v1. It is not a drop-in replacement for any other provider: WebSockets, voice cloning and other output formats are not in the beta, so test your client against the reference first.
Comparing tools for creators rather than code? See how Voicely compares with ElevenLabs.
Available in the beta
GET /v1/modelsGET /v1/voicesGET /v2/voicesGET /v1/voices/{voice_id}GET /v1/userGET /v1/user/subscriptionPOST /v1/text-to-speech/{voice_id}POST /v1/text-to-speech/{voice_id}/stream- MP3 or raw PCM (mp3_44100_128, pcm_24000, pcm_16000, ulaw_8000), complete or streamed, up to 1,000 characters per request
- 30 voices · languages: English, Hindi, Urdu
- 10 requests per minute, 1 at a time
Not in the beta yet
- WebSocket connections (streaming is plain HTTP; /stream may answer 503 streaming_not_available when paused or at capacity)
- Voice cloning or custom voices
- Output formats other than mp3_44100_128, pcm_24000, pcm_16000, ulaw_8000
- Browser-direct (CORS) calls: server-side integrations only
Billing and limits in plain language
- Each completed request is charged in 100-character blocks, rounded up, from your API wallet.
- Purchased Voicely credits cover API usage only if you switch that on, and only up to a daily limit you choose. Website free and trial credits are never used by the API.
- There is no ongoing free tier. Eligible accounts may request one device-verified trial with 12,000 API characters. The trial is added directly to your API wallet.
- A request that fails before it completes is not charged. Retrying with the same Idempotency-Key returns the stored result without a second charge.
- Limits per account: 1,000 characters per request, 10 requests per minute, 1 request at a time.
Your balances and spend setting are on the API access page.
Keep your API key on the server
- Keep the key on your server, in an environment variable or a secrets manager.
- Never put it in browser JavaScript, a mobile app or a public repository.
- Never send it in a URL or query string, and keep it out of logs.
- If a key is exposed, revoke it on the API access page and create a new one. You can hold two active keys, so you can rotate without downtime.
Getting help
Most errors explain themselves: every error response has a code, and the API reference error table says what to do for each one. If you are still stuck, contact support with the request ID from the response, the time in UTC, the endpoint and the HTTP status. Never send your API key or sensitive text.
Text-to-speech API questions
Does Voicely have a text-to-speech API for Urdu?
Yes. The Voicely API is in Public Beta and turns Urdu text into MP3 audio. Send Urdu script, with language_code ur or detected from the script, or Roman Urdu with language_code ur.
Which languages does the API support?
Every language available in Voicely Studio: 31 languages, including Urdu, Hindi and English. GET /v1/models lists the language codes, and the API reference lists the accepted locales.
How many voices are available?
30 built-in voices with stable IDs. GET /v1/voices lists them with their languages.
How many characters can I send in one request?
Up to 1,000 characters per request. Split longer text into several requests.
What are the rate limits?
10 requests per minute and 1 request at a time per account. A limited request gets a 429 response with a Retry-After header.
What audio format does the API return?
MP3 at 44.1 kHz and 128 kbps by default. Raw formats: 16-bit PCM mono at 24 kHz (the engine’s own audio, lossless, skipping the MP3 encoding step) or 16 kHz, and G.711 μ-law at 8 kHz, which is phone-line (narrowband) quality for telephony (mp3_44100_128, pcm_24000, pcm_16000, ulaw_8000). Raw formats have no header. Other formats are not available in the beta.
Does the API support streaming or WebSockets?
Streaming, yes: POST /v1/text-to-speech/{voice_id}/stream sends the audio (MP3 or a raw format) while it is being generated, over plain HTTP. A stream that ends cleanly was completed and charged; one that ends with an error was not charged. If streaming is paused or busy it answers 503 streaming_not_available, and the buffered endpoint still works. WebSockets are not available in the beta.
Can I clone a voice or add a custom voice?
No. The beta offers the 30 built-in voices only. Voice cloning and custom voices are not available.
Is it compatible with ElevenLabs API clients?
Partly. It uses the xi-api-key header and the POST /v1/text-to-speech/{voice_id} path that many clients know, plus GET /v1/voices and /v1/models. It is not a full replacement: voice IDs, models and several features differ, so test your client against the docs.
Can I call the API from a browser or mobile app?
No. The API is for server-side use only and does not allow browser (CORS) calls. Call it from your backend and pass the audio to your users, so the key never leaves your server.
How is API usage billed?
Each completed request is charged in 100-character blocks, rounded up, from your API wallet; 1 Voicely credit funds 1,000 API characters. If you switch it on, purchased Voicely credits can cover API usage up to a daily limit you choose. Website free and trial credits are never used by the API, and a request that fails before it completes is not charged.
Is there a free tier for the API?
There is no ongoing free tier. Eligible accounts may request one device-verified trial with 12,000 API characters on the API access page. The trial is added directly to your API wallet; after that, API usage is paid from your API wallet or, if you enable it, your purchased Voicely credits. Website free and trial credits are never used by the API.
Is the API ready for production?
It is a Public Beta. The endpoints listed on this page work today, but there is no uptime SLA yet, and limits and features may change as the beta develops.
Start with the Public Beta
Sign in, create a key on the API access page, then send your first request from your server.
Not writing code?
Not a developer? Voicely for Android™ gives you Voicely in a phone app, with no code.