---
title: "Translate an existing job's PPTX (JSON body)"
method: POST
path: "/v1/translate/from-job"
tags: ["translate"]
---

# Translate an existing job's PPTX (JSON body)

`POST /v1/translate/from-job`

## Request

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

JSON-body alternative to POST /v1/translate for the no-file case. Cleaner DX for agents that don't want to construct multipart just to say 'translate this existing job into German'.

Identical pricing and identical background pipeline as /v1/translate; the only difference is the request shape.

## Request body

- TranslateFromJobRequest: POST /v1/translate/from-job request body. JSON-body alternative to /v1/translate (multipart) for the no-file case. Cleaner DX for agents that don't want to construct multipart for what is effectively a JSON request: 'translate this existing job into German'.
  - `source_job_id` string, required
  - `target_language` string, required
  - `source_language` string
  - `include_notes` boolean
  - `include_tables` boolean
  - `concise_mode` boolean
  - `delete_after_download` boolean
  - `name` string, nullable

## Response `200`

Successful Response

- unknown

## Other responses

- `202`: Translation queued
- `400`: Invalid input
- `402`: Insufficient balance
- `404`: Source job not found
- `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)
