Offres et limites
Ce que couvre chaque palier.
Intégration
Les mêmes routes que celles utilisées par le site. Chaque réponse indique le moteur retenu, la raison du routage, et les limites applicables.
| Méthode | Route | Objet |
|---|---|---|
| <code>GET</code> | /api/languages/ | Langues réellement disponibles sur le moteur, et capacités du moteur actif. |
| <code>POST</code> | /api/translate/ | Traduire un texte. Renvoie le moteur utilisé, le routage et les avertissements. |
| <code>POST</code> | /api/detect-language/ | Détecter la langue d’un texte, avec les candidates et la confiance du détecteur. |
| <code>POST</code> | /api/transliterate/ | Translittérer vers l’alphabet latin, avec le schéma appliqué et ses limites. |
| <code>POST</code> | /api/compare/ | Comparer deux textes : segments divergents et contrôles factuels. |
| <code>POST</code> | /api/inspect-file/ | Analyser un fichier avant traduction : structure, volume, colonnes, pages. |
| <code>POST</code> | /api/translate-file/ | Traduire un fichier et renvoyer le rapport de contrôle de son invariant de format. |
| <code>POST</code> | /api/ocr-translate/ | Lire un document scanné ou une image, puis traduire le texte reconnu. |
| <code>POST</code> | /api/lead/ | Transmettre une demande de devis. |
| <code>POST</code> | /api/events/ | Émettre un événement d’usage, sans aucun contenu : propriétés filtrées par liste blanche. |
curl -X POST https://traduction-texte.fr/api/translate/ \
-H "Content-Type: application/json" \
-d '{
"text": "Le délai de livraison est de trois jours.",
"source": "auto",
"target": "en",
"contentKind": "text"
}' Réponse, structure abrégée :
{
"text": "...",
"source": { "code": "fr", "detected": true, "confidence": 0.98, "detector": "..." },
"target": "en",
"engine": { "id": "local", "label": "Argos Translate (API LibreTranslate)" },
"routing": {
"reasons": ["Moteur open source retenu : ..."],
"benchmarkScore": null,
"benchmarkedAt": null,
"mayPivot": false,
"appliedStyle": { "register": "neutre", "address": "auto", "fidelity": "naturelle" }
},
"stats": { "characters": 40, "words": 8, "segments": 1, "durationMs": 120 },
"warnings": ["Cette paire n’a pas encore été mesurée par notre benchmark interne : ..."]
}
Le champ warnings n’est pas décoratif : il porte les réserves réelles sur
le résultat, notamment le passage possible par une langue pivot et l’absence de mesure
de qualité sur la paire.
Toute erreur renvoie un objet { "error": { "code", "message", "hint" } }.
Le code est stable et destiné au traitement programmatique ; le message est destiné à
l’affichage.
| Code | HTTP | Signification |
|---|---|---|
| <code>invalid_input</code> | 400 | Paramètre manquant ou invalide. |
| <code>text_too_long</code> | 413 | Le texte dépasse la limite de l’offre. |
| <code>file_too_large</code> | 413 | Le fichier, le nombre de pages ou de lignes dépasse la limite. |
| <code>file_invalid</code> | 415 | Type de fichier refusé après contrôle du contenu, ou archive piégée. |
| <code>unsupported_pair</code> | 422 | Aucun modèle installé pour cette paire de langues. |
| <code>quota_exceeded</code> | 402 | Volume quotidien gratuit atteint. |
| <code>rate_limited</code> | 429 | Trop de requêtes sur la fenêtre courante. |
| <code>privacy_blocked</code> | 409 | Aucun moteur disponible ne satisfait le niveau de confidentialité demandé. |
| <code>engine_not_configured</code> | 503 | Aucun moteur, ou aucun service OCR, n’est configuré sur l’instance. |
| <code>engine_unavailable</code> | 503 | Moteur injoignable, ou disjoncteur ouvert. |
| <code>timeout</code> | 504 | Le traitement a dépassé le délai imparti. |
| <code>internal</code> | 500 | Erreur interne. Le message ne contient jamais votre texte. |
Mode confidentiel
Le champ privacy accepte la valeur confidential. Dans ce cas,
tout moteur dont le traitement n’est pas localisé dans l’Union européenne est écarté. Si
aucun moteur conforme n’est disponible, la requête échoue avec
privacy_blocked : elle n’est jamais exécutée sur un moteur non autorisé.
Les routes existent et sont celles qu’utilise le site lui-même. L’accès programmatique avec clé, quotas contractuels et engagement de disponibilité relève de l’offre Pro, qui n’est pas encore ouverte. Les limites appliquées aujourd’hui sont celles du palier gratuit.
En interrogeant /api/languages/. La réponse vient du moteur, et non d’une liste écrite à la main : si aucun moteur n’est configuré, la réponse le dit explicitement et la liste est vide.
Non, par conception. Les messages d’erreur sont rédigés sans reprendre le contenu soumis, et les journaux techniques ne reçoivent que le code, le contexte et le message d’exception.
Non. Toutes les routes répondent avec Cache-Control: no-store, private. Seules les listes de langues sont mises en cache en mémoire côté serveur, pour quelques minutes, car elles ne contiennent aucune donnée utilisateur.
Ce que couvre chaque palier.
La règle de routage détaillée.
Journaux et conservation.