# Duplicate a lesson

`POST https://api.cademi.com.br/api/v3/products/{product_id}/lessons/{lesson_id}/copies`

Operation ID: `lessons.copies.create` · API v3

Starts an asynchronous operation that copies the lesson into the product given by `target_product_id`, optionally into a specific module and under a new name. The copy is always created as a draft.

This operation requires an `Idempotency-Key` header. The response returns the operation, and the `Location` header points to it; retrieve the operation to track its progress and obtain the new lesson once it completes.

Requires the `lessons.create` permission on the destination product. Replicated lessons cannot be copied, and lessons cannot be copied into replicated products; both cases return `replica_readonly`.

Required permissions: `lessons.create`.

## Parameters

| Name | In | Type | Required | Description |
|---|---|---|---|---|
| `product_id` | path | string | yes |  |
| `lesson_id` | path | string | yes |  |

## Request body

Content type: `application/json`, required.

| Field | Type | Required | Description |
|---|---|---|---|
| `module_id` | string or null | no |  |
| `name` | string or null | no |  |
| `target_product_id` | string | yes |  |

## Responses

### 202

The copy was accepted for asynchronous processing. Returns the operation that tracks it.

Body: `data`: Operation.

Fields of Operation:

| Field | Type | Required | Description |
|---|---|---|---|
| `attempt` | object or null | yes |  |
| `cancellation_requested` | boolean | yes |  |
| `created_at` | string (date-time) | yes |  |
| `error` | object or null | yes |  |
| `expires_at` | string (date-time) | yes |  |
| `finished_at` | string or null (date-time) | yes |  |
| `id` | string | yes | Public ID, with the op_ prefix. |
| `items_url` | string | yes |  |
| `object` | string, one of `operation` | yes |  |
| `progress` | object | yes |  |
| `result_url` | string or null | yes |  |
| `started_at` | string or null (date-time) | yes |  |
| `status` | string, one of `queued`, `running`, `succeeded`, `partially_succeeded`, `failed`, `canceled` | yes |  |
| `type` | string | yes | Type of the operation, from a fixed set of values. |

### 401

The credential is missing, malformed, expired, or revoked.

Body: Error.

### 403

The current credentials do not have the permission required by this operation.

Body: Error.

### 404

The lesson or the destination product was not found or is not accessible with the current credentials.

Body: Error.

### 422

The Idempotency-Key header is missing or the request contains invalid data.

Body: Error.

Full schema: https://cademi.dev/openapi/v3.json
