---
title: "Clone a project"
method: POST
path: "/v1/projects/clone"
tags: ["v1 projects"]
---

# Clone a project

`POST /v1/projects/clone`

Deep-clone a project, including all its Neo4j memory graph data and
    referenced GCS assets, into a new independent project.

    This endpoint:
    - Creates a new project in PostgreSQL with the source project's metadata
    - Copies all GCS files (images, objects) under a new project path
    - Deep-copies all Neo4j nodes (episodes, entities, preferences, identity,
      hierarchical data, multimodal nodes) with new UUIDs
    - Rewrites GCS URLs in ImageNode/ObjectNode to point at the copied files
    - Recreates all inter-node relationships

    The clone is fully independent — changes to one project do not affect the other.

    **Authentication**: Requires valid API key or JWT token

## Request body

- CloneProjectRequest — Request model for cloning a project
  - `source_user_id` string — User ID of the source project owner. If not provided, uses the authenticated user's ID.
  - `project_id` string, required — ID of the project to clone
  - `name` string, nullable — Name for the cloned project. Defaults to '{original_name} (Copy)'.
  - `description` string, nullable — Description for the cloned project. Defaults to the original's description.
  - `target_user_id` string, nullable — Target user ID to own the cloned project. If not provided, uses the authenticated user.

## Response `201`

Successful Response

- CloneProjectResponse — Response model for cloning a project
  - `project` ProjectResponse, required — Response model for project information
    - `project_id` string, required
    - `user_id` string, required
    - `name` string, required
    - `description` string, nullable, required
    - `project_type` string, nullable — Project type override: 'creative_design' or 'general'. When set, skips LLM classification.
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, nullable, required
    - `user_name` string, nullable, required
    - `user_email` string, nullable, required
  - `message` string, required — Success message
  - `source_project_id` string, required — ID of the original project that was cloned

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Project not found
- `422` — Validation Error
- `500` — Internal Server Error

---

[API](https://skmtc.net/elicitlabs/apis/elicit-labs-api.md) · [All operations](https://skmtc.net/elicitlabs/apis/elicit-labs-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/elicitlabs/elicit-labs-api/revisions/27701839a070/schema)
