Guides
A text-to-speech API you can read in one sitting
One POST for audio, one webhook for the long ones.
Last checked 2026-08-14
In short
Create an API key in Settings, POST your text and a voice to the synthesis endpoint with a bearer token, and read the audio out of the response body - MP3, WAV, OGG, FLAC or u-law. Long jobs are queued and announce themselves with a signed webhook. The API is on paid plans from $15 a month; the full reference is on the developers page.
Authentication and the shape of it
One API key per integration, created in Settings, sent as Authorization: Bearer. Keys are scoped to the workspace, can be revoked without touching the others, and are shown once - the database keeps a hash, so a leaked key can be revoked but never recovered.
The endpoints are the boring ones on purpose: list voices, synthesise, stream, queue a job, fetch a job, list your pronunciation entries. No SDK is required to use any of them; curl is a first-class client.
Synchronous, streaming, or queued
- Synchronous. Post text, get bytes. Right for a line, a notification, a phone prompt.
- Streaming. First audio while the rest is still rendering - what you want behind a live-ish product.
- Queued job. For a chapter, a bulk CSV, a dub or a transcription. Post it, get an id, and receive a signed webhook when it is done; retries are automatic and the signature is HMAC over the body, so a delivery cannot be forged.
The limits worth knowing before you build
- Characters per request are capped per plan (200,000 on $15, higher above) - split a book into chapters.
- Engines run on finite containers, so heavy bursts queue rather than fan out infinitely. The response tells you when it queued.
- Indic and translation have their own monthly meters.
- Every rendered file is watermarked and served with a header declaring it synthetic. Do not strip either - your customers may need them.
MCP, if your client is a model
Naadly also speaks the Model Context Protocol, so Claude, Cursor and other MCP clients can list voices and render speech directly with your key - no glue code. That is the shortest path from "read this out" in a chat window to an MP3 on disk.
Step by step
- Create a key Settings - API keys. Copy it once; it is stored as a hash.
- List the voices Fetch the voice list and cache it. Each entry carries language, accent, pace, tier and licence, which is what you need to build your own picker.
- Render one line POST text, voice and format. Read the bytes. Total round trip is a couple of seconds for a sentence.
- Queue the long ones Anything over a page goes to the job endpoint with a webhook URL.
- Verify the webhook Check the HMAC signature against your signing secret before you trust the payload.
Questions
- Is there a free text to speech API?
- Not on Naadly - API access starts on the $15 plan, because an open API on a free tier is a bill somebody else pays.
- Do you have Python and JavaScript SDKs?
- The API is plain HTTP with JSON and audio bodies, documented with copyable curl, Python and JavaScript examples on the developers page.
- How do I know when a long job finishes?
- A signed webhook, or poll the job endpoint. Deliveries retry with backoff and every attempt is logged.
- Can I use it from an MCP client like Claude or Cursor?
- Yes. The MCP server exposes the voice catalogue and synthesis as tools.