API リファレンス
Translayer API
AIを活用したビジュアル翻訳をワークフローに統合できます。ページのアップロード、リアルタイムの進捗追跡、結果のダウンロードが可能です。
ベースURL: https://translayer.app/api
認証
Translayer APIはFirebase UIDを認証に使用します。リクエストボディにuserIdを含めてください。
Pro プランが必要です。 API アクセスはProプラン($199/月)でご利用いただけます。APIキーは以下で生成してください: ダッシュボード → 設定.
POST
/api/translate
翻訳用の画像をアップロードします。進捗追跡用のジョブIDを返します。
リクエスト(multipart/form-data)
| フィールド | 型 | 説明 |
|---|---|---|
| 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. |
クレジットコスト計算式
credits = ceil(pages × resolution_multiplier × mode_multiplier)
例(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" レスポンス
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"mode": "standard",
"creditsNeeded": 4
} 402 — クレジット不足 400 — ファイルがアップロードされていません
GET
/api/jobs/:jobId/events
翻訳進捗のリアルタイムSSE(Server-Sent Events)ストリーム。
例(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();
}
}; イベントペイロード
{
"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
翻訳済みの全ページをZIPアーカイブとしてダウンロードします。
例(cURL)
curl -o translated.zip https://translayer.app/api/download/JOB_ID ファイル保持期間
| プラン | 保持期間 |
|---|---|
| Free | 3 days |
| Starter | 14 days |
| Standard | 30 days |
| Pro | 90 days |
404 — ジョブが見つかりません 410 — 期限切れ
DELETE
/api/projects/:id
翻訳プロジェクトとその出力ファイルを削除します。
例(cURL)
curl -X DELETE https://translayer.app/api/projects/JOB_ID \
-H "Content-Type: application/json" \
-d '{"userId": "YOUR_FIREBASE_UID"}' 403 — 権限がありません 404 — 見つかりません
POST
/api/checkout
サブスクリプションまたはクレジットパック購入用のStripe Checkoutセッションを作成します。
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/..." } 完全な例(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") レート制限とクォータ
| プラン | ページ/月 | 同時実行ジョブ数 | 最大ファイルサイズ |
|---|---|---|---|
| Free | 10 | 1 | 5 MB |
| Starter | 75 | 2 | 10 MB |
| Standard | 500 | 5 | 25 MB |
| Pro | 1,000 | 10 | 50 MB |