Neural voices in 70+ languages, streamed while they're still being generated.
Your text and audio are never stored. Drop a URL into an <audio> tag and you're done.
$ curl "https://speech.global/v1/tts?text=Hola%20mundo&voice=es-MX-DaliaNeural" \
-H "X-Api-Key: gs_live_…" -o hola.mp3
$ curl "https://speech.global/v1/tts?text=こんにちは&voice=ja-JP-NanamiNeural&stream=1" \
-H "X-Api-Key: gs_live_…" | mpv -
✓ audio/mpeg · streamed · not stored · 412 ms
Type anything, pick a language. This hits the real /v1/tts pipeline and streams the result back.
Sample sentences are pre-rendered for instant playback. Anything you type is synthesized live and discarded.
Chunked MP3 or WAV leaves the server as soon as the first sentence is synthesized. stream=1 and the browser plays it progressively — long texts start in milliseconds.
<audio autoplay src="{signedUrl}&stream=1"> // signed on your backend, no key in the page
Your audio is generated in memory, piped to your client and gone. No buckets, no logs of your text, nothing to leak or subpoena. Only character counts reach your dashboard.
379 natural voices, male and female, regional accents included. Same endpoint, different voice id — localize your product in one line.
Several synthesis engines sit behind every voice. If one degrades, the next takes over — same voice id, same language, no change on your side. You get an X-Fallback header; your users just hear speech.
Plain HTTP from curl, a browser <audio> tag or any backend. API keys per project, usage dashboard, live playground and Swagger docs included.
GET /v1/tts for URLs and audio tags, POST /v1/tts for long text. GET /v1/voices to browse.
curl "https://speech.global/v1/tts?text=Bom%20dia&voice=pt-BR-FranciscaNeural&format=wav" \
-H "X-Api-Key: $KEY" -o bom-dia.wav
# browser-safe URL (no key inside, expires in 10 min)
curl -X POST "https://speech.global/v1/tts/sign" -H "X-Api-Key: $KEY" \
-H "Content-Type: application/json" -d '{"text": "Bom dia", "voice": "pt-BR-FranciscaNeural"}'
const r = await fetch("https://speech.global/v1/tts", {
method: "POST",
headers: { "X-Api-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({ text: "Guten Morgen", voice: "de-DE-KatjaNeural" }),
});
new Audio(URL.createObjectURL(await r.blob())).play();
import requests
r = requests.get("https://speech.global/v1/tts",
params={"text": "नमस्ते दुनिया", "voice": "hi-IN-SwaraNeural", "stream": 1},
headers={"X-Api-Key": KEY}, stream=True)
for chunk in r.iter_content(8192):
player.write(chunk) # plays as it arrives
// backend: sign once (key stays server-side)
const { url } = await fetch("https://speech.global/v1/tts/sign", {
method: "POST", headers: { "X-Api-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({ text: "Bonjour", voice: "fr-FR-DeniseNeural" }),
}).then(r => r.json());
// page: plays directly, expires in 10 min, valid only for that text
<audio controls src="${url}&stream=1"></audio>
Voice is on the critical path of your product. We treat it that way.
Multiple neural engines behind one API. Each voice id maps to a primary engine and language-matched alternates, chosen for quality first.
Every engine is health-checked. A failing one is bypassed instantly and retried after a cooldown, so a bad minute upstream never becomes your outage.
X-Engine, X-Voice and X-Fallback on every response, plus per-key usage in the dashboard. No black boxes.