Sign in Start free

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

  1. Create a key Settings - API keys. Copy it once; it is stored as a hash.
  2. 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.
  3. Render one line POST text, voice and format. Read the bytes. Total round trip is a couple of seconds for a sentence.
  4. Queue the long ones Anything over a page goes to the job endpoint with a webhook URL.
  5. 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.