API de traduction d’image : envoyez une image, recevez une image traduite

L’API TranslateMyImage traduit le texte contenu dans une image et renvoie une nouvelle image, pas une liste de chaînes. Vous envoyez une image et une langue cible à un endpoint unique ; la réponse JSON contient l’URL de l’image traduite, générée pour conserver la mise en page d’origine. Cette page présente ce que fait l’API, des exemples de requêtes en curl, Python et Node.js, la gestion des erreurs, et les cas où construire votre propre pipeline OCR est plus pertinent. La référence complète se trouve dans la documentation de l’API.

En bref

  • Un seul endpoint : POST https://translatemyimage.com/api/translate avec un en-tête X-API-Key et un corps multipart contenant l’image et target_lang.
  • Une requête = une image dans une langue = un crédit, une fois la traduction terminée. Langues cibles : en, fr, es, de, it, pt, ja, ko, zh.
  • L’accès à l’API commence avec l’offre Pro (Pro, Premium ou Enterprise). Relisez les images générées avant de les publier.

Champs de la requête

Le corps est en multipart/form-data, ce que votre client HTTP gère pour vous.

ChampObligatoireValeurs acceptées
fileOuiUne image JPG, PNG ou WEBP, jusqu’à 10 Mo et 25 mégapixels
target_langOuien, fr, es, de, it, pt, ja, ko ou zh
source_langNonL’un des neuf codes ci-dessus ; omettez-le ou envoyez auto pour la détection automatique
qualityNonbasic (par défaut) ou ultra
business_typeNondefault, marketing, edition (le mode Manga / BD) ou technical documentation
custom_promptNonInstructions pour le modèle, jusqu’à 1 000 caractères (offre Pro et supérieures)

Réponse

Un appel réussi renvoie cette structure (exemple tiré de la documentation) :

{
  "success": true,
  "translation": {
    "id": "clxb1234567890",
    "originalUrl": "https://storage.com/original.jpg",
    "translatedUrl": "https://storage.com/translated.jpg",
    "sourceLang": "fr",
    "targetLang": "en",
    "status": "completed",
    "createdAt": "2026-09-21T15:27:39.000Z",
    "metadata": { "quality": "basic", "model": "muse-image" }
  }
}

sourceLang vaut null quand vous omettez source_lang ou envoyez auto. Les erreurs renvoient du JSON avec success: false, un message dans error et, une fois la clé acceptée, un code stable comme insufficient_credits.

Démarrage rapide

Créez une clé sur la page API Keys du tableau de bord. Elle n’est affichée qu’une seule fois : enregistrez-la tout de suite dans une variable d’environnement ou un gestionnaire de secrets.

curl

curl -X POST https://translatemyimage.com/api/translate \
  -H "X-API-Key: $TMI_API_KEY" \
  -F "[email protected]" \
  -F "target_lang=es" \
  -F "source_lang=auto" \
  -F "business_type=marketing"

Python (requests), avec de nouvelles tentatives quand le service d’images atteint sa limite de requêtes :

import os
import time

import requests

API_URL = "https://translatemyimage.com/api/translate"
API_KEY = os.environ["TMI_API_KEY"]


def translate_image(path, target_lang, business_type="default", max_attempts=5):
    for attempt in range(max_attempts):
        with open(path, "rb") as image:
            response = requests.post(
                API_URL,
                headers={"X-API-Key": API_KEY},
                files={"file": image},
                data={
                    "target_lang": target_lang,
                    "source_lang": "auto",
                    "business_type": business_type,
                },
                timeout=900,  # la génération peut prendre plusieurs minutes : prévoyez large
            )
        if response.status_code == 429:
            time.sleep(2 ** attempt)  # attente exponentielle, puis nouvelle tentative
            continue
        payload = response.json()
        if response.status_code != 200 or not payload.get("success"):
            raise RuntimeError(f"{response.status_code}: {payload.get('error')}")
        return payload["translation"]
    raise RuntimeError(f"Still rate limited after {max_attempts} attempts")


for lang in ["es", "fr", "de"]:
    result = translate_image("product-front.jpg", lang, "marketing")
    print(lang, result["translatedUrl"])

Node.js (version 18 ou ultérieure, en module ES, avec fetch et FormData intégrés) :

import { readFile } from "node:fs/promises";

const form = new FormData();
const image = new Blob([await readFile("product-front.jpg")], { type: "image/jpeg" });
form.append("file", image, "product-front.jpg");
form.append("target_lang", "ja");

const response = await fetch("https://translatemyimage.com/api/translate", {
  method: "POST",
  headers: { "X-API-Key": process.env.TMI_API_KEY },
  body: form,
});
const payload = await response.json();
if (!response.ok) throw new Error(`${response.status}: ${payload.error}`);
console.log(payload.translation.translatedUrl);

Un seul target_lang par requête : pour traduire une image dans cinq langues, envoyez cinq requêtes.

Gérer chaque code de statut

StatutSignification (d’après la documentation)Ce que votre code doit faire
200Traduction terminée ; un crédit est consomméTélécharger et stocker l’image traduite
400Entrée invalide, format non pris en charge ou fichier manquantNe pas réessayer. Valider le type, la taille (10 Mo), la résolution (25 mégapixels) et le code de langue avant l’envoi
401Clé API absente, invalide ou révoquéeNe pas réessayer. Vérifier la clé et la façon dont elle est chargée
403Le compte propriétaire de la clé n’a pas l’offre Pro ou une offre supérieure, requise pour l’accès à l’APINe pas réessayer. Vérifier l’offre du compte qui a créé la clé
429Le service d’images est limité (limite de requêtes atteinte)Réessayer plus tard avec une attente exponentielle
500Le traitement a échouéVérifier d’abord code : insufficient_credits signifie que le compte a besoin de crédits, et une nouvelle tentative n’y changera rien. Sinon, réessayer une ou deux fois, puis consigner le fichier pour un traitement manuel

La documentation décrit ces six statuts. L’endpoint peut aussi en renvoyer d’autres, par exemple 422 quand aucune image n’a pu être générée (code : generation_failed) ou 503 quand le service d’images est indisponible (service_unavailable) : basez donc votre logique sur code plutôt que sur le seul statut.

Le construire vous-même ou appeler une API image vers image ?

Au lieu d’une API image vers image, vous pouvez assembler un pipeline : un service d’OCR pour repérer le texte (Google Cloud Vision, par exemple, renvoie le texte extrait avec le cadre de délimitation de chaque mot, d’après sa documentation OCR), une API de traduction de texte, puis du code qui efface le texte d’origine et compose la traduction dans les mêmes cadres avec une police assortie.

OCR + traduction de texte + votre propre renduAPI TranslateMyImage
Ce que vous obtenezDes chaînes de texte avec leurs coordonnées, puis ce que vous en faites au renduL’URL d’une image traduite finie
ContrôleTotal : polices, glossaires imposés, calques modifiablesMode (business_type) et custom_prompt
Effort de développementPlusieurs services, plus du code de rendu à construire et à maintenirUne requête HTTP par image et par langue
Langues ciblesCelles que prend en charge votre service de traduction9
Texte traduit sous forme de donnéesOuiNon, l’API renvoie une image
Pixels hors du texteIntactsRégénérés avec l’image : les chiffres, les petits textes et les logos peuvent changer

Construisez-le vous-même si vous avez besoin du texte traduit sous forme de données (texte alternatif, recherche), d’une terminologie strictement imposée, de calques modifiables, de plus de langues, ou de pixels hors du texte qui doivent rester identiques. Appelez l’API si vous voulez des visuels finis dans quelques langues et que vous pouvez les relire avant de les utiliser.

Un workflow de production

  1. Validez en local avant l’envoi : type de fichier, 10 Mo, 25 mégapixels, un target_lang pris en charge.
  2. Placez en file d’attente une tâche par image et par langue, et espacez les nouvelles tentatives en cas de 429.
  3. Copiez le résultat dans votre propre stockage ou DAM avec l’identifiant source, la langue cible, translation.id et createdAt. Ni la documentation ni la politique de confidentialité ne garantissent combien de temps translatedUrl reste disponible : ne vous en servez pas comme hébergement permanent. C’est un lien de stockage non signé : considérez-le comme public.
  4. Marquez chaque résultat « à relire ». Une personne qui lit la langue cible vérifie d’abord les prix, les caractéristiques et les mentions légales, puis les titres. La page sur la traduction par lot propose un tableau de relecture par niveau de risque que vous pouvez réutiliser.
  5. Publiez uniquement les images relues, par exemple dans les images de vos fiches Amazon.

Avant d’écrire du code, faites passer quelques images représentatives dans le traducteur en ligne avec le mode que vous comptez utiliser. Pour des besoins ponctuels sans code, la traduction par lot du tableau de bord est plus simple : jusqu’à 10 images et 50 images traduites par lot.

Offres et crédits

L’accès à l’API est inclus à partir de l’offre Pro : Pro comprend 100 crédits par mois et Premium 300 (tarifs). Chaque traduction terminée consomme un crédit. Les packs de crédits à la carte ajoutent 1 crédit pour 2 $, 30 pour 10 $ ou 100 pour 20 $ ; ils ne donnent pas accès à l’API à eux seuls. Toutes les offres avec accès à l’API incluent aussi la qualité Ultra et custom_prompt.

Consulter la documentation de l’API

Endpoint, en-têtes, paramètres, codes de statut et d’erreur, un exemple de réponse et des appels en cURL, Python et Node.js.

Questions fréquentes

Existe-t-il une API qui traduit le texte contenu dans une image ?

Oui. L’API TranslateMyImage reçoit une image et une langue cible, et renvoie l’URL d’une nouvelle image dont le texte est traduit, générée pour conserver la mise en page d’origine. Avec une API de traduction de texte, il faudrait d’abord extraire le texte de l’image par OCR, puis redessiner vous-même la traduction.

L’API renvoie-t-elle le texte traduit ?

Non. La réponse contient l’identifiant de la traduction, les URL de l’image originale et de l’image traduite, les langues, un statut, un horodatage et des métadonnées. Si vous avez besoin du texte traduit lui-même, pour un texte alternatif ou la recherche, passez l’image traduite dans un service d’OCR.

Puis-je traduire une image dans plusieurs langues en une seule requête ?

Non. Chaque requête comporte un seul target_lang. Pour obtenir cinq langues, envoyez cinq requêtes avec le même fichier ; chaque traduction terminée consomme un crédit.

Combien coûte l’API de traduction d’image ?

Chaque traduction terminée consomme un crédit. L’accès à l’API est inclus à partir de l’offre Pro : Pro coûte 9,90 $ par mois avec 100 crédits, Premium 19,90 $ par mois avec 300 crédits. Les packs de crédits à la carte ajoutent des crédits (1 pour 2 $, 30 pour 10 $ ou 100 pour 20 $) mais ne donnent pas accès à l’API à eux seuls.

Existe-t-il un SDK Python ou JavaScript ?

La documentation décrit des appels HTTP simples, avec des exemples en cURL, Python (requests) et Node.js (axios). Tout client HTTP capable d’envoyer du multipart/form-data avec un en-tête personnalisé convient.