Texto a voz
POST /v1/audio/speech
Convierte texto en voz natural con un único endpoint compatible con OpenAI. Envía JSON y recibe bytes de audio de vuelta. Para cambiar de proveedor solo modificas model. Nada se escribe en disco: el audio se te devuelve directamente en streaming.
Ejemplo de solicitud
curl https://synthorai.io/v1/audio/speech \
-H "Authorization: Bearer $SYNTHORAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "tts-1",
"input": "Hello from Synthorai.",
"voice": "alloy"
}' \
--output speech.mp3 Python (OpenAI SDK)
from openai import OpenAI
client = OpenAI(
api_key="$SYNTHORAI_API_KEY",
base_url="https://synthorai.io/v1",
)
with client.audio.speech.with_streaming_response.create(
model="tts-1",
voice="alloy",
input="Hello from Synthorai.",
) as response:
response.stream_to_file("speech.mp3") Cuerpo de la solicitud
| Parámetro | Tipo | Descripción |
|---|---|---|
model* | string | ID del modelo. Uno de tts-1, tts-1-hd, seed-tts-2.0. |
input* | string | El texto que se va a sintetizar. Máximo 4096 caracteres. |
voice | string | Voz con la que se habla. Por defecto alloy. Consulta Voces más abajo. |
response_format | string | Contenedor de audio: mp3 (por defecto), opus, wav o pcm. |
speed | number | Velocidad del habla, 0.25–4.0. Por defecto 1.0. |
Modelos compatibles
¿Cuál debería usar?
| Necesitas | Modelos recomendados |
|---|---|
| El más barato, suficiente para la mayoría de las voces de producto | google-tts-standard |
| Contenido principalmente en chino, o si quieres muchas opciones de voz | qwen3-tts-instruct-flash seed-tts-2.0 |
| Voz de producto para el día a día, equilibrando calidad y costo | tts-1 google-tts-neural2 |
| Mayor expresividad: narración, dispositivos de compañía, voz de marca | tts-1-hd google-tts-chirp3-hd |
| Modelo | Precio | Ideal para |
|---|---|---|
google-tts-standard | $4 / 1M chars | Notificaciones y avisos de gran volumen donde manda el costo |
qwen3-tts-instruct-flash | $11.50 / 1M chars | Contenido en chino y multilingüe; el upstream informa del número de caracteres facturados |
tts-1 | $15 / 1M chars | Voz de producto general, avisos, notificaciones |
google-tts-neural2 | $16 / 1M chars | Voz cotidiana natural en muchos idiomas |
tts-1-hd | $30 / 1M chars | Narración, marketing, todo lo que los usuarios escuchan durante un rato |
seed-tts-2.0 | $30 / 1M chars | Contenido en chino y multilingüe; 180+ voces |
google-tts-chirp3-hd | $30 / 1M chars | Las voces más nuevas y expresivas de Google |
Tres modelos están en $30. Se diferencian en el carácter de la voz y la cobertura de idiomas, no en el precio. Pruébalos con tus propios textos antes de decidirte.
Cambiar de proveedor te cuesta una línea. Todos los modelos de aquí hablan la misma forma de solicitud y respuesta. Por debajo, los proveedores difieren muchísimo (distinta autenticación, distintos formatos de streaming, distinta nomenclatura de voces). El gateway absorbe todo eso, así que lo único que cambias es model.
# Same request, different provider — only the model name changes.
-d '{"model": "tts-1", "input": "...", "voice": "alloy"}'
-d '{"model": "seed-tts-2.0", "input": "...", "voice": "alloy"}' Voces
Los modelos de OpenAI aceptan las voces estándar: alloy, echo, fable, onyx, nova, shimmer.
Para seed-tts-2.0 funcionan los mismos seis nombres (se asignan a voces comparables), y también puedes pasar directamente un ID de voz nativo de BytePlus para tener control total, por ejemplo zh_female_cancan_uranus_bigtts. La lista completa de las 180+ voces nativas está en el catálogo de voces de BytePlus.
Para qwen3-tts-instruct-flash funcionan los mismos seis nombres, o pasa una voz nativa de Qwen como Cherry, Ethan, Nofish, Jada.
Las voces de Google están ligadas a su nivel de precio. Cada modelo de Google cubre un nivel, y el nivel forma parte del nombre de la voz. Si pasas un id de voz nativo como en-US-Neural2-C debes usar el modelo correspondiente, en ese ejemplo google-tts-neural2. Las voces de otro nivel se rechazan con un 502 en lugar de facturarse en silencio a la tarifa equivocada.
Formatos de audio
Usa response_format para elegir el contenedor. El valor por defecto es mp3: mp3, opus, wav, pcm.
No todos los proveedores admiten todos los contenedores; los valores no admitidos recurren a MP3 en lugar de fallar.
Facturación
Se factura por carácter de entrada al precio de lista oficial del proveedor, sin margen añadido. Un carácter = un carácter chino = una letra = un signo de puntuación = un espacio. Las solicitudes fallidas nunca se cobran.
El audio que recibes no se mide aparte; solo se factura el texto que envías.
Límites
- Máximo 4096 caracteres por solicitud. Una entrada más larga se rechaza antes de cobrar nada. Divídela en el cliente y concatena el audio.
- La velocidad del habla se controla con
speed(0.25–4.0, 1.0 por defecto). Los valores fuera del rango del proveedor se ajustan a los límites, no se rechazan.
Errores
| Respuesta | Descripción |
|---|---|
400 | La entrada está vacía o supera los 4096 caracteres. |
401 | Clave API ausente o no válida. |
402 | Cupo insuficiente para esta solicitud. |
502 | El modelo no está disponible en tu cuenta, o el proveedor upstream falló. No se cobra nada. |
503 | Ningún channel sirve este modelo en este momento. |