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/translateavec un en-têteX-API-Keyet un corps multipart contenant l’image ettarget_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.
| Champ | Obligatoire | Valeurs acceptées |
|---|---|---|
file | Oui | Une image JPG, PNG ou WEBP, jusqu’à 10 Mo et 25 mégapixels |
target_lang | Oui | en, fr, es, de, it, pt, ja, ko ou zh |
source_lang | Non | L’un des neuf codes ci-dessus ; omettez-le ou envoyez auto pour la détection automatique |
quality | Non | basic (par défaut) ou ultra |
business_type | Non | default, marketing, edition (le mode Manga / BD) ou technical documentation |
custom_prompt | Non | Instructions 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
| Statut | Signification (d’après la documentation) | Ce que votre code doit faire |
|---|---|---|
| 200 | Traduction terminée ; un crédit est consommé | Télécharger et stocker l’image traduite |
| 400 | Entrée invalide, format non pris en charge ou fichier manquant | Ne pas réessayer. Valider le type, la taille (10 Mo), la résolution (25 mégapixels) et le code de langue avant l’envoi |
| 401 | Clé API absente, invalide ou révoquée | Ne pas réessayer. Vérifier la clé et la façon dont elle est chargée |
| 403 | Le compte propriétaire de la clé n’a pas l’offre Pro ou une offre supérieure, requise pour l’accès à l’API | Ne pas réessayer. Vérifier l’offre du compte qui a créé la clé |
| 429 | Le service d’images est limité (limite de requêtes atteinte) | Réessayer plus tard avec une attente exponentielle |
| 500 | Le 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 rendu | API TranslateMyImage | |
|---|---|---|
| Ce que vous obtenez | Des chaînes de texte avec leurs coordonnées, puis ce que vous en faites au rendu | L’URL d’une image traduite finie |
| Contrôle | Total : polices, glossaires imposés, calques modifiables | Mode (business_type) et custom_prompt |
| Effort de développement | Plusieurs services, plus du code de rendu à construire et à maintenir | Une requête HTTP par image et par langue |
| Langues cibles | Celles que prend en charge votre service de traduction | 9 |
| Texte traduit sous forme de données | Oui | Non, l’API renvoie une image |
| Pixels hors du texte | Intacts | Ré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
- Validez en local avant l’envoi : type de fichier, 10 Mo, 25 mégapixels, un
target_langpris en charge. - Placez en file d’attente une tâche par image et par langue, et espacez les nouvelles tentatives en cas de 429.
- Copiez le résultat dans votre propre stockage ou DAM avec l’identifiant source, la langue cible,
translation.idetcreatedAt. Ni la documentation ni la politique de confidentialité ne garantissent combien de tempstranslatedUrlreste disponible : ne vous en servez pas comme hébergement permanent. C’est un lien de stockage non signé : considérez-le comme public. - 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.
- 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.