# Translate the base into a language with AI (Pidgely extension)

> Automatic translation (AI assist: plans with AI, 403 plan_required otherwise; counts against the monthly AI quota, 429 when exhausted). Translates the…

Source: https://docs.pidgely.com/api-reference/templates/translate-language/

`POST https://api.pidgely.com/templates/{key}/languages/{locale}/translate`

Automatic translation (AI assist: plans with AI, 403 `plan_required` otherwise; counts against the monthly AI quota, 429 when exhausted). Translates the current draft base (builder templates only) keeping blocks, styles, links, variables and html blocks, and stores it as the language (created or replaced, up to date). Publish to send it.

**Authorization:** `Bearer pdg_…`. An API key with `full_access`. A `sending_access` key gets `401 restricted_api_key`.

## Path parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `key` | string | Yes | Template id or alias |
| `locale` | string | Yes | Language code (`pt-br`, `es`, ...; case and `_` are normalised) |

## Request

This endpoint is not in the [SDKs](https://docs.pidgely.com/sdks/) yet; call it over HTTP.

```bash tab="cURL"
curl -X POST 'https://api.pidgely.com/templates/key/languages/locale/translate' \
  -H "Authorization: Bearer $PIDGELY_API_KEY"
```

## Response

`200 OK` with a JSON object.

## Errors

Errors have the shape `{"statusCode", "name", "message"}`. See [Errors](https://docs.pidgely.com/errors/) for the full list.

| Status | Name | When |
|---|---|---|
| 401 | `missing_api_key`, `restricted_api_key` | No `Authorization: Bearer` header, or a `sending_access` key called an endpoint that needs `full_access`. |
| 403 | `invalid_api_key`, `validation_error` | The API key is invalid or revoked, or the request is not allowed for this account (unverified domain, plan limit, paused account). |
| 404 | `not_found` | The resource does not exist in this account (or the id is not a valid UUID). |
| 422 | `validation_error` | A field is missing or invalid; `message` names it. |
| 429 | `rate_limit_exceeded` | Too many requests per second. Wait for `Retry-After` seconds. |
