Documentación API

Integre TTS.ai en sus aplicaciones con nuestra API REST. Formato compatible con OpenAI para una fácil migración.

API REST Compatible con OpenAI Respuestas de JSON Apoyo a la transmisión

Sinopsis

La API de TTS.ai ofrece acceso programático a todas las características de la plataforma: síntesis de texto a voz, transcripción de voz a texto, clonación de voz, mejora de audio y más. La API utiliza convenciones estándar REST con órganos de petición/respuesta de JSON.

Clave API

Obtener la clave de la API de Configuración de la cuenta. Disponible en los planes Pro y Enterprise.

URL de la base

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

Auth

Token portador a través de Authorization encabezado

Autenticación

Nivel libre — no se requiere clave. Mensajes anónimos a /v1/tts/ trabajar sin ninguna autenticación, hasta 5.000 caracteres/día por IP, utilizando cualquiera de nuestros modelos gratuitos (piper, vits, melotts, kokoro). Regístrese para obtener una cuenta gratuita para obtener 15.000 caracteres de bonificación y acceso a modelos premium.

Para modelos premium y límites de tarifa más altos, autentifique con un token de portador en el Authorization encabezado.

Encabezado HTTP
Authorization: Bearer sk-tts-your-api-key-here
Mantenga su clave de API en secreto. No lo comparta en código del lado del cliente, repositorios públicos o registros. Gire las teclas regularmente desde la configuración de su cuenta.

SDKs

Los SDK oficiales facilitan la integración de TTS.ai en su aplicación. Ambos son de código abierto y están disponibles en 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 la base

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

Todos los puntos finales son relativos a esta URL base. Por ejemplo, el punto final TTS es:

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

Límites de las tasas

Los límites de velocidad API varían según el plan:

Plan Solicitudes/min Concurrentes Longitud máxima del texto
Libre 10 2 500 caracteres
Iniciador 30 3 1.000.000 de caracteres
Pro 60 5 1.000.000 de caracteres
Empresa 300 20 50.000 caracteres

Las cabeceras de límite de velocidad están incluidas en cada respuesta: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.

Costes de crédito

Servicio Costo Unidad
TTS (Modelos gratuitos: Piper, VITS, MeloTTS) 1.000 caracteres por 1.000 caracteres
TTS (Modelos estándar: Kokoro, CosyVoice 2, etc.) 2.000 caracteres por 1.000 caracteres
TTS (Modelos premium: Tortuga, Chatterbox, etc.) 4.000 caracteres por 1.000 caracteres
Discurso al texto 2.000 caracteres por minuto de audio
Clonación de voz 4.000 caracteres por 1.000 caracteres
Cambiador de voz 3.000 caracteres por minuto de audio
Mejora de audio 2.000 caracteres por minuto de audio
Eliminación de voz / división de tallo 3.000 a 4.000 caracteres por minuto de audio
Traducción del discurso 5.000 caracteres por minuto de audio
Charla de voz 3.000 caracteres por turno
Buscador de claves & BPM Libre --
Convertidor de audio Libre --

Texto a hablar

POST /v1/tts/

Convertir texto a audio de voz. Devuelve el archivo de audio en el formato solicitado.

Organo de solicitud

ParámetroTipoRequeridoDescripción
model string No Modelo ID (por ejemplo, kokoro, chatterbox, piper). Si se omite, seleccionamos automáticamente un modelo que admita el modelo solicitado languagekokoro para en/ja/zh/ko/fr/de/it/pt/es/hi/ru, piper para otros idiomas soportados (ar/pl/nl/cs/da/fi/el/hu/tr/uk/vi/etc.).
text string Texto para convertir a voz. Por petición de límite: 500 caracteres (anónimo), 5.000 (cuenta gratuita), 1.000.000 (plan de pago). Las entradas largas son automáticas del lado del servidor.
voice string ID de voz (utilizar /v1/voices/ para enumerar las voces disponibles)
format string No Formato de salida: mp3 (por defecto), wav, flac, ogg
speed float No Multiplicador de velocidad de voz. Predeterminado: 1.0. Rango: 0.5 a 2.0
language string No Código de idioma (por ejemplo, en, es). Autodetectado si se omite.
instructions string No Actuación / señales de entrega (≤500 caracteres), p. ej.
pronunciations object | array No O bien
stream boolean No Activar respuesta de transmisión. Predeterminado: false

Ejemplo de solicitud

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

Etiquetas SSML

Envuelve números, fechas, moneda, números de teléfono y acrónimos en

interpretar-comoEntradaSe habla como
cardinal1234one thousand two hundred thirty-four
ordinal21twenty-first
date1999-12-3131 de diciembre, diecinueve noventa y nueve
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

Formato de fecha predeterminado para mdy para Inglés y dmy en otro lugar; anular con format=\

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

Respuesta

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.

Ejemplo completo

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.

Discurso al texto

POST /v1/stt/

Transcribe audio al texto. Soporta 99 idiomas con autodetección.

Organo de solicitud (multipart/form-data)

ParámetroTipoRequeridoDescripción
file file Archivo de audio (MP3, WAV, FLAC, OGG, M4A, MP4, WebM). Max 100MB.
model string No Modelo STT: whisper (predeterminado), faster-whisper, sensevoice
language string No Código de idioma. auto para la autodetección (predeterminado).
timestamps boolean No Incluir marcas de tiempo a nivel de palabra. Predeterminado: false
diarize boolean No Activar diarización del altavoz. Predeterminado: false

Respuesta

Respuesta 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"
    }
  ]
}

Clonación de voz

POST /v1/tts/clone/

Generar voz en una voz clonada. Subir un audio de referencia y texto.

Organo de solicitud (multipart/form-data)

ParámetroTipoRequeridoDescripción
reference_audio file Audio de voz de referencia (10-30 segundos recomendado). Max 20MB.
text string Texto para hablar en la voz clonada.
model string No Modelo clon: chatterbox (por defecto), cosyvoice2, gpt-sovits
format string No Formato de salida: mp3 (por defecto), wav, flac
language string No Código de idioma de destino. Debe ser apoyado por el modelo elegido.

Respuesta

Devuelve el archivo de audio como datos binarios, al igual que el endpoint TTS.

Cambiador de voz

POST /v1/voice-convert/

Convertir audio a sonido como una voz diferente. Subir audio fuente y elegir una voz de destino.

Organo de solicitud (multipart/form-data)

ParámetroTipoRequeridoDescripción
file file Archivo de audio fuente (MP3, WAV, FLAC). Max 50MB.
target_voice string Id. de voz de destino para convertir a (usar /v1/voices/ para listar las voces disponibles)
model string No Modelo de conversión de voz: openvoice (por defecto), knn-vc
format string No Formato de salida: wav (por defecto), mp3, flac

Ejemplo de solicitud

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

Respuesta

Devuelve el archivo de audio convertido como datos binarios.

Traducción del discurso

POST /v1/speech-translate/

Translate audio hablado de un idioma a otro. Combina voz a texto, traducción y texto a voz en una sola llamada.

Organo de solicitud (multipart/form-data)

ParámetroTipoRequeridoDescripción
file file Archivo de audio fuente en el idioma original. Max 100MB.
target_language string Código del idioma de destino (por ejemplo, es, fr, de, ja)
voice string No Voz para la salida traducida. Auto-seleccionada si se omite.
preserve_voice boolean No Intente preservar las características de voz del altavoz original. Predeterminado: false

Respuesta

Respuesta 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
}

Discurso a discurso

POST /v1/speech-to-speech/

Transformar el estilo de habla, la emoción o la entrega manteniendo el contenido. Útil para ajustar el tono, el ritmo y la expresividad.

Organo de solicitud (multipart/form-data)

ParámetroTipoRequeridoDescripción
file file Archivo de audio de habla fuente. Max 50MB.
voice string Id. de voz de destino para el discurso de salida
model string No Modelo: openvoice (predeterminado), chatterbox
emotion string No Emoción de destino: neutral, happy, sad, angry, excitado
speed float No Ajuste de velocidad. Predeterminado: 1.0. Rango: 0.5 a 2.0

Respuesta

Devuelve el archivo de audio transformado como datos binarios.

Herramientas de audio

Endpoints de procesamiento de audio para mejora, eliminación vocal, división de vástago y más.

POST /v1/audio/enhance/

Mejorar la calidad de audio: denoise, mejorar la claridad, super resolución.

file fileArchivo de audio para mejorar
denoise booleanHabilitar la denominación (por defecto: true)
enhance_clarity booleanMejorar la claridad del habla (por defecto: true)
super_resolution booleanCalidad de audio de alta calidad (por defecto: false)
strength integer1-3 (luz, medio, fuerte). Predeterminado: 2
POST /v1/audio/separate/

Separar las voces de los instrumentales (eliminación vocal) o dividirlas en tallos.

file fileArchivo de audio a separar
model stringdemucs (predeterminado) o spleeter
stems integerNúmero de tallos: 2, 4, 5 o 6 (por defecto: 2)
format stringFormato de salida: wav, mp3, flac
POST /v1/audio/dereverb/

Eliminar el eco y la reverberación de las grabaciones de audio.

file fileArchivo de audio a procesar
type stringecho or reverb (default: both)
intensity integer1-5 (default: 3)
POST /v1/audio/analyze/ Libre

Analice el audio para detectar la clave, BPM y la firma del tiempo.

file fileArchivo de audio para analizar
Respuesta
{
  "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/ Libre

Convertir audio entre formatos.

file fileArchivo de audio a convertir
format stringFormato de destino: mp3, wav, flac, ogg, m4a, aac
bitrate integerTasa de bits de salida en kbps: 64, 128, 192, 256, 320
sample_rate integerTasa de muestreo: 22050, 44100, 48000
channels stringmono o stereo

Charla de voz

POST /v1/voice-chat/

Enviar audio o texto y recibir una respuesta de IA con voz sintetizada.

Organo de solicitud (multipart/form-data o JSON)

ParámetroTipoRequeridoDescripción
audio file No* Entrada de audio (se requiere audio o text)
text string No* Entrada de texto (se requiere audio o text)
voice string No Voz para la respuesta de IA. Predeterminado: af_bella
tts_model string No Modelo TTS para respuesta. Predeterminado: kokoro
system_prompt string No Indicador de sistema personalizado para la IA
conversation_id string No Continuar una conversación existente

Respuesta

Respuesta 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
}

Lote TTS

POST /v1/tts/batch/

Envíe varios textos para la generación TTS paralela. Opcionalmente, reciba una devolución de llamada cuando todos los trabajos se completen.

Parámetros

ParámetroTipoDescripción
textsarrayArray of objects: {text, model, voice}. Max 50 items.
webhook_urlstringURL opcional a los resultados POST cuando se completa el lote.

Respuesta

Respuesta de JSON
{
  "batch_id": "abc123",
  "total": 3,
  "completed": 0,
  "status": "processing"
}

Progreso de la encuesta con GET /v1/tts/batch/result/?batch_id=abc123

Incorporación de voz

POST /v1/voice-embed/

Pre-computar una voz incrustada de audio de referencia. Utilice el incrustado_id devuelto en posteriores solicitudes de clonación de voz para la generación casi instantánea.

Parámetros

ParámetroTipoDescripción
filefileReference audio file (WAV, MP3, FLAC).
modelstringCloning model (default: chatterbox). Supported: chatterbox, cosyvoice2, openvoice, gpt-sovits, spark, indextts2, qwen3-tts.

Respuesta

Respuesta de JSON
{
  "embed_id": "emb_abc123",
  "model": "chatterbox",
  "duration_ms": 450
}

Chequeo de salud

GET /v1/health/

Compruebe el estado del servidor GPU, los modelos cargados y el tamaño de la cola. No se requiere autenticación. En cacheado durante 30 segundos.

Respuesta

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

Modelos de lista

GET /v1/models/

Devuelve una lista de todos los modelos disponibles con sus capacidades.

Respuesta

Respuesta 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
    }
  ]
}

Voces de la lista

GET /v1/voices/

Devuelve una lista de todas las voces disponibles, filtradas opcionalmente por modelo o idioma.

Parámetros de consulta

ParámetroTipoDescripción
model string Filtrar por ID del modelo (por ejemplo, kokoro)
language string Filtrar por código de idioma (por ejemplo, en)
gender string Filtrar por sexo: male, mujer, neutral

Respuesta

Respuesta 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
}

Subtítulos (SRT / VTT) nuevo

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

Generar subtítulos sincronizados para cualquier trabajo TTS completado. Ejecuta la alineación de Whisper sobre el audio y devuelve SRT o WebVTT. Resultado se cachea en el disco por lo que una segunda llamada para el mismo uuid es una lectura de disco.

Parámetros de consulta

ParámetroRequeridoDescripción
uuidTrabajo UUID devuelto por /v1/tts/ o /v1/voice-clone/.
formatNosrt (predeterminado) o vtt.
downloadNo1 para enviar Content-Disposition: adjunto para que el navegador guarde en lugar de mostrar.
languageNoConsejo al modelo de alineación (detectado automáticamente si se omite).
cURL
curl "https://api.tts.ai/v1/speech/subtitles/?uuid=$UUID&format=srt&download=1" -o subtitles.srt

Diccionario de pronunciación nuevo

GET POST DELETE /api/v1/pronunciations/

Dígale al motor TTS cómo pronunciar palabras específicas. Las entradas guardadas se aplican automáticamente a cada solicitud TTS que haga. Límite de 200 entradas por cuenta.

Organo de solicitud (POST)

ParámetroTipoDescripción
wordstringPalabra a anular (por ejemplo, GIF, Anthropic).
replacementstringCómo deletrearlo para el modelo (por ejemplo, jiff, ann THROP ick).
languagestringCódigo ISO opcional. Vacío = se aplica a todos los idiomas.
case_sensitivebooleanPor defecto false. Coincide exactamente cuando 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-..."

También puede pasar las anulaciones por solicitud sin guardarlas — incluir pronunciaciones en cualquier /v1/tts/ llamada como un objeto o un array (consulte los parámetros del punto final de TTS).

Artículo Narrador nuevo

Suelta una sola etiqueta /code> en cualquier página del artículo y los visitantes obtendrán una barra de lectura fija que narra la página al hacer clic. Autodetecta el cuerpo del artículo, soporta voz personalizada / modelo / posición / color de acento.

HTML
<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>

Opciones

ParámetroDescripción
data-pkClave publicable (pk-tts-...). Restricciones de dominio impuestas a través del campo allowed_domains de la clave.
data-voiceID de voz. Por defecto af_bella.
data-modelID del modelo TTS. Por defecto kokoro.
data-extractauto (predeterminado) — intenta los selectores de artículo/main/.post-content/.entry-content, vuelve al cluster de párrafos más denso. O pasa cualquier selector CSS para apuntar un elemento específico.
data-positionbottom (por defecto) o top.
data-colorColor de acento (cualquier color CSS). Predeterminado .
data-min-chars / data-max-charsOmitir la barra si el artículo es más corto que min-chars (por defecto 200). Entrada de tapa en max-chars (por defecto 50.000).

Fuente en GitHub:

Escuchar el Widget de botones

Incrustaciones de estilo botón en línea. Renders junto a su etiqueta y reproduce un fragmento corto activado por botón. Forma diferente del Narrador de artículos de arriba (que auto-inyecta una barra de navegación de páginas y narra todo el artículo).

HTML
<script src="https://tts.ai/widget.js"
    data-voice="af_bella"
    data-model="kokoro"
    data-style="full"
    data-theme="light"></script>

Voces salvadas (clones persistentes)

Cargar un audio de referencia una vez, recuperar una voz persistente_id, a continuación, hacer referencia a ese id en las solicitudes TTS en lugar de volver a cargar audio cada llamada. Ideal para integraciones de alto volumen.

Precios: El almacenamiento es gratuito (sin alquiler diario, sin tope de ranura). Cargo de carga: 500 caracteres una sola vez por voz. recargo por uso: +50 caracteres añadidos a cada generación TTS que hace referencia a la voz guardada, además del costo normal de generación. Archivo de voces que no necesita ahora para mantenerlos inactivos; reactivar en cualquier momento. Ambas son llamadas API gratuitas.

Subir una voz

POST https://tts.ai/api/v1/user-voices/ Auth requerido

Multipart form. Campos: archivo (requerido, audio de 5-30s), nombre (requerido), idioma (opcional, predeterminado en), modelo (opcional — auto-picks cosyvoice2 para zh/ja/ko other openvoice), consent_confirmated (requerido, cualquier valor de verdad).

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"
}

Utilice la voz guardada en TTS

POST to /api/v1/tts/ (NOTA: web VPS host, no api.tts.ai) con user_voice_id. Cargamos su audio almacenado y ruta a la tubería de clonación.

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.

Listar / suprimir

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

Archivo / reactivar (gratis)

Las voces archivadas permanecen en su cuenta, pero no se pueden usar en TTS. Útil para usuarios finales inactivos para que su lista permanezca limpia.

POST https://tts.ai/api/v1/user-voices/uv_a1b2c3d4e5f6/archive/
POST https://tts.ai/api/v1/user-voices/uv_a1b2c3d4e5f6/reactivate/

Ejemplos de código

Texto a hablar

Python - peticiones
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')}")

Discurso al texto

Python - peticiones
# 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"])

Clonación de voz

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

Texto a hablar

JavaScript - buscar
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();

Discurso al texto

JavaScript - buscar
// 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);

Texto a hablar

cURL
# 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

Discurso al texto

cURL
# 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"

Clonación de voz

cURL
# 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

Mejora de audio

cURL
# 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

Códigos de error

Todos los errores devuelven una respuesta JSON con una error campo.

Formato de respuesta de error
{
  "error": {
    "code": "insufficient_credits",
    "message": "You do not have enough characters for this request.",
    "characters_required": 4000,
    "characters_available": 2000
  }
}
Estado HTTPCódigo de errorDescripción
400 bad_request Parámetros de solicitud no válidos. Compruebe los detalles del mensaje de error.
401 unauthorized Clave de API perdida o inválida.
402 insufficient_credits No hay suficientes caracteres. Compra más en /pricing/.
403 forbidden Usted no tiene permiso para acceder a este recurso (por ejemplo, votar el trabajo de otro usuario). acceso API en sí mismo se incluye en cada plan.
404 not_found Modelo o voz no encontrada.
413 file_too_large El archivo cargado excede el límite de tamaño.
429 rate_limited Demasiadas peticiones. Compruebe las cabeceras de límite de tarifas.
500 internal_error Error del servidor. Inténtalo de nuevo más tarde.
503 model_loading El modelo está cargando, reinténtalo en unos segundos.

Ganchos web

Para tareas de larga duración (división del tallo, TTS por lotes), puede proporcionar un parámetro webhook_url. Cuando la tarea se complete, enviaremos el resultado a su URL.

Carga útil de Webhook
{
  "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"
}
Los resultados de Webhook están disponibles para su descarga durante 24 horas después de la finalización. Asegúrese de descargarlos rápidamente.

¿Listo para construir?

Obtenga su clave de API y comience a integrar TTS.ai en sus aplicaciones.