> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sequenzy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Translate a Push Campaign

> Translate a push campaign into your other languages with AI

Translates a draft or scheduled push campaign's title and message with AI into
the languages in **Settings > Localization** and saves them as the campaign's
[`localizations`](https://docs.sequenzy.com/api-reference/push/update-campaign). Merge tags are kept
exactly, and their fallback text (`{{FIRST_NAME|there}}`) is translated.

By default it translates languages with no version yet, and AI versions whose
main title or message changed since. Versions a person wrote are kept unless you
pass `overwrite: true`. The translation runs while the request waits, usually a
few seconds. If the campaign changes while it is being translated, nothing is
saved and you get a `409`; translate again. Requires the `campaigns:write`
scope.

Each contact gets the version for their language attribute, else their
device's language as reported by the Sequenzy SDK, else your fallback language.
See [Push notifications](https://docs.sequenzy.com/concepts/push-notifications.md#languages).

## Request

**campaignId** `string` *required*

The push campaign ID.

**locales** `string[]`

Languages to translate into. Omit for every language except the main one.
Languages that are not in your language list are rejected.

**overwrite** `boolean` (default: false)

Retranslate every requested language, replacing versions a person wrote.

```bash theme={null}
curl -X POST "https://api.sequenzy.com/api/v1/push/campaigns/cmp_abc123/translate" \
  --header "Authorization: Bearer $SEQUENZY_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{"locales":["de","fr"]}'
```

## Response fields

**campaign** `object`

The campaign, with the new versions in `content.localizations`.

**translated** `string[]`

Languages translated and saved by this request.

**skipped** `object[]`

Languages left as they were: `{ locale, reason }`, where `reason` is
`up_to_date` or `edited` (written by a person).

**failed** `object[]`

Languages that could not be translated: `{ locale, error }`. The other
languages are still saved; retry these.

**message** `string`

A one-line summary.

## Responses

```json 200 theme={null}
{
  "success": true,
  "campaign": {
    "id": "cmp_abc123",
    "name": "Flash sale",
    "type": "push",
    "status": "draft",
    "content": {
      "title": "24h sale, {{FIRST_NAME|friend}}",
      "body": "30% off everything",
      "url": "https://shop.example.com/sale",
      "imageUrl": null,
      "iconUrl": null,
      "localizations": [
        {
          "locale": "de",
          "title": "24-Stunden-Sale, {{FIRST_NAME|Freund}}",
          "body": "30 % Rabatt auf alles",
          "url": null,
          "imageUrl": null,
          "sourceHash": "5f1c2a90",
          "origin": "ai"
        }
      ]
    },
    "targetLists": { "type": "all" },
    "scheduledAt": null,
    "sentAt": null,
    "estimatedRecipientCount": null,
    "labelIds": [],
    "createdAt": "2026-11-08T12:00:00.000Z",
    "updatedAt": "2026-11-08T12:00:05.000Z"
  },
  "translated": ["de"],
  "skipped": [{ "locale": "fr", "reason": "edited" }],
  "failed": [],
  "message": "Translated into de. Kept fr (written by a person; pass overwrite to replace it)."
}
```

```json 400 theme={null}
{
  "error": "Add ja in Settings > Localization before translating into it."
}
```

```json 401 theme={null}
{
  "error": "Invalid API key"
}
```

```json 403 theme={null}
{
  "error": "API key is missing required scope: campaigns:write"
}
```

```json 404 theme={null}
{
  "error": "Campaign not found."
}
```

```json 409 theme={null}
{
  "error": "The campaign changed while it was being translated. Translate again."
}
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.