---
title: "Translate an uploaded PPTX file"
method: POST
path: "/v1/translate"
tags: ["translate"]
---

# Translate an uploaded PPTX file

`POST /v1/translate`

## Request

- Base URL: `https://api.slideforge.dev`
- URL: `https://api.slideforge.dev/v1/translate`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

Upload a .pptx file and receive a translated version with all formatting preserved. Runs asynchronously — the response contains a job_id to poll via GET /v1/jobs/{job_id}.

**Max file size:** 50 MB.  **Max slides:** 100.  **Macros rejected.**

**Pricing:** $0.02 per slide, flat. The wallet is checked for every slide before any work starts (402 with a checkout link if it cannot cover the deck); slides whose translation still overflows at the minimum font size are not billed.

**Fidelity-preserving:** text runs are translated in place via python-pptx, preserving fonts, colors, sizes, positions, charts, tables, and embedded images.

## Response `200`

Successful Response

- unknown

## Other responses

- `202`: Translation queued
- `400`: Invalid file (size, format, macros, or structure)
- `402`: Insufficient balance
- `413`: File too large
- `422`: Validation error
- `429`: Rate limit exceeded

---

[API](https://skmtc.dev/slideforge/apis/slideforge-api.md) · [All operations](https://skmtc.dev/slideforge/apis/slideforge-api/llms.txt) · [OpenAPI document](https://skmtc.dev/slideforge/apis/slideforge-api/revisions/ae698e3d3c00?raw)
