---
title: "Translate finished variations into other languages"
method: POST
path: "/cloning/jobs/{jobId}/localize"
tags: ["Cloning"]
---

# Translate finished variations into other languages

`POST /cloning/jobs/{jobId}/localize`

## Request

- Base URL: `https://app.getprolifik.com/api/v1`
- URL: `https://app.getprolifik.com/api/v1/cloning/jobs/{jobId}/localize`
- Auth: HTTP bearer

Each (variation, language) becomes a NEW variation on the same job, built on the original's own regenerated background — no new images — with app, product and brand names kept verbatim and the caption and hashtags localised. Costs 3 credits per translation, reserved up front and billed only for a translation whose render finishes; a translation that fails, or whose render fails, is refunded when the request settles. Omit pieceIds to translate every finished original variation; pairs that already exist are skipped, and a request where all of them exist is a 409. A variation made before translation was available is refused with 409 (regenerate it to translate). Languages: es (Spanish), pt-BR (Portuguese (Brazil)), fr (French), de (German), it (Italian), nl (Dutch), pl (Polish), tr (Turkish), id (Indonesian). At most 20 translations per request. Poll /cloning/jobs/{jobId} until status is ready; translated variations carry language and localizedFrom.

## Path parameters

- `jobId` string, uuid, required

## Headers

- `Idempotency-Key` string, required

## Request body

- LocalizeCloningRequest
  - `languages` string[], required
  - `pieceIds` string[]: Variations to translate. Omit for every finished original variation.

## Response `202`

Translations queued

- CloningLocalizeResult
  - `ok` true, required
  - `jobId` string, uuid, required
  - `translations` integer, required: How many translations were queued.
  - `credits` integer, required: Reserved for them. Billed per translation whose render finishes; the rest is refunded.
  - `items` object[], required
    - `pieceId` string, uuid, required: The variation being translated.
    - `language` 'es' | 'pt-BR' | 'fr' | 'de' | 'it' | 'nl' | 'pl' | 'tr' | 'id', required
    - `variationIndex` integer, required: Where the translation will appear on the job.

## Other responses

- `400`: Request failed
- `401`: Request failed
- `402`: Payment required. error.code is subscription_required (the plan does not include this feature, or the key's account no longer has a plan: API keys are paid-only, so every write from a key whose account has none is refused; see error.upgradeUrl), insufficient_credits (the AI-credit balance is short; see error.needed, error.balance, error.upgradeUrl), or quota_exceeded (a plan quota such as monthly videos or clip minutes).
- `403`: Request failed
- `404`: Request failed
- `409`: Request failed
- `429`: Request failed
- `503`: Request failed

---

[API](https://skmtc.dev/getprolifik/apis/prolifik-public-api.md) · [All operations](https://skmtc.dev/getprolifik/apis/prolifik-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/getprolifik/apis/prolifik-public-api/revisions/301e79c5763c?raw)
