Référence de l'API
Une petite API REST. Toutes les réponses sont en JSON, sauf /v1/speak qui renvoie de l'audio.
https://api.kaddu.zaleo.devAuthentification
Aucune clé n'est nécessaire pendant l'avant-première : les requêtes anonymes sont limitées par adresse IP. Pour un audio plus long et des limites plus hautes, créez une clé dans votre compte et envoyez-la en jeton bearer : Authorization: Bearer kd_live_…. Les clés ont des quotas journaliers remis à zéro à 00:00 UTC.
Limites
| Gratuit (sans clé) | Avec une clé | |
|---|---|---|
| Durée audio | 60 s | 600 s |
| Longueur du texte | 500 | 3000 |
| Requêtes | 30 par 10 min | 600 par 10 min |
| Taille d'envoi | 25 MB | |
POST/v1/transcribe
Transcrire un fichier audio. Envoyez du multipart/form-data.
Paramètres
| Champ | Type | Requis | Description |
|---|---|---|---|
| file | file | oui | Le fichier audio. N'importe quel format courant ; il est converti en 16 kHz mono. |
| language | string | non | Code ISO 639-3, par exemple wol. Par défaut : wol. |
Réponse
{
"text": "dafa am solo lool",
"language": "wol",
"duration": 3.42,
"model": "…",
"processing_ms": 612
}Exemples
curl -X POST https://api.kaddu.zaleo.dev/v1/transcribe \
-F "file=@salaam.wav" \
-F "language=wol"import requests
with open("salaam.wav", "rb") as f:
r = requests.post(
"https://api.kaddu.zaleo.dev/v1/transcribe",
files={"file": f},
data={"language": "wol"},
)
print(r.json()["text"])const form = new FormData();
form.append("file", audioBlob, "salaam.webm");
form.append("language", "wol");
const res = await fetch("https://api.kaddu.zaleo.dev/v1/transcribe", {
method: "POST",
body: form,
});
const { text } = await res.json();POST/v1/transcribe/stream
Même entrée que /v1/transcribe. Renvoie du JSON ligne par ligne : une ligne de début, une ligne par segment d'environ 12 s dès qu'il est transcrit, puis une ligne finale avec le texte complet. Pratique pour afficher le texte pendant le traitement d'un long extrait.
{"type": "start", "duration": 50.0, "segments": 5, "model": "facebook/mms-1b-all"}
{"type": "segment", "index": 0, "start": 0.0, "end": 10.47, "text": "…"}
…
{"type": "done", "text": "…", "processing_ms": 11800}POST/v1/speak
Synthétiser de la parole. Envoyez du JSON, recevez de l'audio/wav ou audio/mpeg.
Paramètres
| Champ | Type | Requis | Description |
|---|---|---|---|
| text | string | oui | Le texte à prononcer. |
| language | string | oui | Code ISO 639-3, par exemple wol. |
| format | string | non | wav (par défaut) ou mp3. |
Exemples
curl -X POST https://api.kaddu.zaleo.dev/v1/speak \
-H "Content-Type: application/json" \
-d '{"text": "Na nga def?", "language": "wol", "format": "mp3"}' \
-o na-nga-def.mp3import requests
r = requests.post(
"https://api.kaddu.zaleo.dev/v1/speak",
json={"text": "Na nga def?", "language": "wol"},
)
open("na-nga-def.wav", "wb").write(r.content)const res = await fetch("https://api.kaddu.zaleo.dev/v1/speak", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ text: "Na nga def?", language: "wol", format: "mp3" }),
});
const audio = new Audio(URL.createObjectURL(await res.blob()));
audio.play();POST/v1/translate
Traduire entre le wolof et le français. Envoyez du JSON, recevez du JSON.
Paramètres
| Champ | Type | Requis | Description |
|---|---|---|---|
| text | string | oui | Le texte à prononcer. |
| source | string | oui | wol ou fra. |
| target | string | oui | fra ou wol. |
Exemples
curl -X POST https://api.kaddu.zaleo.dev/v1/translate \
-H "Content-Type: application/json" \
-d '{"text": "Na nga def?", "source": "wol", "target": "fra"}'Réponse
{ "translation": "…", "source": "wol", "target": "fra", "model": "…", "processing_ms": 840 }GET/v1/languages
Lister les langues, leur statut et les tâches prises en charge.
{
"languages": [
{
"code": "wol",
"name": "Wolof",
"status": "supported",
"stt": { "model": "…", "wer": 0.0 },
"tts": { "model": "…" }
}
],
"limits": { "max_audio_seconds": 60, "max_text_chars": 500 }
}GET /v1/languages renvoie aussi speed : les secondes de calcul mesurées sur le serveur par seconde d'audio (transcription) et par caractère (synthèse, traduction), pour afficher vos propres estimations.
GET/health
Vérification de santé, avec les modèles chargés en mémoire.
{ "status": "ok", "loaded_models": ["stt:wol"] }Erreurs
Les erreurs utilisent les codes HTTP et un corps JSON avec un code stable et un message lisible. Les messages sont en anglais ou en français, selon votre en-tête Accept-Language ou ?locale=fr.
{
"error": {
"code": "audio_too_long",
"message": "L'audio dure 74.2 s ; la limite est de 60 s pour votre offre."
}
}Codes courants
- 400bad_audio · empty_audio · empty_text · bad_format · invalid_request
- 401invalid_key
- 404unsupported_language · unsupported_pair
- 413file_too_large · audio_too_long · text_too_long
- 429rate_limited
- 503busy
Envoyez Accept-Language: fr pour recevoir les messages d'erreur en français.