Referencia API

API de Translayer

Integre la traducción visual impulsada por IA en su flujo de trabajo. Suba páginas, siga el progreso en tiempo real, descargue los resultados.

URL Base: https://translayer.app/api

Autenticación

La API de Translayer utiliza su UID de Firebase para la autenticación. Pase su userId en el cuerpo de la solicitud.

Se requiere plan Pro. El acceso API está disponible en el plan Pro ($199/mes). Genere su clave API en Panel de Control → Configuración.
POST

/api/translate

Suba imágenes para traducción. Devuelve un ID de trabajo para seguir el progreso.

Solicitud (multipart/form-data)

Campo Tipo Descripción
imagesFile[]Page images (JPG, PNG, WebP). Required.
sourceLangstringSource language or "auto" for detection.
targetLangstringTarget language (e.g. "pl", "en", "ja").
modestring"fast" (0.5x credits), "standard" (1x), "advanced" (2x).
resolutionstring"original", "1K", "2K", "4K".
userIdstringYour Firebase UID. Required.
customPromptstringOptional translation instructions.

Fórmula de Costo de Créditos

credits = ceil(pages × resolution_multiplier × mode_multiplier)

Ejemplo (cURL)

curl -X POST https://translayer.app/api/translate \
  -F "images=@page1.jpg" \
  -F "images=@page2.jpg" \
  -F "sourceLang=en" \
  -F "targetLang=ja" \
  -F "mode=standard" \
  -F "resolution=2K" \
  -F "userId=YOUR_FIREBASE_UID"

Respuesta

{
  "jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "mode": "standard",
  "creditsNeeded": 4
}
402 — Créditos insuficientes 400 — No se subieron archivos
GET

/api/jobs/:jobId/events

Flujo de eventos enviados por el servidor (SSE) en tiempo real para el progreso de la traducción.

Ejemplo (JavaScript)

const es = new EventSource('/api/jobs/' + jobId + '/events');
es.onmessage = (event) => {
  const job = JSON.parse(event.data);
  console.log(job.status, job.progress + '/' + job.total);
  if (job.status === 'completed' || job.status === 'failed') {
    es.close();
  }
};

Carga del Evento

{
  "id": "job-uuid",
  "status": "processing",    // pending | processing | completed | failed
  "progress": 3,
  "total": 10,
  "currentFile": "page_003.jpg",
  "results": [
    { "sourceFilename": "page_001.jpg", "url": "/api/outputs/..." }
  ]
}
GET

/api/download/:jobId

Descargue todas las páginas traducidas como un archivo ZIP.

Ejemplo (cURL)

curl -o translated.zip https://translayer.app/api/download/JOB_ID

Retención de Archivos

Plan Retención
Free3 days
Starter14 days
Standard30 days
Pro90 days
404 — Trabajo no encontrado 410 — Expirado
DELETE

/api/projects/:id

Elimine un proyecto de traducción y sus archivos de salida.

Ejemplo (cURL)

curl -X DELETE https://translayer.app/api/projects/JOB_ID \
  -H "Content-Type: application/json" \
  -d '{"userId": "YOUR_FIREBASE_UID"}'
403 — No autorizado 404 — No encontrado
POST

/api/checkout

Cree una sesión de Stripe Checkout para la compra de una suscripción o paquete de créditos.

curl -X POST https://translayer.app/api/checkout \
  -H "Content-Type: application/json" \
  -d '{
    "priceId": "price_xxx",
    "mode": "subscription",
    "userId": "YOUR_FIREBASE_UID"
  }'

// Response: { "url": "https://checkout.stripe.com/..." }

Ejemplo Completo (Python)

import requests, json, sseclient

BASE = "https://translayer.app/api"
UID = "your_firebase_uid"

# 1. Upload pages for translation
files = [("images", open(f"page_{i}.jpg", "rb")) for i in range(1, 6)]
data = {"sourceLang": "en", "targetLang": "ja", "mode": "standard",
        "resolution": "2K", "userId": UID}
res = requests.post(f"{BASE}/translate", files=files, data=data)
job_id = res.json()["jobId"]
print(f"Job started: {job_id}")

# 2. Track progress via SSE
response = requests.get(f"{BASE}/jobs/{job_id}/events", stream=True)
client = sseclient.SSEClient(response)
for event in client.events():
    job = json.loads(event.data)
    print(f"{job['progress']}/{job['total']} - {job['status']}")
    if job["status"] in ("completed", "failed"):
        break

# 3. Download ZIP
if job["status"] == "completed":
    zip_res = requests.get(f"{BASE}/download/{job_id}")
    with open("translated.zip", "wb") as f:
        f.write(zip_res.content)
    print("Downloaded translated.zip")

Límites de Velocidad y Cuotas

Plan Páginas/mes Trabajos simultáneos Tamaño máximo de archivo
Free1015 MB
Starter75210 MB
Standard500525 MB
Pro1,0001050 MB

¿Listo para integrar?

Comience con el nivel gratuito o actualice a Pro para acceso completo a la API.

Comenzar Gratis