---
title: "Copy Collection"
method: POST
path: "/v2/collections/{collection_name}/copy"
tags: ["collections"]
---

# Copy Collection

`POST /v2/collections/{collection_name}/copy`

Clone metadata, documents, and vectors under a new name. Instant regardless of size.

## Path parameters

- `collection_name` string, required

## Request body

- CollectionCopyRequest
  - `target_name` string, required — Name for the copy. Must be unique within the organization and environment. Same rules as creating a collection: 3-63 characters, alphanumeric start and end, letters, numbers, hyphens and underscores only.
  - `include_graph` boolean — Copy the collection's chunk relations and chunk metadata along with its documents and vectors. Defaults to true so a copy is a faithful original; set false to copy documents and vectors only.

## Response `200`

Successful Response

- CollectionCopyResponse
  - `success` boolean, required
  - `message` string, required
  - `source_collection` string, required — Name of the collection copied from.
  - `collection_name` string, required — Name of the new copy.
  - `database_id` string, required — ID of the new copy.
  - `documents_copied` integer, required — Number of documents cloned.
  - `files_copied` integer — Number of files cloned.
  - `namespaces_copied` integer, required — Number of Turbopuffer namespaces copied (text plus any media).
  - `relations_copied` integer — Number of chunk relations cloned. Counts ROWS, not distinct edges: duplicate (source, target, type) triples in the source are reproduced faithfully.
  - `chunk_metadata_copied` integer — Number of chunk metadata rows cloned.
  - `relations_unresolved` integer — Relations copied whose target document could not be remapped into the new collection, so their target_document_id is null. Usually these are edges already broken in the source (the target document was deleted, or the id never matched a document); if the source was being indexed while the copy ran, a freshly created edge can also land here. The copy reproduces the edge rather than writing a pointer that resolves to nothing.

## Other responses

- `404` — Source collection not found
- `409` — target_name is already in use
- `422` — target_name is missing or fails the name rules

## Changes

- **2026-09-04** `aa3902536e0b` — 5 info
  - added the new optional request property `include_graph`
  - added the optional property `chunk_metadata_copied` to the response with the `200` status
  - added the optional property `files_copied` to the response with the `200` status
  - added the optional property `relations_copied` to the response with the `200` status
  - …1 more

[Change history](https://skmtc.dev/runcaptain/apis/api-reference/changes/v2/collections/:collection_name/copy/post.md)

---

[API](https://skmtc.dev/runcaptain/apis/api-reference.md) · [All operations](https://skmtc.dev/runcaptain/apis/api-reference/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/runcaptain/api-reference/revisions/aa3902536e0b/schema)
