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

The TTS.ai API provides programmatic access to all platform features: text-to-speech synthesis, speech-to-text transcription, voice cloning, audio enhancement, and more. The API uses standard REST conventions with JSON request/response bodies.

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

Todas las solicitudes de API requieren autenticación a través de 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.

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 Concurrent Longitud máxima del texto
Pro 60 5 5.000 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 crédito por 1.000 caracteres
TTS (Modelos estándar: Kokoro, CosyVoice 2, etc.) 2 créditos por 1.000 caracteres
TTS (Modelos premium: Tortuga, Chatterbox, etc.) 4 créditos por 1.000 caracteres
Discurso al texto 2 créditos por minuto de audio
Clonación de voz 4 créditos por 1.000 caracteres
Cambiador de voz 3 créditos por minuto de audio
Mejora de audio 2 créditos por minuto de audio
Eliminación de voz / división de tallo 3 a 4 créditos por minuto de audio
Traducción del discurso 5 créditos por minuto de audio
Charla de voz 3 créditos 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 Modelo ID (por ejemplo, kokoro, chatterbox, piper)
text string Texto para convertir a voz (máximo 5.000 caracteres para Pro, 50.000 para Enterprise)
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.
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

Respuesta

Returns the audio file as binary data with appropriate Content-Type header (audio/mpeg, audio/wav, etc.).

Encabezados de la respuesta
Content-Type: audio/mpeg
Content-Length: 48256
X-Credits-Used: 2
X-Credits-Remaining: 498

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 Intento de preservar el altavoz original

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
}

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
}

Ejemplos de código

Texto a hablar

Python - requests
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 - requests
# 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 - requests
# 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 - fetch
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 - fetch
// 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 credits for this request.",
    "credits_required": 4,
    "credits_available": 2
  }
}
Estado HTTPError CodeDescripció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 créditos. Compra más a /precio/.
403 forbidden El acceso API no está disponible en su 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.