Documentation de l'API

Intégrez TTS.ai dans vos applications avec notre API REST. Format compatible OpenAI pour faciliter la migration.

API REST Compatible OpenAI Réponses de JSON Appui à la diffusion de l'information

Aperçu général

L'API TTS.ai offre un accès programmatique à toutes les fonctionnalités de la plate-forme : synthèse texte-à-discours, transcription parole-à-texte, clonage vocal, amélioration audio, etc. L'API utilise des conventions REST standard avec les organismes de demande/réponse JSON.

Clé de l'API

Obtenez votre clé API à partir de Paramètres du compte. Disponible sur les plans Pro et Enterprise.

URL de base

https://api.tts.ai/v1/

Resp.: Ministère de l'Economie et de l'Economie

Jeton porteur via Authorization en-tête

Authentification

Niveau libre — aucune clé n'est requise. Les POST anonymes à /v1/tts/ travailler sans auth, jusqu'à 5 000 caractères par jour par IP, en utilisant l'un de nos modèles gratuits (piper, vits, melotts, kokoro). Inscrivez-vous à un compte gratuit pour obtenir 15 000 caractères bonus et l'accès aux modèles premium.

Pour les modèles haut de gamme et les limites de taux plus élevées, authentifier avec un jeton au porteur dans le Authorization en-tête.

En-tête HTTP
Authorization: Bearer sk-tts-your-api-key-here
Gardez votre clé API secrète. Ne le partagez pas dans le code client, les dépôts publics ou les journaux. Faites pivoter les clés régulièrement à partir des paramètres de votre compte.

SDKs

Les SDK officiels facilitent l'intégration de TTS.ai dans votre application. Les deux sont open source et disponibles sur GitHub.

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")
GitHub

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');
GitHub

URL de base

URL de base: https://api.tts.ai/v1/

Tous les paramètres sont relatifs à cette URL de base. Par exemple, le paramètre TTS est :

POST https://api.tts.ai/v1/tts/

Limites de taux

Les limites de taux de l'API varient selon le plan :

Plan Demandes/min Concurrent Longueur maximale du texte
Gratuit 10 2 500 chars
Démarreur 30 3 1 000 000 d'ombles
Pour 60 5 1 000 000 d'ombles
Entreprise 300 20 50 000 chars

Les en-têtes limites de taux sont inclus dans chaque réponse: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.

Coûts de crédit

Agents des services généraux Coût Unité
TTS (Modèles libres: Piper, VITS, MeloTTS) 1 000 caractères pour 1 000 caractères
TTS (Modèles standard: Kokoro, CosyVoice 2, etc.) 2 000 caractères pour 1 000 caractères
TTS (Modèles premium: Tortoise, Chatterbox, etc.) 4 000 caractères pour 1 000 caractères
Discours au texte 2 000 caractères par minute d'audio
Clonage de la voix 4 000 caractères pour 1 000 caractères
Changement de voix 3000 caractères par minute d'audio
Amélioration de l'audio 2 000 caractères par minute d'audio
Suppression vocale / fractionnement de la tige 3 000 à 4 000 caractères par minute d'audio
Traduction des discours 5 000 caractères par minute d'audio
Clavardage vocal 3000 caractères par tour
Recherche de clé & BPM Gratuit --
Convertisseur audio Gratuit --

Texte au discours

POST /v1/tts/

Convertissez le texte en audio vocal. Retourne le fichier audio dans le format demandé.

Organe de demande

ParamètreTypeRequisDésignation des marchandises
model string Numéro Modèle ID (p. ex., kokoro, chatterbox, piper). Si nous avons omis, nous avons automatiquement pick-up un modèle qui supporte la langue demandéekokokoro pour en/ja/zh/ko/fr/de/it/pt/es/hi/ru, piper pour d'autres langues supportées (ar/pl/nl/cs/da/fi/el/hu/tr/uk/vi/etc.).
text string Oui Texte à convertir en parole. Cap par demande : 500 caractères (anonyme), 5 000 caractères (compte libre), 1 000 000 (plan payant).
voice string Oui ID vocal (utiliser /v1/voix/ pour lister les voix disponibles)
format string Numéro Format de sortie: mp3 (par défaut), wav, flac, ogg
speed float Numéro Valeur par défaut : 1.0. Plage : 0.5 à 2.0
language string Numéro Code de langue (p. ex. fr, es). Détecté automatiquement si omis.
instructions string Numéro Points d'exécution/de livraison (=500 caractères). p.ex. \
pronunciations object | array Numéro La prononciation par demande prime, soit
stream boolean Numéro Activer la réponse en streaming. Par défaut : false

Exemple de demande

cURL
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

Balises SSML

Numéros, dates, monnaie, numéros de téléphone et acronymes dans

interpréter commeEntréetel qu'il a été dit
cardinal1234one thousand two hundred thirty-four
ordinal21twenty-first
date1999-12-31Trente et unième décembre, dix-neuf-vingt-dix-neuf
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

Par défaut, le format de la date est mdy pour l'anglais et dmy ailleurs; remplacer format=\

Exemple
{
  "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."
}

Réponse

The TTS endpoint queues your request and returns a JSON response with a job UUID. You then poll for the result.

Step 1: Submit request

Response (JSON)
{
  "uuid": "77b71db532874ce98e84a69a2d740d4c",
  "job_id": "f21316bb-aefa-480d-8523-701d1e3184ce",
  "status": "queued",
  "credits_used": 11,
  "credits_remaining": 15000
}

Step 2: Poll for result

GET /v1/speech/results/?uuid=<job_uuid>

Poll this endpoint every 1-2 seconds until status is completed or failed.

Polling response (completed)
{
  "status": "completed",
  "result_url": "https://api.tts.ai/static/downloads/77b71db5.../output.mp3"
}
Polling response (still processing)
{
  "status": "processing"
}

Step 3: Download audio

Fetch the result_url from the completed response to download the audio file.

Exemple complet

Python
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)

Streaming alternative: For supported models (Kokoro, MeloTTS), use POST /v1/tts/stream/ for real-time Server-Sent Events (SSE) streaming — no polling needed.

Discours au texte

POST /v1/stt/

Traçez l'audio au texte. Prend en charge 99 langues avec détection automatique.

Organe de demande (multipart/form-data)

ParamètreTypeRequisDésignation des marchandises
file file Oui Fichier audio (MP3, WAV, FLAC, OGG, M4A, MP4, WebM). Max 100 Mo.
model string Numéro Modèle STT : whisper (par défaut), faster-whisper, sensevoice
language string Numéro Code de langue. auto pour la détection automatique (par défaut).
timestamps boolean Numéro Inclure les timestamps de niveau word. Par défaut : false
diarize boolean Numéro Activer la diarisation des haut-parleurs. Par défaut : false

Réponse

Réponse de JSON
{
  "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"
    }
  ]
}

Clonage de la voix

POST /v1/tts/clone/

Générer la parole dans une voix clonée. Télécharger un audio de référence et du texte.

Organe de demande (multipart/form-data)

ParamètreTypeRequisDésignation des marchandises
reference_audio file Oui Audio vocal de référence (10-30 secondes recommandées). Max 20 Mo.
text string Oui Texte pour parler dans la voix clonée.
model string Numéro Modèle cloné : chatterbox (par défaut), cosyvoice2, gpt-sovits
format string Numéro Format de sortie: mp3 (par défaut), wav, flac
language string Numéro Code de langue cible. Doit être supporté par le modèle choisi.

Réponse

Renvoie le fichier audio sous forme de données binaires, comme le paramètre TTS.

Changement de voix

POST /v1/voice-convert/

Convertissez l'audio en son comme une voix différente. Chargez l'audio source et choisissez une voix cible.

Organe de demande (multipart/form-data)

ParamètreTypeRequisDésignation des marchandises
file file Oui Fichier audio source (MP3, WAV, FLAC). Max 50MB.
target_voice string Oui Cibler l'ID vocal à convertir en (utiliser /v1/voix/ pour lister les voix disponibles)
model string Numéro Modèle de conversion vocale : openvoice (par défaut), knn-vc
format string Numéro Format de sortie: wav (par défaut), mp3, flac

Exemple de demande

cURL
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

Réponse

Renvoie le fichier audio converti en données binaires.

Traduction des discours

POST /v1/speech-translate/

Traduire l'audio parlé d'une langue à l'autre. Combine la parole en texte, la traduction et la parole en un seul appel.

Organe de demande (multipart/form-data)

ParamètreTypeRequisDésignation des marchandises
file file Oui Source fichier audio dans la langue originale. Max 100MB.
target_language string Oui Code de langue cible (p. ex. es, fr, de, ja)
voice string Numéro Voix pour la sortie traduite. Sélection automatique si omis.
preserve_voice boolean Numéro Essayez de préserver les caractéristiques vocales de l'enceinte originale. Par défaut : false

Réponse

Réponse de JSON
{
  "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
}

Discours au discours

POST /v1/speech-to-speech/

Transformez le style de parole, l'émotion ou la livraison tout en gardant le contenu. Utile pour ajuster le ton, le rythme et l'expressivité.

Organe de demande (multipart/form-data)

ParamètreTypeRequisDésignation des marchandises
file file Oui Fichier audio source de la parole. Max 50MB.
voice string Oui ID vocal cible pour le discours de sortie
model string Numéro Modèle: openvoice (par défaut), chatterbox
emotion string Numéro émotion cible : neutre, happy, sad, angry, excité
speed float Numéro Réglage de la vitesse par défaut : 1.0. Plage : 0.5 à 2.0

Réponse

Renvoie le fichier audio transformé sous forme de données binaires.

Outils audio

Paramètres de traitement audio pour l'amélioration, l'élimination vocale, le fractionnement de la tige, et plus encore.

POST /v1/audio/enhance/

Améliorer la qualité audio: denoise, améliorer la clarté, la super résolution.

file fileFichier audio à améliorer
denoise booleanActiver la déshydratation (par défaut: true)
enhance_clarity booleanAméliorer la clarté de la parole (par défaut: true)
super_resolution booleanQualité audio haut de gamme (par défaut: false)
strength integer1-3 (léger, moyen, fort).
POST /v1/audio/separate/

Séparer les voix des instruments (suppression vocale) ou les diviser en tiges.

file fileFichier audio à séparer
model stringdemucs (par défaut) ou spleeter
stems integerNombre de tiges: 2, 4, 5 ou 6 (par défaut: 2)
format stringFormat de sortie: wav, mp3, flac
POST /v1/audio/dereverb/

Supprimer l'écho et la réverbération des enregistrements audio.

file fileFichier audio à traiter
type stringecho or reverb (default: both)
intensity integer1-5 (default: 3)
POST /v1/audio/analyze/ Gratuit

Analyser l'audio pour détecter la clé, le BPM et la signature temporelle.

file fileFichier audio à analyser
Réponse
{
  "key": "C",
  "scale": "Major",
  "bpm": 120.0,
  "time_signature": "4/4",
  "camelot": "8B",
  "compatible_keys": ["C Major", "G Major", "F Major", "A Minor"]
}
POST /v1/audio/convert/ Gratuit

Convertir l'audio entre les formats.

file fileFichier audio à convertir
format stringFormat cible : mp3, wav, flac, ogg, m4a, aac
bitrate integerDébit de sortie en kbps: 64, 128, 192, 256, 320
sample_rate integerTaux d'échantillonnage: 22050, 44100, 48000
channels stringmono ou stereo

Clavardage vocal

POST /v1/voice-chat/

Envoyez du son ou du texte et recevez une réponse AI avec un discours synthétisé.

Organe de demande (multipart/form-data ou JSON)

ParamètreTypeRequisDésignation des marchandises
audio file Numéro* Entrée audio (soit audio ou texte requis)
text string Numéro* Entrée du texte (soit audio ou text requise)
voice string Numéro Voix pour la réponse AI. Par défaut : af_bella
tts_model string Numéro Modèle TTS pour la réponse. Par défaut: kokoro
system_prompt string Numéro Indicatif de système personnalisé pour l'IA
conversation_id string Numéro Poursuivre une conversation existante

Réponse

Réponse de JSON
{
  "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
}

Lot TTS

POST /v1/tts/batch/

Soumettre plusieurs textes pour la génération parallèle TTS. En option, recevez un callback webhook lorsque tous les travaux sont terminés.

Paramètres

ParamètreTypeDésignation des marchandises
textsarrayArray of objects: {text, model, voice}. Max 50 items.
webhook_urlstringL'URL optionnelle du POST est obtenue lorsque le lot est terminé.

Réponse

Réponse de JSON
{
  "batch_id": "abc123",
  "total": 3,
  "completed": 0,
  "status": "processing"
}

Progrès du sondage avec GET /v1/tts/batch/result/?batch_id=abc123

Intégration de la voix

POST /v1/voice-embed/

Pré-calculez un ancrage vocal à partir de l'audio de référence. Utilisez l'intégration_id renvoyée dans les requêtes subséquentes de clonage vocal pour une génération quasi-instantanée.

Paramètres

ParamètreTypeDésignation des marchandises
filefileReference audio file (WAV, MP3, FLAC).
modelstringCloning model (default: chatterbox). Supported: chatterbox, cosyvoice2, openvoice, gpt-sovits, spark, indextts2, qwen3-tts.

Réponse

Réponse de JSON
{
  "embed_id": "emb_abc123",
  "model": "chatterbox",
  "duration_ms": 450
}

Vérification de la santé

GET /v1/health/

Vérifiez l'état du serveur GPU, les modèles chargés et la taille de la file d'attente. Aucune authentification requise. Caché pendant 30 secondes.

Réponse

Réponse de JSON
{
  "status": "online",
  "latency_ms": 45,
  "queue_size": 3,
  "models_loaded": ["kokoro", "chatterbox", "cosyvoice2"]
}

Liste des modèles

GET /v1/models/

Retourne une liste de tous les modèles disponibles avec leurs capacités.

Réponse

Réponse de JSON
{
  "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
    }
  ]
}

Liste des voix

GET /v1/voices/

Retourne une liste de toutes les voix disponibles, éventuellement filtrées par le modèle ou la langue.

Paramètres de requête

ParamètreTypeDésignation des marchandises
model string Filtrer par l'ID du modèle (p. ex. kokoro)
language string Filtrer par code de langue (p. ex. fr)
gender string Filtrer par sexe : male, female, neutre

Réponse

Réponse de JSON
{
  "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
}

Sous-titres (SRT/VTT) nouveaux

GET /v1/speech/subtitles/?uuid=<job_uuid>&format=srt|vtt&download=1

Générer des sous-titres synchronisés pour tout travail TTS terminé. Exécute l'alignement Whisper sur l'audio et retourne SRT ou WebVTT. Le résultat est mis en cache sur le disque de sorte qu'un deuxième appel pour le même uuid est une lecture de disque.

Paramètres de requête

ParamètreRequisDésignation des marchandises
uuidOuiJob UUID retourné par /v1/tts/ ou /v1/voix-clone/.
formatNumérosrt (par défaut) ou vtt.
downloadNuméro1 pour envoyer Disposition de contenu: pièce jointe afin que le navigateur enregistre plutôt que d'afficher.
languageNuméroAlignez-vous sur le modèle d'alignement (autodétecté si omis).
cURL
curl "https://api.tts.ai/v1/speech/subtitles/?uuid=$UUID&format=srt&download=1" -o subtitles.srt

Dictionnaire de prononciation nouveaux

GET POST DELETE /api/v1/pronunciations/

Dites au moteur TTS comment prononcer des mots spécifiques. Les entrées sauvegardées s'appliquent automatiquement à chaque demande TTS que vous faites. 200 entrées par compte limite.

Organe de demande (POST)

ParamètreTypeDésignation des marchandises
wordstringMot à remplacer (p. ex. GIF, Anthropic).
replacementstringComment l'épeler pour le modèle (p. ex. jiff, ann THROP ick).
languagestringCode ISO facultatif. Vide = s'applique à toutes les langues.
case_sensitivebooleanPar défaut false. Cas de correspondance exactement quand true.
cURL
# 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-..."

Vous pouvez également passer des commandes par demande sans les enregistrer — inclure prononciations sur n'importe quel appel /v1/tts/ en tant qu'objet ou tableau (voir les paramètres du paramètre TTS).

Article Narrateur nouveaux

Déposer une seule balise