# Duplicate a project

`POST https://api.vidmoat.com/v1/projects/{id}/duplicate`

- Scope: `projects.write`
- Cost: Free

An independent copy: the same timeline, the same media by reference and the same thumbnail, filed in the same workspace. Editing the copy never changes the original. Counts against the plan's project limit.

### Path parameters

- `id` (string, required): The project id.

### Body

- `name` (string, optional): Up to 80 characters. Default: "Copy of <name>".
- `workspaceId` (string, optional): File the copy here instead, or `null` for unfiled. Omitted keeps the original's workspace.

## Response

Returns `201`.

### Response fields

- `project` (object): Summary view of the copy.
- `duplicatedFrom` (string): The original's id.

> **Tip: With a test key.** Test keys duplicate for real.

## Errors

Besides the errors any request can get ([authentication](https://developer.vidmoat.com/developer/docs/authentication#when-a-request-is-refused), [rate limits](https://developer.vidmoat.com/developer/docs/rate-limits)):

| Status | Code | When |
| --- | --- | --- |
| 404 | [`not_found`](https://developer.vidmoat.com/developer/docs/errors#not_found) | No such project, or it is not yours. The two are indistinguishable on purpose. |
| 402 | [`quota_exceeded`](https://developer.vidmoat.com/developer/docs/errors#quota_exceeded) | The plan's project limit is reached. |

## Request examples

```bash curl
curl -X POST https://api.vidmoat.com/v1/projects/$ID/duplicate \
  -H "Authorization: Bearer $VIDMOAT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Cutdown"}'
```

```js Node
const ID = 'YOUR_PROJECT_ID';

const res = await fetch(`https://api.vidmoat.com/v1/projects/${ID}/duplicate`, {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.VIDMOAT_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    name: 'Cutdown',
  }),
});
const data = await res.json();
if (!res.ok) throw new Error(data.error?.message ?? `HTTP ${res.status}`);
console.log(data);
```

```python Python
import os
import requests

ID = "YOUR_PROJECT_ID"

res = requests.post(
    f"https://api.vidmoat.com/v1/projects/{ID}/duplicate",
    headers={"Authorization": f"Bearer {os.environ['VIDMOAT_KEY']}"},
    json={
      "name": "Cutdown",
    },
    timeout=60,
)
res.raise_for_status()
print(res.json())
```

## Example response

```json
{
  "project": {
    "id": "cm1abc",
    "name": "Launch teaser",
    "createdAt": "2026-09-30T10:00:00.000Z",
    "updatedAt": "2026-10-02T09:00:00.000Z",
    "durationSec": 12.5,
    "clipCount": 4,
    "settings": { "aspectRatio": "9:16", "width": 1080, "height": 1920, "fps": 30, "background": "#000000" },
    "workspace": null
  },
  "duplicatedFrom": "cm1abc"
}
```

---

Source: https://developer.vidmoat.com/developer/docs/api/projects/duplicate-project
Previous: [Delete a project](https://developer.vidmoat.com/developer/docs/api/projects/delete-project.md)
Next: [Apply commands](https://developer.vidmoat.com/developer/docs/api/projects/apply-commands.md)
All documentation: https://developer.vidmoat.com/llms-full.txt
