Référence API
API Translayer
Intégrez la traduction visuelle par IA dans votre flux de travail. Téléchargez des pages, suivez la progression en temps réel, téléchargez les résultats.
URL de base : https://translayer.app/api
Authentification
L'API Translayer utilise votre UID Firebase pour l'authentification. Transmettez votre userId dans le corps de la requête.
Forfait Pro requis. L'accès à l'API est disponible avec le forfait Pro (199 $/mois). Générez votre clé API dans Tableau de bord → Paramètres.
POST
/api/translate
Téléchargez des images pour la traduction. Renvoie un identifiant de tâche pour suivre la progression.
Requête (multipart/form-data)
| Champ | Type | Description |
|---|---|---|
| images | File[] | Page images (JPG, PNG, WebP). Required. |
| sourceLang | string | Source language or "auto" for detection. |
| targetLang | string | Target language (e.g. "pl", "en", "ja"). |
| mode | string | "fast" (0.5x credits), "standard" (1x), "advanced" (2x). |
| resolution | string | "original", "1K", "2K", "4K". |
| userId | string | Your Firebase UID. Required. |
| customPrompt | string | Optional translation instructions. |
Formule du coût en crédits
credits = ceil(pages × resolution_multiplier × mode_multiplier)
Exemple (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" Réponse
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"mode": "standard",
"creditsNeeded": 4
} 402 — Crédits insuffisants 400 — Aucun fichier téléchargé
GET
/api/jobs/:jobId/events
Flux Server-Sent Events en temps réel pour la progression de la traduction.
Exemple (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();
}
}; Charge utile de l'événement
{
"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
Téléchargez toutes les pages traduites sous forme d'archive ZIP.
Exemple (cURL)
curl -o translated.zip https://translayer.app/api/download/JOB_ID Conservation des fichiers
| Forfait | Conservation |
|---|---|
| Free | 3 days |
| Starter | 14 days |
| Standard | 30 days |
| Pro | 90 days |
404 — Tâche introuvable 410 — Expiré
DELETE
/api/projects/:id
Supprimez un projet de traduction et ses fichiers de sortie.
Exemple (cURL)
curl -X DELETE https://translayer.app/api/projects/JOB_ID \
-H "Content-Type: application/json" \
-d '{"userId": "YOUR_FIREBASE_UID"}' 403 — Non autorisé 404 — Introuvable
POST
/api/checkout
Créez une session Stripe Checkout pour un abonnement ou l'achat d'un pack de crédits.
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/..." } Exemple complet (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") Limites de débit et quotas
| Forfait | Pages/mois | Tâches simultanées | Taille maximale du fichier |
|---|---|---|---|
| Free | 10 | 1 | 5 MB |
| Starter | 75 | 2 | 10 MB |
| Standard | 500 | 5 | 25 MB |
| Pro | 1,000 | 10 | 50 MB |
Prêt à intégrer ?
Commencez avec le forfait gratuit ou passez au Pro pour un accès complet à l'API.
Commencer gratuitement