Translate
Translate PowerPoint files while preserving all formatting, fonts, colors, charts, and images. Text-run-level replacement — no regeneration. $0.02 per slide, any deck size. Supports 32 languages: en, de, fr, es, it, pt, nl, sv, da, no, fi, is, pl, cs, sk, hu, ro, hr, sl, et, lt, lv, ru, uk, bg, sr, tr, ca, gl, id, vi, el.
/v1/translateTranslate a PPTX file into a target language. Accepts a job_id (from a previous generate/render), a pptx_url, or pptx_base64. Async — returns job_id for polling.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| job_id | string | required | Source slide job ID to translate. |
| target_language | string | required | ISO 639-1 code — 32 supported languages across Latin, Cyrillic, and Greek scripts (en, de, fr, es, it, pt, nl, sv, da, no, fi, is, pl, cs, sk, hu, ro, hr, sl, et, lt, lv, ru, uk, bg, sr, tr, ca, gl, id, vi, el). |
| source_language | string | optional | Source language or "auto" to detect. Default: auto. |
| include_notes | boolean | optional | Also translate speaker notes. Default: false. |
| include_tables | boolean | optional | Translate table cells. Default: true. |
| concise_mode | boolean | optional | Prefer shorter translations for tight text boxes. Default: false. |
| name | string | optional | Human-readable job name. |
Response
{
"job_id": "tr-a1b2c3d4",
"status": "queued",
"name": "Q1 Report — German"
}Examples
curl -X POST https://api.slideforge.dev/v1/translate \
-H "Authorization: Bearer sf_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"job_id": "SLIDE_JOB_ID",
"target_language": "de"
}'POST /v1/translate/from-job
Convenience endpoint — translate directly from a generation job ID. Same parameters as POST /v1/translate.
# Translate from a previous generation job
curl -X POST https://api.slideforge.dev/v1/translate/from-job \
-H "Authorization: Bearer sf_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"job_id": "GENERATE_JOB_ID",
"target_language": "fr",
"concise_mode": true
}'Translating uploaded files
Pass pptx_base64 to translate a file you already have. Max ~10 MB inline. For larger files, upload first via POST /v1/assets/upload and pass the pptx_url.
# Translate an uploaded .pptx file (base64)
curl -X POST https://api.slideforge.dev/v1/translate \
-H "Authorization: Bearer sf_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"pptx_base64": "UEsDBBQAAAAIAA...",
"target_language": "es",
"include_notes": true
}'Overflow warnings
Some languages expand significantly (e.g. English → German ~30%). When translation pushes text beyond its original shape bounds, the response includes overflow warnings per slide. Use concise_mode: true to ask the LLM to prefer shorter translations for tight layouts.