Intégration

API de traduction

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.

Routes

10 routes exposées par le service
MéthodeRouteObjet
<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.

Exemple : traduire un texte

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.

Codes d’erreur

Toute erreur renvoie un objet { "error": { "code", "message", "hint" } }. Le code est stable et destiné au traitement programmatique ; le message est destiné à l’affichage.

Codes d’erreur, statut HTTP et signification
CodeHTTPSignification
<code>invalid_input</code>400Paramètre manquant ou invalide.
<code>text_too_long</code>413Le texte dépasse la limite de l’offre.
<code>file_too_large</code>413Le fichier, le nombre de pages ou de lignes dépasse la limite.
<code>file_invalid</code>415Type de fichier refusé après contrôle du contenu, ou archive piégée.
<code>unsupported_pair</code>422Aucun modèle installé pour cette paire de langues.
<code>quota_exceeded</code>402Volume quotidien gratuit atteint.
<code>rate_limited</code>429Trop de requêtes sur la fenêtre courante.
<code>privacy_blocked</code>409Aucun moteur disponible ne satisfait le niveau de confidentialité demandé.
<code>engine_not_configured</code>503Aucun moteur, ou aucun service OCR, n’est configuré sur l’instance.
<code>engine_unavailable</code>503Moteur injoignable, ou disjoncteur ouvert.
<code>timeout</code>504Le traitement a dépassé le délai imparti.
<code>internal</code>500Erreur 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é.

Questions fréquentes

L’API est-elle ouverte au public ?

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.

Comment savoir quelles langues sont disponibles ?

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.

Les réponses d’erreur peuvent-elles contenir mon texte ?

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.

Les réponses sont-elles mises en cache ?

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.