Text-to-Speech APIs

✓ Docs-verified · Sep 2, 2026◌ Not audio-tested△ What we could not verify

Published September 2, 2026 · Every figure below was read from the vendor’s own API documentation, OpenAPI or discovery specification on September 2, 2026. One note on Resemble AI: it appears throughout because its API is still documented and existing customers still use it, but the company no longer sells voice generation — treat its rows as a record rather than as a buying option. This page compares integration constraints, not output. No listening test has been run, so nothing here says how any of these sound.

The short answer

The number that decides your architecture is concurrency, and most comparisons never mention it. Cartesia’s free tier allows 2 concurrent text-to-speech requests. Speechify’s allows 1. Amazon Polly supports up to 26 concurrent long-form requests. Those are different products for different jobs, and price tells you none of it.

Per-request character caps differ by a factor of ten. OpenAI hard-caps at 4,096 characters. Speechify’s non-streaming endpoint caps at 2,000 and its streaming endpoint at 20,000. ElevenLabs runs 5,000 to 40,000 depending on model. If you synthesize long documents, this is the constraint you hit first.

“Streaming” means four incompatible things here. HTTP chunked, WebSocket, gRPC bidirectional and HTTP/2 event streams. Google’s streaming is gRPC-only, marked Pre-GA, and limited to one voice family. Amazon’s requires the generative engine and an SDK supporting HTTP/2 event streams.

And you will hit documentation defects. Murf’s OpenAPI spec declares no security schemes at all. Resemble’s docs contradict themselves twice on authentication. OpenAI’s own example sends a parameter its reference does not document.

Basis: vendor API documentation and machine-readable specifications only, checked September 2, 2026 — no accounts created, no API calls made (how we verify).

On this page

Concurrency: the number that decides it

If you are building anything that serves more than one user at a time, concurrency is the constraint that determines your architecture. It is published in wildly different units across these ten, and three vendors do not publish it for speech at all.

Published concurrency and throughput limits, in each vendor’s own unit — read September 2, 2026
ProviderPublished limitUnit and notes
SpeechifyFree 1 · Starter 15 · Pro 30 · Scale 60 · Enterprise 100Simultaneous text-to-speech requests, per plan — not the same meter as the “concurrent calls” figure Speechify publishes for voice agents, which runs 3/6/12/30 across the same plans. Returns 429 with a Retry-After header
CartesiaFree 2 · Pro 3 · Startup 5 · Scale 15 · Enterprise customConcurrent TTS requests. Parallel WebSocket connections capped at 10× that limit
ElevenLabsMultilingual v2: Free 2 · Starter 3 · Creator 5 · Pro 10 · Scale 15 · Business 15
Flash: Free 4 · Starter 6 · Creator 10 · Pro 20 · Scale 30 · Business 30
Concurrent requests, published per plan and per model family — Flash allows double throughout. Enterprise reads “Elevated” rather than a number. Re-verified September 2, 2026
Amazon PollyUp to 26 concurrent long-form · up to 18 concurrent neuralDerived by Amazon from transactions per second: neural is 8 tps with a burst limit of 10
Azure SpeechS0: 30 TPS default, adjustable to 1,000Transactions per second per resource. F0 tier not available for batch
Google Cloud100A named quota, ConcurrentStreamingSessionsPerProject — streaming sessions, not requests
Resemble AI“generally allows 40 requests per second per API token”Requests per second, not concurrency. One endpoint row published: Audio Enhancement at 10 per minute
Murf AIFree 5 · Pay-as-you-go 5Concurrency, alongside 1,000 and 10,000 requests per minute respectively
MiniMax60 RPM for speech modelsNo concurrency figure published for speech — though its Music table has a CONN column and Video publishes max inflight tasks
OpenAINot publicPer-model RPM and TPM for the speech models appear to sit behind account login

Read the units before comparing the numbers. Concurrent requests, transactions per second, requests per minute and streaming sessions are four different things, and a vendor publishing a large number in a generous unit is not necessarily more capable than one publishing a small number in a strict one.

Two vendors document behaviour that changes what the number means. ElevenLabs queues rather than fails when you exceed concurrency, describing queued requests as typically adding about 50ms of latency, and publishes two response headers so you can monitor concurrency in-band. It also meters concurrency differently by transport: HTTP counts each request, the TTS WebSocket counts only generation time, and Text to Dialogue reserves a session per open connection from a separate pool. Cartesia publishes a canonical 429 body with an explicit concurrency_limited error code.

MiniMax’s omission is conspicuous rather than accidental-looking. Its rate-limit tables publish a concurrency column for Music and a max-inflight-tasks figure for Video, but the speech rows have neither — only 60 RPM. The vendor demonstrably publishes concurrency where it chooses to; for speech it does not.

Per-request character caps

The second constraint you hit, usually while building rather than while planning. Every one of these is a hard limit that forces client-side splitting.

Published per-request input limits — read September 2, 2026
ProviderLimitDetail
ElevenLabs5,000–40,000Published per model in a table. The vendor’s stated remedy for exceeding it is client-side splitting
Speechify2,000 / 20,000/v1/audio/speech 2,000; /v1/audio/stream 20,000. “Character counts include SSML tags”
Amazon Polly6,000Default SynthesizeSpeech total character count. Async tasks allow 200,000 total, 100,000 billed
OpenAI4,096A hard input cap per speech request, stated plainly
Resemble AI3,000Synchronous cap
Murf AI3,000“The API supports up to 3,000 characters per request. For longer text, split it into multiple requests.”

Speechify’s SSML note is the one to internalize. If your input carries markup, your usable text budget is smaller than the number suggests — and on a 2,000-character endpoint, a heavily marked-up passage can lose a meaningful fraction of it to tags. Google applies the same principle to billing rather than to limits: it counts all SSML tags except <mark> as billable characters, which our pricing comparison covers.

The 10× gap between OpenAI’s 4,096 and Speechify’s streaming 20,000 is the practical difference between splitting a chapter into dozens of requests and sending it whole. If you are narrating long-form text, check this before you check price.

Streaming means four different things

Every vendor here advertises streaming. They do not mean the same thing by it, and the differences are load-bearing.

Documented streaming transports — read September 2, 2026
ProviderTransportsConstraint you should know
ElevenLabsHTTP chunked; WebSocket (single-context); WebSocket (multi-context)The TTS WebSocket does not support the eleven_v3 model. Multi-context contexts time out after a default 20 seconds of inactivity
Murf AIHTTP chunked; WebSocketNo Server-Sent Events anywhere — confirmed absent from its OpenAPI, AsyncAPI, docs index and changelog
CartesiaWebSocketParallel WebSocket connections capped at 10× your concurrency limit
MiniMaxBidirectional WebSocketRegion-bound endpoints; region mismatch is a documented source of 401s
Resemble AIWebSocket; HTTP streamThey live on different hosts from the main API
SpeechifyHTTP stream endpointThe streaming endpoint carries the 10× larger character cap
OpenAIstream_format: sse or audiosse is not supported for tts-1 or tts-1-hd — only the newer model
Amazon PollyBidirectional streamingRequires the generative engine and an SDK supporting HTTP/2 event streams, on a narrower SDK matrix than Polly’s general list
Google CloudgRPC bidirectional onlyMarked Preview / Pre-GA, available for only one named voice family, with a Python client-library sample and no raw HTTP path
Azure SpeechSpeech SDKStreaming is via the SDK rather than a documented raw transport

Google is the outlier and it matters. Its live v1 discovery document contains exactly seven methods and none of them is a streaming method — streaming exists only as gRPC bidirectional, documented in a guide marked Pre-GA, restricted to one voice family, with only a Python sample invoked through the generated client. If your stack is not gRPC-friendly or your voice is outside that family, Google’s streaming is not available to you regardless of what its marketing says.

Amazon’s constraint is a stack of three. Bidirectional streaming needs the generative engine, an SDK that supports HTTP/2 event streams, and one of a narrower set of SDKs than Polly’s general 10-language list. Each is documented; together they rule out a lot of existing integrations.

OpenAI’s is a version trap. Choosing the cheaper tts-1 or tts-1-hd models means giving up SSE streaming entirely — the parameter exists but those two models do not accept it.

One thing this page deliberately does not compare is latency. Every vendor publishes a figure, they measure different quantities, and most name no metric at all — our real-time comparison sets out why those numbers cannot be ranked, and compares barge-in, turn detection and telephony instead.

Authentication

Three schemes, and knowing which you are dealing with determines how you handle secrets, key rotation and client-side calls.

Cartesia publishes the most interesting enforcement detail on this page. Verbatim: “All endpoints use HTTPS. HTTP is not supported. API keys that call the API over HTTP may be subject to automatic rotation.” The penalty for a plaintext call is not a refused request — it is your key being rotated out from under you. Cartesia also runs three credential types, including an admin key prefixed sk_car_admin_ required for usage and key management, which is a sensible separation few here offer.

Speechify sends a build-date Speechify-Version header by default from its SDKs, and documents that raw HTTP callers can send the same header to pin a dated response shape. That is a genuinely useful thing to publish and nobody else here does it.

Several of these APIs also run your text through a normalizer, a pronunciation layer and a prosody layer before synthesis, each with its own parameters and defaults — and one vendor documents the same normalization parameter with opposite defaults on two of its own endpoints. Our guide to how AI voice generators work covers those stages.

SDK coverage

Whether an official SDK exists in your language is often the whole decision, and the spread here is wide.

Officially published SDKs for speech — read September 2, 2026
ProviderOfficial SDKsNote
Amazon PollyTen languages listed on Polly operationsThe bidirectional streaming matrix is narrower than this list
Azure SpeechMany, via the Speech SDKExplicitly: “C isn’t a supported programming language for the Speech SDK”; Swift shares libraries with Objective-C
OpenAITypeScript/JavaScript, Python, Ruby and othersLabelled official, with the vendor’s own hedges intact
Google CloudPer-language client librariesSource repositories published per language
ElevenLabsTwo for the REST API: Python and JavaScriptSeven more exist for the Agents Platform, which is a different product. Three further libraries — Vercel AI SDK, .NET and Unity — are explicitly disclaimed as not officially supported
CartesiaTwo: JavaScript/TypeScript and PythonNo Go, Java, C#, Rust, PHP or Ruby SDK, and no community libraries named
SpeechifyTwo: Python and TypeScriptThe older @speechify/api-sdk package is documented as deprecated
Resemble AITwoNode.js is described as TypeScript-first with streaming helpers
Murf AIOne: PythonThe only official SDK Murf lists
MiniMaxNone first-party for speechIt publishes compatibility base URLs so third-party SDKs can be pointed at it instead

ElevenLabs’ count is easy to overstate. The large SDK list belongs to the Agents Platform, not to the REST text-to-speech API, which has two. And the three libraries most likely to appear in a JavaScript or game-engine stack — Vercel AI SDK, .NET and Unity — sit in a table the vendor explicitly marks as not officially supported.

MiniMax’s approach is different in kind rather than merely thinner. Rather than publishing speech SDKs, it publishes compatibility base URLs you point an existing third-party SDK at. That works, and it means no first-party client to file issues against.

Async and batch

For long documents, an async endpoint is usually the right integration, and five vendors publish one.

Azure’s 10,000 text inputs per job is the largest documented batch unit here, and its 31-day job TTL is the only retention figure any of these vendors publishes for async output.

Documentation defects you will hit

These are not editorial complaints. Each one costs a developer time, and each is verifiable in the vendor’s own published material.

Two vendors deserve credit against this list. ElevenLabs exposes character cost, request ID and trace ID as response headers, which makes cost attribution and support escalation straightforward. Cartesia and Speechify both publish a canonical 429 shape — Cartesia with a named concurrency_limited error code, Speechify with a Retry-After header — which is the difference between implementing backoff correctly and guessing at it.

Choosing for your workload

  1. Start with concurrency, not price. Work out your peak simultaneous requests and check it against the table above, in the vendor’s own unit. A free tier allowing 1 or 2 concurrent requests will not serve a product regardless of how many characters it includes.
  2. Check the per-request cap against your longest input. If you exceed it you are writing a splitter, and splitting introduces prosody seams no vendor document discusses.
  3. Confirm the streaming transport matches your stack before assuming streaming exists. gRPC-only, SSE-on-newer-models-only and HTTP/2-event-streams-only are all real constraints here.
  4. Check whether an official SDK exists in your language, and whether the SDK you found belongs to the product you are integrating — ElevenLabs’ large SDK list is for a different product.
  5. If you are synthesizing long documents, use the async endpoint, and check its format restrictions. ElevenLabs’ async path is MP3-only; Google’s requires Cloud Storage.
  6. Read the 429 documentation before you need it. Two vendors publish a canonical shape; one publishes no 429 semantics at all.
  7. Then check price — in our pricing comparison, where every rate is normalized to one unit — and language coverage in our multilingual comparison, where no vendor’s advertised count survives a recount.

Frequently asked questions

Which text-to-speech API is best for developers?

It depends on the constraint that binds you. For raw concurrency headroom, Azure publishes the highest adjustable ceiling at 1,000 TPS and Amazon Polly documents up to 26 concurrent long-form requests. For documentation quality, ElevenLabs publishes the most complete parameter surface, per-model caps, in-band concurrency headers and cost headers. For the fewest surprises in a small stack, Cartesia and Speechify both publish canonical error shapes. We have not tested output quality, so none of this is a judgment about how they sound.

What is the maximum text I can send in one request?

It ranges from 2,000 characters on Speechify’s non-streaming endpoint to 40,000 on ElevenLabs’ largest-cap model. OpenAI hard-caps at 4,096, Amazon Polly defaults to 6,000, and Resemble caps synchronous requests at 3,000. Speechify counts SSML tags toward the limit.

Do all of these support streaming?

All advertise it, but they mean four incompatible transports. Google’s is gRPC bidirectional only, marked Pre-GA and limited to one voice family. Amazon’s requires the generative engine and an SDK supporting HTTP/2 event streams. OpenAI’s SSE format is not supported on tts-1 or tts-1-hd. Murf publishes no Server-Sent Events at all.

Which providers publish concurrency limits?

Seven publish a usable figure. MiniMax publishes rate limits but no concurrency for speech, despite publishing concurrency columns for its music and video products. OpenAI’s per-model limits appear to sit behind account login. Resemble publishes a requests-per-second figure rather than a concurrency limit.

Is there an SDK for my language?

If you work in Python or JavaScript, yes, everywhere that publishes an SDK at all. Outside those two the field narrows fast: Murf publishes only Python, MiniMax publishes none first-party for speech, and Cartesia explicitly has no Go, Java, C#, Rust, PHP or Ruby SDK. The cloud platforms are the broadest.

What happens when I exceed a rate limit?

It varies, and this is worth knowing in advance. ElevenLabs queues rather than failing, adding roughly 50ms by its own account. Cartesia and Speechify both return a documented 429 shape. Resemble AI publishes no 429 semantics, no Retry-After and no backoff guidance.

Can I call these APIs from a browser?

Not safely with a static key, which is what most of these use. Murf publishes a short-lived bearer token endpoint for client-side use, minted server-side with the api-key header, which is the pattern to look for. Cartesia goes further in the other direction: calling it over plain HTTP may get your key automatically rotated.

Sources and what we could not verify

Every figure on this page was read on September 2, 2026 from vendor API documentation, published OpenAPI and AsyncAPI specifications, and live discovery documents. Where a machine-readable specification was available we parsed it directly rather than relying on the rendered documentation. Per-provider detail is in the ten reviews linked throughout, and the method is on the methodology page.

What we could not verify

Honesty about gaps beats a page that looks complete. Genuinely unresolved as of September 2, 2026:

Change log

September 2, 2026 — First publication. All figures read from official vendor API documentation and machine-readable specifications on September 2, 2026 and dated accordingly.

Published September 2, 2026 · This page compares documented integration constraints and reports no measurements — we made no API calls and ran no listening test. API limits and specifications change frequently; corrections are recorded with their date on the corrections page. Independence note: this page contains no affiliate links, and no vendor paid for placement or influenced the order — see how we make money and our editorial policy.