API-Dokumentation
Integrieren Sie TTS.ai in Ihre Anwendungen mit unserer REST API. OpenAI-kompatibles Format für einfache Migration.
Überblick
Die TTS.ai API bietet programmatischen Zugriff auf alle Plattformfunktionen: Text-zu-Speech-Synthese, Sprach-zu-Text-Transkription, Sprachklonen, Audio-Verbesserung und vieles mehr. Die API verwendet Standard-REST-Konventionen mit JSON Request/Response-Organen.
API-Schlüssel
Holen Sie sich Ihren API-Schlüssel aus Kontoeinstellungen. Verfügbar auf Pro- und Enterprise-Pläne.
Basis-URL
https://api.tts.ai/v1/
Auth
Träger Token über Authorization Kopfzeile
Authentifizierung
/v1/tts/ Arbeit ohne Auth, bis zu 5.000 Zeichen/Tag pro IP, mit einem unserer kostenlosen Modelle (piper, vits, melotts, kokoro). Melden Sie sich für ein kostenloses Konto an, um 15.000 Bonuszeichen und Zugriff auf Premium-Modelle zu erhalten.
Bei Premiummodellen und höheren Steuersätzen authentifizieren Sie sich mit einem Träger-Token in der Authorization Kopfzeile.
Authorization: Bearer sk-tts-your-api-key-here
SDKs
Offizielle SDKs machen es einfach, TTS.ai in Ihre Anwendung zu integrieren. Beide sind Open Source und auf GitHub verfügbar.
Python
pip install ttsai
from tts_ai import TTSClient
client = TTSClient(api_key="sk-tts-...")
audio = client.generate(
text="Hello world!",
model="kokoro"
)
client.save(audio, "output.wav")
JavaScript / Node.js
npm install @ttsainpm/ttsai
const { TTSClient } = require('@ttsainpm/ttsai');
const client = new TTSClient({
apiKey: 'sk-tts-...'
});
const audio = await client.generate({
input: 'Hello world!',
model: 'kokoro'
});
await client.saveToFile(audio, 'output.wav');
Basis-URL
Alle Endpunkte sind relativ zu dieser Basis-URL. Zum Beispiel ist der TTS-Endpunkt:
Steuersätze
Die Obergrenzen der API-Rate variieren je nach Plan:
| ENTWICKLUNG | Anträge/min | Gleichzeitig | Maximale Textlänge |
|---|---|---|---|
| Frei | 10 | 2 | 500 Zeichen |
| Starter | 30 | 3 | 1.000.000 Zeichen |
| Pro | 60 | 5 | 1.000.000 Zeichen |
| Unternehmen | 300 | 20 | 50.000 Zeichen |
Rate Limit Header sind in jeder Antwort enthalten: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.
Kreditkosten
| Dienstleistung | Kosten | Einheit |
|---|---|---|
| TTS (kostenlose Modelle: Piper, VITS, MeloTTS) | 1000 Zeichen | je 1000 Zeichen |
| TTS (Standardmodelle: Kokoro, CosyVoice 2 usw.) | 2.000 Zeichen | je 1000 Zeichen |
| TTS (Premium-Modelle: Tortoise, Chatterbox, etc.) | 4.000 Zeichen | je 1000 Zeichen |
| Rede zum Text | 2.000 Zeichen | pro Minute Audio |
| Stimme Klonen | 4.000 Zeichen | je 1000 Zeichen |
| Sprachwechsler | 3.000 Zeichen | pro Minute Audio |
| Audio-Verbesserung | 2.000 Zeichen | pro Minute Audio |
| Stimmentfernung / Stem Splitting | 3.000-4.000 Zeichen | pro Minute Audio |
| Sprachübersetzung | 5.000 Zeichen | pro Minute Audio |
| Sprach-Chat | 3.000 Zeichen | pro Spielzug |
| Schlüssel & BPM-Finder | Frei | -- |
| Audio-Konverter | Frei | -- |
Text in die Rede
Konvertieren von Text in Sprach-Audio. Gibt die Audiodatei im gewünschten Format zurück.
Antragsstelle
| Parameter | Art | Erforderlich | Warenbezeichnung |
|---|---|---|---|
| model | string | Nein | Modell-ID (z.B. kokoro , chatterbox , piper). Falls weggelassen, wählen wir automatisch ein Modell aus, das die gewünschte Sprache — kokoro für de/ja/zh/ko/fr/de/it/pt/es/hi/ru, piper für andere unterstützte Sprachen (ar/pl/nl/cs/da/fi/el/hu/tr/uk/vi/etc.) unterstützt. |
| text | string | Nein | Text zum Konvertieren in Sprache. Pro-Request-Cap: 500 Zeichen (anonym), 5.000 (kostenloses Konto), 1.000.000 (paid plan). Lange Eingänge sind automatisch gekunken Server-Seite. |
| voice | string | Nein | Sprach-ID (Verwenden von /v1/voices/ zur Liste der verfügbaren Stimmen) |
| format | string | Nein | Ausgabeformat: mp3 (Standard), wav, flac, ogg |
| speed | float | Nein | Sprechender Geschwindigkeitsmultiplikator. Standard: 1.0 . Bereich: 0.5 bis 2.0 |
| language | string | Nein | Sprachcode (z.B. de , es ). Selbstentdeckt, falls weggelassen. |
| instructions | string | Nein | Acting / Delivery-Queues (≤500 Zeichen). z.B. \ |
| pronunciations | object | array | Nein | Pro-Request Aussprache überschreibt. Entweder {\ |
| stream | boolean | Nein | Streaming-Antwort aktivieren. Standard: false |
Beispiel-Anforderung
curl -X POST https://api.tts.ai/v1/tts/ \
-H "Authorization: Bearer sk-tts-your-key" \
-H "Content-Type: application/json" \
-d '{
"model": "kokoro",
"text": "Hello from TTS.ai! This is a test.",
"voice": "af_bella",
"format": "mp3"
}' \
--output output.mp3
SSML Tags
Wrap-Nummern, Daten, Währung, Telefonnummern und Akronyme in Datumsformat standardmäßig The TTS endpoint queues your request and returns a JSON response with a job UUID. You then poll for the result. Poll this endpoint every 1-2 seconds until Fetch the Streaming alternative: For supported models (Kokoro, MeloTTS), use
interpret-as Eingabe Gesprochen als cardinal1234one thousand two hundred thirty-four ordinal21twenty-first date1999-12-31Dezember einunddreißig, neunzehn neunundneunzig time14:30two thirty PM telephone+1-555-867-5309plus one five five five eight six seven… currency$1,234.56one thousand two hundred thirty-four dollars and fifty-six cents spell-outNASAN A S A mdy für Englisch und dmy an anderer Stelle; Überschreiben mit format=\{
"model": "kokoro",
"voice": "af_bella",
"text": "Your appointment is on <say-as interpret-as=\"date\">2026-04-26</say-as> at <say-as interpret-as=\"time\">14:30</say-as>. Please call <say-as interpret-as=\"telephone\">+1-555-867-5309</say-as> if you need to reschedule."
}Ansprechen
Step 1: Submit request
{
"uuid": "77b71db532874ce98e84a69a2d740d4c",
"job_id": "f21316bb-aefa-480d-8523-701d1e3184ce",
"status": "queued",
"credits_used": 11,
"credits_remaining": 15000
}Step 2: Poll for result
status is completed or failed.{
"status": "completed",
"result_url": "https://api.tts.ai/static/downloads/77b71db5.../output.mp3"
}{
"status": "processing"
}Step 3: Download audio
result_url from the completed response to download the audio file.Vollständiges Beispiel
import requests, time
API_KEY = "sk-tts-your-key"
BASE = "https://api.tts.ai"
# 1. Submit TTS request
resp = requests.post(f"{BASE}/v1/tts/", json={
"model": "kokoro",
"text": "Hello from TTS.ai!",
"voice": "af_bella"
}, headers={"Authorization": f"Bearer {API_KEY}"})
data = resp.json()
uuid = data["uuid"]
# 2. Poll for result
while True:
result = requests.get(f"{BASE}/v1/speech/results/",
params={"uuid": uuid}).json()
if result["status"] == "completed":
# 3. Download audio
audio = requests.get(result["result_url"])
with open("output.mp3", "wb") as f:
f.write(audio.content)
break
elif result["status"] == "failed":
raise Exception(result.get("error", "Generation failed"))
time.sleep(1.5)POST /v1/tts/stream/ for real-time Server-Sent Events (SSE) streaming — no polling needed.
Rede zum Text
Transcribe audio to text. Unterstützt 99 Sprachen mit automatischer Erkennung.
Antragsstelle (multipart/form-data)
| Parameter | Art | Erforderlich | Warenbezeichnung |
|---|---|---|---|
| file | file | Nein | Audiodatei (MP3, WAV, FLAC, OGG, M4A, MP4, WebM). Max. 100MB. |
| model | string | Nein | STT-Modell: whisper (Standard), faster-whisper , sensevoice |
| language | string | Nein | Sprachcode. auto zur automatischen Erkennung (Standard). |
| timestamps | boolean | Nein | Einschließen von Zeitstempeln auf Wortebene. Standard: false |
| diarize | boolean | Nein | Lautsprecher-Diarisierung aktivieren. Standard: false |
Ansprechen
{
"text": "Hello, this is a transcription test.",
"language": "en",
"duration": 3.5,
"segments": [
{
"start": 0.0,
"end": 1.8,
"text": "Hello, this is",
"speaker": "SPEAKER_00"
},
{
"start": 1.8,
"end": 3.5,
"text": "a transcription test.",
"speaker": "SPEAKER_00"
}
]
}
Stimme Klonen
Erzeugen Sie Sprache in einer geklonten Stimme. Hochladen Sie eine Referenz-Audio und Text.
Antragsstelle (multipart/form-data)
| Parameter | Art | Erforderlich | Warenbezeichnung |
|---|---|---|---|
| reference_audio | file | Nein | Referenzstimme Audio (10-30 Sekunden empfohlen). Max 20MB. |
| text | string | Nein | Text, um in der geklonten Stimme zu sprechen. |
| model | string | Nein | Klonmodell: Chatterbox (Standard), Cosyvoice2, gpt-sovits |
| format | string | Nein | Ausgabeformat: mp3 (Standard), wav, flac |
| language | string | Nein | Target language code. Muss durch das gewählte Modell unterstützt werden. |
Ansprechen
Gibt die Audiodatei als binäre Daten zurück, genauso wie der TTS-Endpunkt.
Sprachwechsler
Konvertieren Sie Audio, um wie eine andere Stimme zu klingen. Quelle Audio hochladen und wählen Sie eine Zielstimme.
Antragsstelle (multipart/form-data)
| Parameter | Art | Erforderlich | Warenbezeichnung |
|---|---|---|---|
| file | file | Nein | Quelle Audio-Datei (MP3, WAV, FLAC). Max 50MB. |
| target_voice | string | Nein | Target Voice ID zum Konvertieren in (Verwenden von /v1/voices/ zur Liste verfügbarer Stimmen) |
| model | string | Nein | Sprachumwandlungsmodell: openvoice (Standard), knn-vc |
| format | string | Nein | Ausgabeformat: wav (Standard), mp3, flac |
Beispiel-Anforderung
curl -X POST https://api.tts.ai/v1/voice-convert/ \
-H "Authorization: Bearer sk-tts-your-key" \
-F "file=@source_audio.mp3" \
-F "target_voice=af_bella" \
-F "model=openvoice" \
-o converted.wav
Ansprechen
Gibt die konvertierte Audiodatei als binäre Daten zurück.
Sprachübersetzung
Übersetze gesprochenes Audio von einer Sprache zur anderen. Verbindet Sprach-zu-Text, Übersetzung und Text-zu-Sprechen in einem einzigen Aufruf.
Antragsstelle (multipart/form-data)
| Parameter | Art | Erforderlich | Warenbezeichnung |
|---|---|---|---|
| file | file | Nein | Quelle Audiodatei in der Originalsprache. Max 100MB. |
| target_language | string | Nein | Zielsprachcode (z. B. es , fr, de , ja) |
| voice | string | Nein | Stimme für übersetzte Ausgabe. Auto-selektiert, wenn weggelassen. |
| preserve_voice | boolean | Nein | Versuch, die Spracheigenschaften des ursprünglichen Lautsprechers zu bewahren. Standard: false |
Ansprechen
{
"original_text": "Hello, how are you?",
"translated_text": "Hola, como estas?",
"source_language": "en",
"target_language": "es",
"audio_url": "https://api.tts.ai/v1/results/translate_abc123.mp3",
"credits_used": 5
}
Rede zur Rede
Transformieren Sie Sprachstil, Emotion, oder Lieferung unter Beibehaltung des Inhalts. Nützlich für die Anpassung Ton, Tempo, und Ausdruckskraft.
Antragsstelle (multipart/form-data)
| Parameter | Art | Erforderlich | Warenbezeichnung |
|---|---|---|---|
| file | file | Nein | Quelle Sprach-Audio-Datei. Max 50MB. |
| voice | string | Nein | Target Voice ID für die Ausgabesprache |
| model | string | Nein | Modell: openvoice (Standard), chatterbox |
| emotion | string | Nein | Zielemotion: neutral , happy , sad , angry , excited |
| speed | float | Nein | Geschwindigkeitsanpassung. Standard: 1.0 . Bereich: 0.5 bis 2.0 |
Ansprechen
Gibt die transformierte Audiodatei als binäre Daten zurück.
Audio-Werkzeuge
Audioverarbeitungsendpunkte zur Verbesserung, Stimmentfernung, Stammspaltung und mehr.
Verbesserung der Audioqualität: Denoise, Verbesserung der Klarheit, super Auflösung.
| file file | Audio-Datei zu verbessern |
| denoise boolean | Denoisieren aktivieren (Standard: true) |
| enhance_clarity boolean | Verbesserung der Sprachklarheit (Standard: true) |
| super_resolution boolean | Hohe Audioqualität (Standard: false) |
| strength integer | 1-3 (leicht, mittel, stark). Voreinstellung: 2 |
Trennen Sie Vocals von Instrumentals (Gesangsentfernung) oder in Stängel aufgeteilt.
| file file | Audiodatei zum Trennen |
| model string | demucs (Voreinstellung) oder spleeter |
| stems integer | Anzahl der Stängel: 2, 4, 5 oder 6 (Standard: 2) |
| format string | Ausgabeformat: wav, mp3, flac |
Entfernen Sie Echo und Reverb von Audioaufnahmen.
| file file | Zu verarbeitende Audiodatei |
| type string | echo or reverb (default: both) |
| intensity integer | 1-5 (default: 3) |
Analysieren Sie Audio, um Schlüssel, BPM und Zeitsignatur zu erkennen.
| file file | Audiodatei zur Analyse |
{
"key": "C",
"scale": "Major",
"bpm": 120.0,
"time_signature": "4/4",
"camelot": "8B",
"compatible_keys": ["C Major", "G Major", "F Major", "A Minor"]
}
Konvertieren Sie Audio zwischen Formaten.
| file file | Audiodatei zum Konvertieren |
| format string | Zielformat: mp3, wav, flac, ogg, m4a, aac |
| bitrate integer | Ausgangsbitrate in kbps: 64, 128, 192, 256, 320 |
| sample_rate integer | Stichprobenrate: 22050, 44100, 48000 |
| channels string | mono oder stereo |
Sprach-Chat
Senden Sie Audio oder Text und erhalten Sie eine KI-Reaktion mit synthetisierter Sprache.
Antragsstelle (multipart/form-data oder JSON)
| Parameter | Art | Erforderlich | Warenbezeichnung |
|---|---|---|---|
| audio | file | Nein* | Audioeingabe (entweder Audio oder Text erforderlich) |
| text | string | Nein* | Texteingabe (entweder audio oder text erforderlich) |
| voice | string | Nein | Stimme für KI-Antwort. Standard: af_bella |
| tts_model | string | Nein | TTS-Modell für Antwort. Standard: kokoro |
| system_prompt | string | Nein | Benutzerdefinierte Systemaufforderung für die KI |
| conversation_id | string | Nein | Ein bestehendes Gespräch fortsetzen |
Ansprechen
{
"conversation_id": "conv_abc123",
"user_text": "What is the capital of France?",
"ai_text": "The capital of France is Paris.",
"audio_url": "https://api.tts.ai/v1/audio/tmp/resp_xyz.mp3",
"credits_used": 3
}
Batch TTS
Senden Sie mehrere Texte für die parallele TTS-Generierung. Optional erhalten Sie einen Webhook-Callback, wenn alle Aufträge abgeschlossen sind.
Parameter
| Parameter | Art | Warenbezeichnung |
|---|---|---|
| texts | array | Array of objects: {text, model, voice}. Max 50 items. |
| webhook_url | string | Optionale URL zu POST-Ergebnissen, wenn Batch abgeschlossen wird. |
Ansprechen
{
"batch_id": "abc123",
"total": 3,
"completed": 0,
"status": "processing"
}
Umfragefortschritt mit GET /v1/tts/batch/result/?batch_id=abc123
Einbetten der Stimme
Vorkomprimieren Sie eine Spracheinbettung aus Referenz-Audio. Verwenden Sie die zurückgegebene embed_id in anschließenden Sprach-Klonanfragen für nahezu instant Generierung.
Parameter
| Parameter | Art | Warenbezeichnung |
|---|---|---|
| file | file | Reference audio file (WAV, MP3, FLAC). |
| model | string | Cloning model (default: chatterbox). Supported: chatterbox, cosyvoice2, openvoice, gpt-sovits, spark, indextts2, qwen3-tts. |
Ansprechen
{
"embed_id": "emb_abc123",
"model": "chatterbox",
"duration_ms": 450
}
Gesundheitscheck
Überprüfen Sie den GPU-Serverstatus, geladene Modelle und Warteschlangengröße. Keine Authentifizierung erforderlich.
Ansprechen
{
"status": "online",
"latency_ms": 45,
"queue_size": 3,
"models_loaded": ["kokoro", "chatterbox", "cosyvoice2"]
}
Listenmodelle
Gibt eine Liste aller verfügbaren Modelle mit ihren Fähigkeiten zurück.
Ansprechen
{
"models": [
{
"id": "kokoro",
"name": "Kokoro",
"type": "tts",
"tier": "standard",
"languages": ["en", "ja", "ko", "zh", "fr"],
"supports_cloning": false,
"supports_streaming": true,
"credits_per_1k_chars": 2
},
{
"id": "chatterbox",
"name": "Chatterbox",
"type": "tts",
"tier": "premium",
"languages": ["en"],
"supports_cloning": true,
"supports_streaming": true,
"credits_per_1k_chars": 4
}
]
}
Stimmen auflisten
Gibt eine Liste aller verfügbaren Stimmen zurück, wahlweise gefiltert nach Modell oder Sprache.
Abfrageparameter
| Parameter | Art | Warenbezeichnung |
|---|---|---|
| model | string | Filter nach Modell-ID (z. B. kokoro ) |
| language | string | Nach Sprachcode filtern (z.B. de ) |
| gender | string | Filter nach Geschlecht: männlich , weiblich , neutral |
Ansprechen
{
"voices": [
{
"id": "af_bella",
"name": "Bella",
"model": "kokoro",
"language": "en",
"gender": "female",
"preview_url": "https://api.tts.ai/v1/voices/preview/af_bella.mp3"
}
],
"total": 142
}
Untertitel (SRT / VTT) neu
Generieren Sie synchronisierte Untertitel für jeden abgeschlossenen TTS-Auftrag. Läuft Whisper-Ausrichtung über das Audio und gibt SRT oder WebVTT zurück. Ergebnis wird auf der Festplatte zwischengespeichert, so dass ein zweiter Aufruf für dasselbe uuid ein Laufwerk ist, das gelesen wird.
Abfrageparameter
| Parameter | Erforderlich | Warenbezeichnung |
|---|---|---|
| uuid | Nein | Job UUID wird von /v1/tts/ oder /v1/voice-clone/ zurückgegeben. |
| format | Nein | srt (Standard) oder vtt . |
| download | Nein | 1 zum Senden von Content-Disposition: Anhang , also speichert der Browser statt Displays. |
| language | Nein | Hinweis zum Ausrichtungsmodell (automatisch erkannt, falls weggelassen). |
curl "https://api.tts.ai/v1/speech/subtitles/?uuid=$UUID&format=srt&download=1" -o subtitles.srt
Aussprache Wörterbuch neu
Sagen Sie der TTS-Engine, wie Sie bestimmte Wörter aussprechen. Gespeicherte Einträge automatisch auf jede TTS-Anfrage anwenden, die Sie machen. 200-Eintrag pro Kontolimit.
Antragsstelle (POST)
| Parameter | Art | Warenbezeichnung |
|---|---|---|
| word | string | Wort, das überschrieben werden soll (z.B. GIF , Anthropic ). |
| replacement | string | Wie buchstabiert man es für das Modell (z.B. jiff , ann THROP ick ). |
| language | string | Optionaler ISO-Code. Leer = gilt für alle Sprachen. |
| case_sensitive | boolean | Standard false . Passen Sie den Fall genau an, wenn true . |
# Save an entry
curl -X POST https://tts.ai/api/v1/pronunciations/ \
-H "Authorization: Bearer sk-tts-..." \
-H "Content-Type: application/json" \
-d '{"word": "GIF", "replacement": "jiff"}'
# List your entries
curl https://tts.ai/api/v1/pronunciations/ -H "Authorization: Bearer sk-tts-..."
# Delete entry by id
curl -X DELETE "https://tts.ai/api/v1/pronunciations/?id=42" -H "Authorization: Bearer sk-tts-..."
Sie können auch pro-Request-Überschreibungen übergeben, ohne sie zu speichern — enthalten pronunciations auf jedem /v1/tts/Aufruf entweder als Objekt oder als Array (siehe die TTS-Endpunktparams).
Artikel Erzähler neu
Lassen Sie einen einzelnen Tag auf jeder Artikelseite fallen und Besucher erhalten eine feste Leseleiste, die die Seite beim Klick erzählt. Erkennt den Artikelkörper automatisch, unterstützt benutzerdefinierte Stimme / Modell / Position / Akzentfarbe.
<script src="https://tts.ai/narrator.js"
data-pk="pk-tts-your-publishable-key"
data-voice="af_bella"
data-model="kokoro"
data-extract="auto"
data-position="bottom"
data-color="#e60000"
data-locale="en"></script>
Einstellungen
| Parameter | Warenbezeichnung |
|---|---|
data-pk | Veröffentlichen von Schlüsseln (pk-tts-...). Domänenbeschränkungen werden über das allowed_domains Feld des Schlüssels durchgesetzt. |
data-voice | Sprach-ID. Standard af_bella . |
data-model | TTS-Modell-ID. Default kokoro . |
data-extract | auto (default) — versucht Artikel/main/.post-content/.entry-content-Selektoren, fällt auf dichtesten Absatz-Cluster zurück. Oder übergeben Sie einen CSS-Selektor, um ein bestimmtes Element anzuvisieren. |
data-position | bottom (Standard) oder top . |
data-color | Accent-Farbe (jede CSS-Farbe). Standard #e60000 . |
data-min-chars / data-max-chars | Überspringen Sie die Leiste, wenn der Artikel kürzer ist als Min-Chars (Standard 200). |
Schaltflächen-Widget anhören
Inline-Button-Style-Einbettung. Renders neben seinem -Tag und spielt einen Button-getriggerten kurzen Schnipsel. Andere Form als der Artikel Erzähler oben (der automatisch eine Seitenspalte injiziert und den ganzen Artikel erzählt).
<script src="https://tts.ai/widget.js"
data-voice="af_bella"
data-model="kokoro"
data-style="full"
data-theme="light"></script>
Gespeicherte Stimmen (persistente Klonen)
Hochladen eines Referenz-Audios einmal, erhalten Sie wieder eine persistente voice_id, dann Referenz, die in TTS-Anfragen id anstelle von wieder-uploading Audio jeden Anruf. Ideal für High-Volume-Integrationen.
Eine Stimme hochladen
POST
https://tts.ai/api/v1/user-voices/
Auth erforderlich
Mehrteiliges Formular. Felder: Datei (erforderlich, 5-30s Audio), Name (erforderlich), Sprache (optional, default en), Modell (optional — auto-picks cosyvoice2 für zh/ja/ko other openvoice), consent_confirmiert (erforderlich, beliebiger Wahrheitswert).
curl -X POST https://tts.ai/api/v1/user-voices/ \
-H "Authorization: Bearer sk-tts-your-key" \
-F "file=@reference.wav" \
-F "name=My Narrator" \
-F "language=en" \
-F "consent_confirmed=true"
# Response:
{
"public_id": "uv_a1b2c3d4e5f6",
"id": 42,
"name": "My Narrator",
"model_name": "openvoice",
"language": "en",
"reference_audio_url": "https://tts.ai/media/user-voices/....wav",
"storage_status": "active",
"created_at": "2026-04-17T03:45:00+00:00"
}
Verwenden Sie die gespeicherte Stimme in TTS
POST auf /api/v1/tts/ (NOTE: web VPS host, not api.tts.ai) mit user_voice_id. Wir laden Ihre gespeicherte Audio- und Route zur Klon-Pipeline.
curl -X POST https://tts.ai/api/v1/tts/ \
-H "Authorization: Bearer sk-tts-your-key" \
-H "Content-Type: application/json" \
-d '{"text":"Hello from my saved voice","user_voice_id":"uv_a1b2c3d4e5f6"}'
# Returns a queued job — poll /v1/speech/results/?uuid=... for the audio URL.
Liste/Löschen
GET https://tts.ai/api/v1/user-voices/ # list your saved voices + quota info
DELETE https://tts.ai/api/v1/user-voices/?public_id=uv_a1b2c3d4e5f6
Archiv / reaktivieren (frei)
Archivierte Stimmen bleiben in Ihrem Konto, können aber nicht in TTS verwendet werden. Nützlich für ruhende Endbenutzer, so dass Ihre Liste sauber bleibt.
POST https://tts.ai/api/v1/user-voices/uv_a1b2c3d4e5f6/archive/
POST https://tts.ai/api/v1/user-voices/uv_a1b2c3d4e5f6/reactivate/
Code-Beispiele
Text in die Rede
import requests
API_KEY = "sk-tts-your-key"
# Text to Speech
response = requests.post(
"https://api.tts.ai/v1/tts/",
headers={"Authorization": f"Bearer {API_KEY}"},
json={
"model": "kokoro",
"text": "Hello from TTS.ai!",
"voice": "af_bella",
"format": "mp3"
}
)
with open("output.mp3", "wb") as f:
f.write(response.content)
print(f"Credits used: {response.headers.get('X-Credits-Used')}")
Rede zum Text
# Speech to Text
with open("recording.mp3", "rb") as f:
response = requests.post(
"https://api.tts.ai/v1/stt/",
headers={"Authorization": f"Bearer {API_KEY}"},
files={"file": f},
data={"model": "faster-whisper", "timestamps": "true"}
)
result = response.json()
print(result["text"])
Stimme Klonen
# Voice Cloning
with open("reference.wav", "rb") as ref:
response = requests.post(
"https://api.tts.ai/v1/tts/clone/",
headers={"Authorization": f"Bearer {API_KEY}"},
files={"reference_audio": ref},
data={
"text": "This speech uses a cloned voice.",
"model": "chatterbox"
}
)
with open("cloned_output.mp3", "wb") as f:
f.write(response.content)
Text in die Rede
const API_KEY = 'sk-tts-your-key';
// Text to Speech
const response = await fetch('https://api.tts.ai/v1/tts/', {
method: 'POST',
headers: {
'Authorization': `Bearer ${API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: 'kokoro',
text: 'Hello from TTS.ai!',
voice: 'af_bella',
format: 'mp3'
})
});
const audioBlob = await response.blob();
const audioUrl = URL.createObjectURL(audioBlob);
const audio = new Audio(audioUrl);
audio.play();
Rede zum Text
// Speech to Text
const formData = new FormData();
formData.append('file', audioFile);
formData.append('model', 'faster-whisper');
const response = await fetch('https://api.tts.ai/v1/stt/', {
method: 'POST',
headers: { 'Authorization': `Bearer ${API_KEY}` },
body: formData
});
const result = await response.json();
console.log(result.text);
Text in die Rede
# Text to Speech
curl -X POST https://api.tts.ai/v1/tts/ \
-H "Authorization: Bearer sk-tts-your-key" \
-H "Content-Type: application/json" \
-d '{"model":"kokoro","text":"Hello!","voice":"af_bella","format":"mp3"}' \
-o output.mp3
Rede zum Text
# Speech to Text
curl -X POST https://api.tts.ai/v1/stt/ \
-H "Authorization: Bearer sk-tts-your-key" \
-F "file=@recording.mp3" \
-F "model=faster-whisper" \
-F "timestamps=true"
Stimme Klonen
# Voice Cloning
curl -X POST https://api.tts.ai/v1/tts/clone/ \
-H "Authorization: Bearer sk-tts-your-key" \
-F "reference_audio=@reference.wav" \
-F "text=This uses a cloned voice." \
-F "model=chatterbox" \
-o cloned.mp3
Audio-Verbesserung
# Audio Enhancement
curl -X POST https://api.tts.ai/v1/audio/enhance/ \
-H "Authorization: Bearer sk-tts-your-key" \
-F "file=@noisy_audio.mp3" \
-F "denoise=true" \
-F "enhance_clarity=true" \
-o enhanced.mp3
Fehlercodes
Alle Fehler liefern eine JSON-Antwort mit einem error field.
{
"error": {
"code": "insufficient_credits",
"message": "You do not have enough characters for this request.",
"characters_required": 4000,
"characters_available": 2000
}
}
| HTTP-Status | Fehlercode | Warenbezeichnung |
|---|---|---|
| 400 | bad_request |
Ungültige Request-Parameter. Überprüfen Sie die Fehlermeldung für Details. |
| 401 | unauthorized |
Fehlender oder ungültiger API-Schlüssel. |
| 402 | insufficient_credits |
Nicht genug Zeichen. Kaufen Sie mehr bei /pricing/. |
| 403 | forbidden |
Sie haben keine Berechtigung, auf diese Ressource zuzugreifen (z.B. Umfragen des Jobs eines anderen Benutzers). API-Zugriff selbst ist in jedem Plan enthalten. |
| 404 | not_found |
Modell oder Stimme nicht gefunden. |
| 413 | file_too_large |
Die hochgeladene Datei übersteigt die Größe. |
| 429 | rate_limited |
Zu viele Anfragen. Kontrollieren Sie die Geschwindigkeitsbegrenzungs-Header. |
| 500 | internal_error |
Serverfehler. Versuchen Sie es später noch einmal. |
| 503 | model_loading |
Das Modell wird geladen und in wenigen Sekunden erneut getestet. |
Webhooks
Für langlaufende Aufgaben (Stammspaltung, Batch TTS) können Sie einen Parameter webhook_url angeben. Wenn die Aufgabe abgeschlossen ist, werden wir das Ergebnis auf Ihre URL POST setzen.
{
"event": "task.completed",
"task_id": "task_abc123",
"status": "success",
"result_url": "https://api.tts.ai/v1/results/task_abc123",
"credits_used": 12,
"created_at": "2025-01-15T10:30:00Z",
"completed_at": "2025-01-15T10:30:45Z"
}
Bereit zum Bauen?
Holen Sie sich Ihren API-Schlüssel und integrieren Sie TTS.ai in Ihre Anwendungen.