# Copy content to another locale

**Publié le** : 2026-05-08
**Catégorie** : Core CMS

## `POST /contents/:id/copy-to-locale`

**Copy content to another locale**

Creates a translated copy of a content in a target locale. The copy
is linked to the original via a `translationGroupId`, enabling
locale-aware navigation.

Required permissions: `contents.create`

### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | string | Yes | Unique identifier |


### Request Body

Content-Type: `application/json`

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `targetLocale` | string | Yes | Required |


### Responses

| Status | Description |
| --- | --- |
| `200` | Successful response |
| `401` | Unauthorized — invalid or missing API token |
| `403` | Forbidden — insufficient permissions |
| `404` | Not found |
| `422` | Validation error |


> **Notes:** - Requires `locale` in the request body (e.g., `"fr"`, `"es"`).
> 
> - The content body and metadata are copied as-is — translation is manual.
> - Fails if a translation already exists for that locale.

### Examples

```bash
curl -X POST https://api.lynkow.com/v1/contents/42/copy-to-locale \
  -H "Authorization: Bearer $API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"locale": "fr"}'
```

### Response Example

```json
{
  "data": {
    "id": 99,
    "title": "Getting Started with Lynkow",
    "slug": "getting-started-with-lynkow",
    "type": "post",
    "status": "draft",
    "locale": "fr",
    "translationGroupId": "tg-uuid-1",
    "createdAt": "2025-04-06T15:00:00.000Z",
    "updatedAt": "2025-04-06T15:00:00.000Z"
  }
}
```

---