Texto a voz con SSML
Este endpoint de texto a voz acepta el texto marcado con SSML que su flujo ya produce, y también texto plano.
Ejecútela online
Ejecute esto en nuestros servidores con su cuenta. Las herramientas gratuitas corren en su navegador; esta cobra de su saldo del KIT según el precio de arriba.
Lee las palabras habladas del marcado y las sintetiza en audio con voz natural, así que un flujo con SSML ya montado puede apuntar aquí sin quitar antes las etiquetas para dejar texto plano. Conviene ser claro con el límite desde el principio: este motor pronuncia las palabras, no los controles acústicos finos que el SSML puede describir.
Qué es SSML y por qué existe
Speech Synthesis Markup Language es un estándar del W3C creado para que quien escribe describa cómo debe decir algo el motor de voz, no solo qué decir: dónde pausar, qué sílaba acentuar, cómo pronunciar una sigla, si una cadena de dígitos es una fecha, un teléfono o una cantidad simple. Ha sido durante años la convención de la industria para controlar el habla sintetizada, precisamente porque el texto plano es genuinamente ambiguo: «2/3» puede ser una fecha, una fracción o un marcador, y solo el marcado lo resuelve en abstracto. Ese es el formato que este endpoint acepta en la entrada; qué hace con cada etiqueta se describe con claridad en la sección siguiente.
Cómo funcionan la solicitud y la respuesta
Envíe texto marcado con SSML (o texto plano) en el cuerpo de la solicitud. El servicio extrae las palabras habladas del marcado y las sintetiza; las etiquetas se reducen a su texto antes de sintetizar. La tarea se encola de forma asíncrona y devuelve un task_id de inmediato; el audio se entrega después por webhook firmado o por un enlace firmado válido por 24 horas. Como lo que se sintetiza son las palabras, enviar SSML y enviar el texto plano equivalente produce la misma narración natural: el marcado se acepta por compatibilidad, no porque cada etiqueta cambie el sonido.
Qué representa este motor y qué no
Este es el límite honesto, dicho para que nada en esta página lo prometa de más. El motor de voz actual lee el contenido de texto y produce un habla natural y bien acompasada. No aplica de forma acústica los controles finos del SSML: el énfasis, la pronunciación fonética, la prosodia y las duraciones exactas de pausa se aceptan en la entrada y luego se retiran, no se representan. Así, una etiqueta de pausa de dos segundos no detiene la locución dos segundos, y una etiqueta de énfasis no acentúa esa palabra más de lo que el modelo haría por su cuenta. Si su uso depende de que esos controles se representen con precisión, esa capacidad todavía no está disponible en este motor: este endpoint existe para que un flujo con SSML produzca audio hoy sin una rama aparte de texto plano.
Cómo encaja en contenido automatizado
El SSML no es más que texto estructurado, así que es fácil generarlo de forma programática: un flujo de contenido puede envolver números en etiquetas, insertar pausas entre secciones o marcar un nombre con una pista fonética, sin intervención humana. El valor de este endpoint para ese público es que acepta tal cual el SSML que ya emiten: no tienen que construir y mantener una segunda vía de código que reduzca su marcado a texto plano antes de enviarlo. El precio refleja la naturaleza ligera y acotada de la tarea: una base pequeña por solicitud más una tarifa por cada 1000 caracteres del texto enviado, y las tareas fallidas nunca se cobran tras los reintentos automáticos.
Acceso y manejo de resultados
Este endpoint requiere saldo prepago, igual que todos los demás de la API; una solicitud sin saldo devuelve HTTP 402 en vez de un resultado parcial o degradado. El texto enviado y el audio generado se eliminan al finalizar el período de retención y nunca se usan para entrenar modelos; la entrega es estrictamente por su webhook o por un enlace firmado temporal, y nada se conserva más allá de esa ventana.
Qué puede hacer con ella
Reemplazo directo para un flujo con SSML
Apunte a este endpoint un flujo que ya emite SSML y reciba audio hablado sin escribir su propio paso para quitar antes las etiquetas y dejar texto plano.
Narración a partir de guiones generados
Convierta guiones generados de forma algorítmica en audio hablado con voz natural, como un paso automatizado más de un flujo de contenido.
Texto largo a audio
Convierta artículos, notas o documentación en audio para quienes prefieren escuchar el contenido antes que leerlo.
Salida de voz multilingüe
Produzca audio hablado en los idiomas admitidos desde la misma forma de solicitud, según el campo de idioma.
Preguntas frecuentes
¿Qué es SSML y cómo lo usa esta api de texto a voz?
SSML es un estándar de marcado para describir la síntesis de voz. Este endpoint acepta texto marcado con SSML, lee de él las palabras habladas y las sintetiza en audio natural. Acepta el formato por compatibilidad; vea la siguiente respuesta para saber qué controles de SSML se representan de verdad.
¿Representa las etiquetas de énfasis, fonema y prosodia?
No, no en el motor de voz actual. Esas etiquetas, junto con las duraciones exactas de pausa, se aceptan en la entrada y luego se reducen a su texto; el audio pronuncia las palabras con naturalidad en vez de aplicar el énfasis, la pronunciación o las pausas marcadas. La representación acústica precisa de esos controles todavía no está disponible.
¿Es gratuita esta api de texto a voz?
No hay capa gratuita: las capas gratis se abusan y ralentizan a todos. El acceso funciona con un saldo prepago de ForHosting KIT: se recarga desde $10.00 (no caduca) y cada solicitud se cobra a su precio publicado, así que una llamada sin saldo devuelve HTTP 402. Sin suscripción, sin tokens ni créditos inventados, y una tarea fallida no se cobra.
¿Cuánto cuesta?
Cuesta $0.002 por solicitud más $0.0025 por cada 1000 caracteres del texto enviado.
¿Necesito SSML para un texto a voz básico?
No. Si solo necesita audio con voz natural a partir de texto plano, el endpoint estándar de texto a voz es más simple y produce el mismo tipo de narración. Tanto el texto plano como el SSML salen aquí como habla natural.
¿Cómo recibo el audio generado?
La tarea es asíncrona y devuelve un task_id de inmediato; el audio final se entrega por webhook firmado o por un enlace firmado válido por 24 horas.
¿Qué pasa si mi marcado SSML es inválido?
Como el marcado se reduce a su texto hablado antes de sintetizar, las etiquetas mal formadas no hacen fallar la solicitud: igual recibe audio de las palabras legibles. Nada se rechaza por una etiqueta mal puesta, así que no confíe en este endpoint para validar su SSML.
¿Puedo controlar con él la pronunciación de nombres o siglas?
De forma acústica no: el control por fonema no se representa en este motor, así que una etiqueta de fonema no forzará una pronunciación concreta. Si un nombre debe decirse de cierta manera, escríbalo fonéticamente en el propio texto para que las palabras lleven la pronunciación.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/voice/tts-ssml \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"ssml":"<speak>Hola <break time=\"500ms\"/> mundo.</speak>"}'const res = await fetch("https://api.kit.forhosting.com/voice/tts-ssml", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"ssml": "<speak>Hola <break time=\"500ms\"/> mundo.</speak>"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/voice/tts-ssml",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"ssml": "<speak>Hola <break time=\"500ms\"/> mundo.</speak>"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/voice/tts-ssml", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"ssml":"<speak>Hola <break time=\\"500ms\\"/> mundo.</speak>"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"ssml":"<speak>Hola <break time=\"500ms\"/> mundo.</speak>"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/voice/tts-ssml", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"ssml": "<speak>Hola <break time=\"500ms\"/> mundo.</speak>"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "voice.tts_ssml",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_mb | 200 |
max_minutes | 180 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |