Dos rutas.
Una respuesta cada una.
Envía texto y recibe un archivo WAV. Envía audio y recibe el texto en kreyòl. Cada llamada responde directamente, sin tareas que consultar.
Necesitas una clave de API
Crea una clave en tu panel, en Claves de API, y envíala con cada solicitud: Authorization: Bearer lb_…. Una clave se muestra una sola vez; puedes tener hasta 10 y revocar cualquiera en todo momento. Mantenla en secreto: llama a la API desde tu servidor, nunca desde una página web. Cada dirección sigue limitada además a 90 solicitudes de texto y 30 transcripciones cada diez minutos.
Para asistentes de IA y generadores de código
La misma documentación en archivos simples que un asistente de IA lee de una vez: dale el primer enlace y podrá escribir para ti código que funciona.
- https://www.lambbi.xyz/llms-full.txt · toda la API en Markdown, con ejemplos
- https://www.lambbi.xyz/openapi.json · esquema OpenAPI 3.1, para herramientas y generadores de SDK
- https://www.lambbi.xyz/llms.txt · un índice corto (llms.txt)
Precios
1 crédito por minuto de audio.
1 crédito = 1 minuto de audio = 2 HTG, cobrado por segundo: texto a voz cuenta los segundos de audio que produce; voz a texto, los segundos que escucha (como máximo 120 por solicitud). Los 5 minutos gratis de cada cuenta al mes (hora de Haití) se usan primero; se comparten con tus asistentes y el Studio. Una solicitud que falla no se cobra. Añade crédito con MonCash o con tarjeta en tu panel.
Lo que costó cada solicitud
X-Charged-Seconds header
Segundos de audio cobrados: producidos (texto a voz) o escuchados (voz a texto).
X-Credits-Used header
Créditos que tomó esta solicitud; 0 mientras quepa en tus minutos gratis.
X-Credits-Left header
Créditos que quedan en tu cuenta.
X-Free-Seconds-Left header
Segundos gratis que quedan en tu cuenta este mes.
Las dos rutas envían estas cabeceras. Voz a texto también devuelve las mismas cifras en su JSON, como charged.
Texto a voz
POST /api/tts
Lee un fragmento de kreyòl con Fatiman y responde con audio/wav, 24 kHz, 16 bits, mono. Las cabeceras indican la duración del audio (X-Audio-Seconds), cuánto tardó en generarse (X-Made-Ms) y los ajustes usados (X-Settings).
text string, obligatorio
Hasta 1.200 caracteres. Números, fechas, horas, precios, porcentajes, teléfonos y direcciones web se deletrean como se dicen.
voice string
Una de female1, female2, female3, female4, female5, female6, man1, man2, man3, nouvo1, nouvo2, nouvo3, nouvo4. Por defecto female1. nouvo1 a nouvo4 son Gason 4 a 7: voces nuevas creadas a partir de las voces de hombre de Fatiman, que no pertenecen a ninguna persona real.
continues boolean
El texto continúa una frase cortada en una coma, para que la voz no la lea como una frase nueva. Por defecto false.
model string
v1 (por defecto), v2 (entrenado solo con voces humanas reales) o v3, el más reciente y el más natural en nuestras pruebas. La cabecera X-Model dice cuál leyó el texto.
temperature number
Número, de 0,1 a 1. Qué tan libre lee la voz: más bajo, más pareja. Por defecto 0,7 para v1 y v2, 0,3 para v3.
lsd_steps integer
Entero, de 1 a 8. Pasos por sonido; más es más lento. Por defecto 1.
eos_threshold number
Número, de −6 a 2. Cuándo la voz decide que el texto terminó: más bajo termina antes y puede cortar la última palabra, más alto espera más. Por defecto −4.
cfg number
Número, de 1 a 3. Por encima de 1 la voz sigue el texto más de cerca, en cerca del doble de tiempo. Por defecto 1.
pause_ms integer
Entero, 0 o de 100 a 2000. Los silencios más largos se reducen a esta duración; 0 conserva todas las pausas. Por defecto 300.
Un valor fuera de rango se lleva al límite más cercano.
Voces
| id | Nombre | Género | Carácter |
|---|---|---|---|
female1 | Fanm 1 | Mujer | Clara, pareja |
female2 | Fanm 2 | Mujer | Animada |
female3 | Fanm 3 | Mujer | Suave |
female4 | Fanm 4 | Mujer | Grave, muy serena |
female5 | Fanm 5 | Mujer | Clara, luminosa |
female6 | Fanm 6 | Mujer | Tranquila |
man1 | Gason 1 | Hombre | Brillante |
man2 | Gason 2 | Hombre | Grave |
man3 | Gason 3 | Hombre | Cálida, serena |
nouvo1 | Gason 4 | Hombre | Grave, tranquilavoz nueva |
nouvo2 | Gason 5 | Hombre | Clara, naturalvoz nueva |
nouvo3 | Gason 6 | Hombre | Ligeravoz nueva |
nouvo4 | Gason 7 | Hombre | Firmevoz nueva |
Modelos: v1 (por defecto), v2 y v3. Cada uno lee con su propia temperatura por defecto: 0.7 para v1 y v2, 0.3 para v3.
Cabeceras de la respuesta
X-Audio-Seconds header
Duración del audio, en segundos.
X-Made-Ms header
Cuánto tardó la voz en generarlo, en milisegundos.
X-Model header
El modelo que lo leyó: v1, v2 o v3.
X-Settings header
Los ajustes de lectura realmente usados, en JSON, después de llevar los valores fuera de rango al límite más cercano.
curl -X POST https://www.lambbi.xyz/api/tts \
-H "Authorization: Bearer $LAMBBI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"text": "Bonjou! Ki jan ou ye jodi a?", "voice": "female1", "model": "v3"}' \
-o bonjou.wavTexto largo. Envía un texto largo por partes, empezando por una corta, y reproduce cada parte en cuanto llegue. La voz se genera unas dos veces más rápido de lo que suena, así que se oyen las primeras palabras en un segundo y medio, sin pausas después. El Studio funciona exactamente así.
Voz a texto
POST /api/asr
Escribe el kreyòl de un archivo de audio con Oswald-ASR-0.6-V3. Envía el archivo como cuerpo de la solicitud con su Content-Type, o en un campo de formulario multipart llamado file. Sirven WAV, MP3, M4A, OGG y WebM, hasta 25 MB; se transcriben los dos primeros minutos.
Solicitud
body / file archivo de audio, obligatorio
El audio como cuerpo crudo con su Content-Type (audio/wav, audio/mpeg, audio/mp4, audio/ogg, audio/webm…), o una subida multipart con el archivo en un campo llamado file. Como máximo 25 MB; se transcriben los dos primeros minutos.
?punctuate 0 | 1
0 devuelve el texto exactamente como se oyó, un segundo antes más o menos. Por defecto se añaden la puntuación y las mayúsculas sin cambiar ninguna palabra.
?correct 0 | 1
1 corrige también las palabras que Oswald oyó mal, la ortografía y las palabras repetidas. Una corrección que reescribe más del 40% de las palabras no se usa.
?translate en | fr | es
Traduce también la transcripción al inglés, francés o español.
Respuesta (JSON)
text string
Lo que se dijo, con ortografía kreyòl, con la puntuación y las mayúsculas que añade Lambbi AI (DeepSeek); las palabras son siempre exactamente las de Oswald. Vacío si no se oyó nada.
heard string
Lo que escribió Oswald, sin puntuación. Igual a text cuando la puntuación está desactivada o no se añadió.
punctuated boolean
Si se añadió la puntuación (no con ?punctuate=0).
corrected boolean
Si text se corrigió automáticamente (con ?correct=1); heard conserva lo que escribió Oswald.
translation string | null
Con ?translate=en, fr o es: text traducido al inglés, francés o español por Lambbi AI (DeepSeek). null si la traducción falló; ausente sin translate.
translatedTo string
El idioma de translation, cuando se pidió una traducción.
seconds number
Cuánto audio se escuchó.
ms number
Cuánto tardó en el servidor, con la puntuación, la corrección y la traducción incluidas.
maxSeconds number
El máximo de audio transcrito por solicitud, en segundos (120).
charged object
Lo que costó la solicitud: los seconds cobrados y los credits usados, y luego creditsLeft y freeSecondsLeft en tu cuenta.
# the file as the body, with its type
curl -X POST "https://www.lambbi.xyz/api/asr?correct=1&translate=en" \
-H "Authorization: Bearer $LAMBBI_API_KEY" \
-H "Content-Type: audio/mp4" \
--data-binary @recording.m4a
# or as a form upload
curl -X POST "https://www.lambbi.xyz/api/asr" \
-H "Authorization: Bearer $LAMBBI_API_KEY" \
-F file=@recording.m4a{
"text": "Doktè, ou ka esplike m ankò diferans ant timè benin ak timè malfezan?",
"heard": "doktè ou ka esplike m ankò diferans ant timè benin ak timè malfezan",
"punctuated": true,
"corrected": true,
"translation": "Doctor, can you explain to me again the difference between a benign tumor and a malignant tumor?",
"translatedTo": "en",
"seconds": 5.2,
"ms": 3371,
"maxSeconds": 120,
"charged": {
"seconds": 5.2,
"credits": 0,
"creditsLeft": 25,
"freeSecondsLeft": 287
}
}Errores y tiempos
400 / 405 / 413 tu solicitud
El cuerpo o un parámetro no es lo que espera la ruta, el método no era POST, o el texto o el archivo era demasiado largo. El cuerpo es JSON, {"error": "…"}, y dice cuál.
401 sin clave
No hay clave de API ("code": "no_key"), o la clave no es válida o fue revocada ("code": "bad_key"). Envía Authorization: Bearer lb_… con una clave de tu panel.
402 sin crédito
Tus minutos gratis y tu crédito se agotaron ("code": "no_credit"). Añade crédito en tu panel. Solicitudes enviadas al mismo tiempo pueden dejar tu crédito un poco por debajo de cero; la siguiente recibe entonces 402.
429 demasiadas
Espera los segundos que indica Retry-After.
502 / 504 nuestro lado
El servicio de voz falló o tardó demasiado. La primera llamada tras unos cinco minutos sin actividad arranca una máquina y carga los modelos, lo que puede tardar hasta 30 segundos: usa un tiempo de espera de al menos 60 segundos y reintenta una vez.