---
title: "Duplicate a collection"
method: POST
path: "/collections.duplicate"
tags: ["Collections"]
---

# Duplicate a collection

`POST /collections.duplicate`

## Request

- Base URL: `https://app.getoutline.com/api`
- URL: `https://app.getoutline.com/api/collections.duplicate`
- Auth: one of:
  - HTTP bearer
  - OAuth 2
    - Authorization code: `https://app.getoutline.com/oauth/authorize`
    - Token URL: `https://app.getoutline.com/oauth/token` scopes: `read`, `write`

Duplicate an existing collection along with its published documents. The
original collection's settings – icon, color, permission, sharing, and
sorting – are preserved on the copy. Draft and archived documents are
not duplicated. Document duplication runs asynchronously in the
background, so the copy may initially be returned before all of its
documents have been created.

## Request body

- object
  - `id` string, uuid, required: Unique identifier for the collection to duplicate.
  - `name` string: An optional name for the new collection. If omitted, the original collection's name is reused.

## Response `200`

OK

- object
  - `data` Collection
    - `id` string, uuid: Unique identifier for the object.
    - `url` string: The relative URL path at which the collection can be accessed.
    - `urlId` string: A short unique identifier that can be used to identify the collection instead of the UUID.
    - `name` string: The name of the collection.
    - `description` string, nullable: A description of the collection, may contain markdown formatting
    - `data` object, nullable: The collection description as rich-text JSON, when available.
    - `sort` object: The sort of documents in the collection. Note that not all API responses respect this and it is left as a frontend concern to implement.
      - `field` string
      - `direction` 'asc' | 'desc'
    - `index` string, nullable: The position of the collection in the sidebar
    - `color` string, nullable: A color representing the collection, this is used to help make collections more identifiable in the UI. It should be in HEX format including the #
    - `icon` string, nullable: A string that represents an icon in the outline-icons package or an emoji
    - `ownerId` string, uuid, nullable: The identifier of the user who owns this collection when it is a personal collection. This is `null` for regular shared collections.
    - `permission` 'read' | 'read_write'
    - `templateManagement` 'read' | 'read_write'
    - `sharing` boolean: Whether public document sharing is enabled in this collection
    - `commenting` boolean, nullable: Whether commenting is enabled in this collection
    - `createdAt` string, date-time: The date and time that this object was created
    - `updatedAt` string, date-time: The date and time that this object was last changed
    - `deletedAt` string, date-time, nullable: The date and time that this object was deleted
    - `archivedAt` string, date-time, nullable: The date and time that this object was archived
    - `archivedBy` User
      - `id` string, uuid: Unique identifier for the object.
      - `name` string: The name of this user, it is migrated from Slack or Google Workspace when the SSO connection is made but can be changed if necessary.
      - `avatarUrl` string, uri: The URL for the image associated with this user, it will be displayed in the application UI and email notifications.
      - `color` string: A color representing the user, used in the UI for avatars without an image.
      - `email` string, email: The email associated with this user, it is migrated from Slack or Google Workspace when the SSO connection is made but can be changed if necessary.
      - `role` 'admin' | 'member' | 'viewer' | 'guest'
      - `isSuspended` boolean: Whether this user has been suspended.
      - `lastActiveAt` string, date-time, nullable: The last time this user made an API request, this value is updated at most every 5 minutes.
      - `timezone` string, nullable: The timezone this user has registered.
      - `createdAt` string, date-time: The date and time that this user first signed in or was invited as a guest.
      - `updatedAt` string, date-time: The date and time that this user was last updated.
      - `deletedAt` string, date-time, nullable: The date and time that this user was deleted, if applicable.
      - `invitedBy` User (recursive)
    - `deprecatedReason` string, nullable: The reason the collection was archived or deleted, if one was provided.
    - `sourceMetadata` object, nullable: Metadata about the external source this collection was imported from, if any.
      - `externalId` string
      - `externalName` string
      - `createdByName` string
  - `policies` Policy[]
    - `id` string, uuid: Unique identifier for the object this policy references.
    - `abilities` object: The abilities that are allowed by this policy, if an array is returned then the individual ID's in the array represent the memberships that grant the ability.

## Other responses

- `400`: The request failed one or more validations.
- `401`: The API key is missing or otherwise invalid.
- `403`: The current API key is not authorized to perform this action.
- `404`: The specified resource was not found.
- `429`: The request was rate limited.

## Changes

- **2026-10-16** `c09b7940e788`: 1 info
  - added the optional property `data/ownerId` to the response with the `200` status
- **2026-09-22** `cd18cbbc1706`: 1 warning
  - the `name` request property's maxLength was set to `100`
- **2026-09-20** `a75820943fbb`: 1 info
  - added the optional property `data/deprecatedReason` to the response with the `200` status
- **2026-08-12** `9a99ee93e11d`: 1 info
  - added the optional property `data/archivedBy/invitedBy` to the response with the `200` status
- **2026-08-01** `cdfc157eefd0`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/defaulr/apis/outline-api/changes/collections.duplicate/post.md)

---

[API](https://skmtc.dev/defaulr/apis/outline-api.md) - [All operations](https://skmtc.dev/defaulr/apis/outline-api/llms.txt) - [OpenAPI document](https://skmtc.dev/defaulr/apis/outline-api/revisions/5ddf01ffba84?raw)
