API de traducción de imágenes: envía una imagen y recibe una imagen traducida

La API de TranslateMyImage traduce el texto que hay dentro de una imagen y devuelve una imagen nueva, no una lista de cadenas. Envías una imagen y un idioma de destino a un único endpoint; la respuesta JSON contiene la URL de la imagen traducida, generada para conservar el diseño original. Esta página explica qué hace la API, muestra ejemplos de solicitudes en curl, Python y Node.js, cómo gestionar los errores y cuándo tiene más sentido montar tu propio pipeline de OCR. La referencia completa está en la documentación de la API.

En resumen

  • Un solo endpoint: POST https://translatemyimage.com/api/translate con una cabecera X-API-Key y un cuerpo multipart que contiene la imagen y target_lang.
  • Una solicitud = una imagen a un idioma = un crédito cuando se completa. Idiomas de destino: en, fr, es, de, it, pt, ja, ko, zh.
  • El acceso a la API empieza con el plan Pro (Pro, Premium o Enterprise). Revisa las imágenes generadas antes de publicarlas.

Campos de la solicitud

El cuerpo es multipart/form-data, algo que tu cliente HTTP configura por ti.

CampoObligatorioValores aceptados
fileSíUna imagen JPG, PNG o WEBP, de hasta 10 MB y 25 megapíxeles
target_langSíen, fr, es, de, it, pt, ja, ko o zh
source_langNoUno de los nueve códigos anteriores; omítelo o envía auto para la detección automática
qualityNobasic (por defecto) o ultra
business_typeNodefault, marketing, edition (el modo Manga / cómics) o technical documentation
custom_promptNoInstrucciones para el modelo, hasta 1.000 caracteres (plan Pro y superiores)

Respuesta

Una llamada correcta devuelve esta estructura (ejemplo de la documentación):

{
  "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 es null cuando omites source_lang o envías auto. Los errores devuelven JSON con success: false, un mensaje en error y, una vez aceptada la clave, un code estable como insufficient_credits.

Inicio rápido

Crea una clave en la página API Keys del panel. Solo se muestra una vez, así que guárdala enseguida en una variable de entorno o en un gestor de secretos.

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), con reintentos cuando el servicio de imágenes alcanza su límite de solicitudes:

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 generación puede tardar minutos: deja un margen amplio
            )
        if response.status_code == 429:
            time.sleep(2 ** attempt)  # espera exponencial y nuevo intento
            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 (versión 18 o posterior, como módulo ES, con fetch y FormData integrados):

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 target_lang por solicitud: para traducir una imagen a cinco idiomas, envía cinco solicitudes.

Gestiona cada código de estado

EstadoSignificado (según la documentación)Qué debe hacer tu código
200Traducción completada; se consume un créditoDescargar y guardar la imagen traducida
400Entrada no válida, formato no compatible o archivo ausenteNo reintentar. Validar tipo, tamaño (10 MB), resolución (25 MP) y código de idioma antes de enviar
401Clave API ausente, no válida o revocadaNo reintentar. Revisar la clave y cómo se carga
403La cuenta propietaria de la clave no tiene el plan Pro o uno superior, necesario para acceder a la APINo reintentar. Revisar el plan de la cuenta que creó la clave
429El servicio de imágenes ha alcanzado su límite de solicitudesReintentar más tarde con espera exponencial
500El procesamiento fallóMirar primero code: insufficient_credits significa que la cuenta necesita créditos, así que reintentar no servirá. Si no, reintentar una o dos veces y después registrar el archivo para tratarlo a mano

La documentación describe estos seis estados. El endpoint también puede devolver otros, por ejemplo 422 cuando no se ha podido generar ninguna imagen (code: generation_failed) o 503 cuando el servicio de imágenes no está disponible (service_unavailable), así que basa tu lógica en code y no solo en el estado.

¿Montarlo tú mismo o llamar a una API de imagen a imagen?

En lugar de una API de imagen a imagen, puedes montar un pipeline: un servicio de OCR para localizar el texto (Google Cloud Vision, por ejemplo, devuelve el texto extraído con el cuadro delimitador de cada palabra, según su documentación de OCR), una API de traducción de texto y, después, código que borre el texto original y componga la traducción en los mismos cuadros con una fuente similar.

OCR + traducción de texto + tu propio renderizadoAPI de TranslateMyImage
Qué obtienesCadenas de texto con coordenadas y, después, lo que tú rendericesLa URL de una imagen traducida terminada
ControlTotal: fuentes, glosarios obligatorios, capas editablesModo (business_type) y custom_prompt
Esfuerzo de desarrolloVarios servicios más código de renderizado que construir y mantenerUna solicitud HTTP por imagen e idioma
Idiomas de destinoLos que admita tu servicio de traducción9
Texto traducido como datosSíNo, la API devuelve una imagen
Píxeles fuera del textoIntactosSe regeneran con la imagen: las cifras, el texto pequeño y los logotipos pueden cambiar

Móntalo tú mismo cuando necesites el texto traducido como datos (texto alternativo, búsqueda), una terminología impuesta de forma estricta, capas editables, más idiomas o que los píxeles fuera del texto queden idénticos. Llama a la API cuando quieras visuales terminados en unos pocos idiomas y puedas revisarlos antes de usarlos.

Un flujo de trabajo para producción

  1. Valida en local antes de enviar: tipo de archivo, 10 MB, 25 megapíxeles, un target_lang admitido.
  2. Pon en cola una tarea por imagen e idioma, y espacia los reintentos ante un 429.
  3. Copia el resultado en tu propio almacenamiento o DAM con el ID de origen, el idioma de destino, translation.id y createdAt. Ni la documentación ni la política de privacidad garantizan cuánto tiempo sigue disponible translatedUrl, así que no lo uses como alojamiento permanente. Es un enlace de almacenamiento sin firmar: trátalo como público.
  4. Marca cada resultado como «pendiente de revisión». Una persona que lea el idioma de destino revisa primero precios, especificaciones y textos legales, y después los titulares. La página de traducción por lotes incluye una tabla de revisión por riesgo que puedes reutilizar.
  5. Publica solo imágenes revisadas, por ejemplo en las imágenes de tus fichas de Amazon.

Antes de escribir código, prueba unas cuantas imágenes representativas en el traductor web con el modo que piensas usar. Para trabajos puntuales sin código, la traducción por lotes del panel es más sencilla: hasta 10 imágenes y 50 imágenes traducidas por lote.

Planes y créditos

El acceso a la API está incluido a partir del plan Pro: Pro incluye 100 créditos al mes y Premium, 300 (precios). Cada traducción completada consume un crédito. Los paquetes de pago por uso añaden 1 crédito por 2 $, 30 por 10 $ o 100 por 20 $; por sí solos no dan acceso a la API. Todos los planes con acceso a la API incluyen también la calidad Ultra y custom_prompt.

Lee la documentación de la API

Endpoint, cabeceras, parámetros, códigos de estado y de error, un ejemplo de respuesta y llamadas en cURL, Python y Node.js.

Preguntas frecuentes

¿Hay alguna API que traduzca el texto de una imagen?

Sí. La API de TranslateMyImage recibe una imagen y un idioma de destino y devuelve la URL de una imagen nueva con el texto traducido, generada para conservar el diseño original. Con una API de traducción de texto, primero tendrías que extraer el texto de la imagen con OCR y después volver a dibujar la traducción por tu cuenta.

¿La API devuelve el texto traducido?

No. La respuesta contiene el ID de la traducción, las URL de la imagen original y de la traducida, los idiomas, un estado, una marca de tiempo y metadatos. Si necesitas el texto traducido en sí, para el texto alternativo o para búsquedas, pasa la imagen traducida por un servicio de OCR.

¿Puedo traducir una imagen a varios idiomas en una sola solicitud?

No. Cada solicitud lleva un único target_lang. Para obtener cinco idiomas, envía cinco solicitudes con el mismo archivo; cada traducción completada consume un crédito.

¿Cuánto cuesta la API de traducción de imágenes?

Cada traducción completada consume un crédito. El acceso a la API está incluido a partir del plan Pro: Pro cuesta 9,90 $ al mes con 100 créditos y Premium, 19,90 $ al mes con 300 créditos. Los paquetes de pago por uso añaden créditos (1 por 2 $, 30 por 10 $ o 100 por 20 $), pero por sí solos no dan acceso a la API.

¿Hay un SDK para Python o JavaScript?

La documentación describe llamadas HTTP sencillas, con ejemplos en cURL, Python (requests) y Node.js (axios). Sirve cualquier cliente HTTP capaz de enviar multipart/form-data con una cabecera personalizada.