---
title: "Duplicate an existing project"
method: PUT
path: "/projects/{projectID}/duplicate"
tags: ["project"]
---

# Duplicate an existing project

`PUT /projects/{projectID}/duplicate`

Copies the project, tasks, files, kanban data, assignees, comments, attachments, labels, relations and backgrounds from one project to a new one. User/team permissions and link shares are only copied when duplicate_shares is set to true. The user needs read access in the project and write access in the parent of the new project.

## Path parameters

- `projectID` integer, required

## Request body

- ModelsProjectDuplicate
  - `duplicate_shares` boolean — Whether to copy the project's shares to the duplicate
  - `duplicated_project` ModelsProject
    - `background_blur_hash` string — Contains a very small version of the project background to use as a blurry preview until the actual background is loaded. Check out https://blurha.sh/ to learn how it works.
    - `background_information` unknown
    - `created` string — A timestamp when this project was created. You cannot change this value.
    - `description` string — The description of the project.
    - `hex_color` string — The hex color of this project
    - `id` integer — The unique, numeric id of this project.
    - `identifier` string — The unique project short identifier. Used to build task identifiers.
    - `is_archived` boolean — Whether a project is archived.
    - `is_favorite` boolean — True if a project is a favorite. Favorite projects show up in a separate parent project. This value depends on the user making the call to the api.
    - `max_permission` 0 | 1 | 2
    - `owner` UserUser
      - `bot_owner_id` integer — BotOwnerID is the ID of the owning (human) user if this user is a bot. A non-zero value means this user is a bot and cannot authenticate via password.
      - `created` string — A timestamp when this task was created. You cannot change this value.
      - `email` string — The user's email address.
      - `id` integer — The unique, numeric id of this user.
      - `name` string — The full name of the user.
      - `updated` string — A timestamp when this task was last updated. You cannot change this value.
      - `username` string — The username of the user. Is always unique.
    - `parent_project_id` integer
    - `position` number — The position this project has when querying all projects. See the tasks.position property on how to use this.
    - `subscription` ModelsSubscription
      - `created` string — A timestamp when this subscription was created. You cannot change this value.
      - `entity` integer
      - `entity_id` integer — The id of the entity to subscribe to.
      - `id` integer — The numeric ID of the subscription
    - `title` string — The title of the project. You'll see this in the overview.
    - `updated` string — A timestamp when this project was last updated. You cannot change this value.
    - `views` ModelsProjectView[]
      - `bucket_configuration` ModelsProjectViewBucketConfiguration[] — When the bucket configuration mode is not `manual`, this field holds the options of that configuration.
        - `filter` ModelsTaskCollection
          - `filter` string — The filter query to match tasks by. Check out https://vikunja.io/docs/filters for a full explanation.
          - `filter_include_nulls` boolean — If set to true, the result will also include null values
          - `order_by` string[] — The query parameter to order the items by. This can be either asc or desc, with asc being the default.
          - `s` string
          - `sort_by` string[] — The query parameter to sort by. This is for ex. done, priority, etc.
        - `title` string
      - `bucket_configuration_mode` 'none' | 'manual' | 'filter' — The bucket configuration mode. Can be `none`, `manual` or `filter`. `manual` allows to move tasks between buckets as you normally would. `filter` creates buckets based on a filter for each bucket.
      - `created` string — A timestamp when this reaction was created. You cannot change this value.
      - `default_bucket_id` integer — The ID of the bucket where new tasks without a bucket are added to. By default, this is the leftmost bucket in a view.
      - `done_bucket_id` integer — If tasks are moved to the done bucket, they are marked as done. If they are marked as done individually, they are moved into the done bucket.
      - `filter` ModelsTaskCollection
        - `filter` string — The filter query to match tasks by. Check out https://vikunja.io/docs/filters for a full explanation.
        - `filter_include_nulls` boolean — If set to true, the result will also include null values
        - `order_by` string[] — The query parameter to order the items by. This can be either asc or desc, with asc being the default.
        - `s` string
        - `sort_by` string[] — The query parameter to sort by. This is for ex. done, priority, etc.
      - `id` integer — The unique numeric id of this view
      - `position` number — The position of this view in the list. The list of all views will be sorted by this parameter.
      - `project_id` integer — The project this view belongs to
      - `title` string — The title of this view
      - `updated` string — A timestamp when this view was updated. You cannot change this value.
      - `view_kind` 'list' | 'gantt' | 'table' | 'kanban' — The kind of this view. Can be `list`, `gantt`, `table` or `kanban`.
  - `parent_project_id` integer — The target parent project

## Response `201`

The created project.

- ModelsProjectDuplicate
  - `duplicate_shares` boolean — Whether to copy the project's shares to the duplicate
  - `duplicated_project` ModelsProject
    - `background_blur_hash` string — Contains a very small version of the project background to use as a blurry preview until the actual background is loaded. Check out https://blurha.sh/ to learn how it works.
    - `background_information` unknown
    - `created` string — A timestamp when this project was created. You cannot change this value.
    - `description` string — The description of the project.
    - `hex_color` string — The hex color of this project
    - `id` integer — The unique, numeric id of this project.
    - `identifier` string — The unique project short identifier. Used to build task identifiers.
    - `is_archived` boolean — Whether a project is archived.
    - `is_favorite` boolean — True if a project is a favorite. Favorite projects show up in a separate parent project. This value depends on the user making the call to the api.
    - `max_permission` 0 | 1 | 2
    - `owner` UserUser
      - `bot_owner_id` integer — BotOwnerID is the ID of the owning (human) user if this user is a bot. A non-zero value means this user is a bot and cannot authenticate via password.
      - `created` string — A timestamp when this task was created. You cannot change this value.
      - `email` string — The user's email address.
      - `id` integer — The unique, numeric id of this user.
      - `name` string — The full name of the user.
      - `updated` string — A timestamp when this task was last updated. You cannot change this value.
      - `username` string — The username of the user. Is always unique.
    - `parent_project_id` integer
    - `position` number — The position this project has when querying all projects. See the tasks.position property on how to use this.
    - `subscription` ModelsSubscription
      - `created` string — A timestamp when this subscription was created. You cannot change this value.
      - `entity` integer
      - `entity_id` integer — The id of the entity to subscribe to.
      - `id` integer — The numeric ID of the subscription
    - `title` string — The title of the project. You'll see this in the overview.
    - `updated` string — A timestamp when this project was last updated. You cannot change this value.
    - `views` ModelsProjectView[]
      - `bucket_configuration` ModelsProjectViewBucketConfiguration[] — When the bucket configuration mode is not `manual`, this field holds the options of that configuration.
        - `filter` ModelsTaskCollection
          - `filter` string — The filter query to match tasks by. Check out https://vikunja.io/docs/filters for a full explanation.
          - `filter_include_nulls` boolean — If set to true, the result will also include null values
          - `order_by` string[] — The query parameter to order the items by. This can be either asc or desc, with asc being the default.
          - `s` string
          - `sort_by` string[] — The query parameter to sort by. This is for ex. done, priority, etc.
        - `title` string
      - `bucket_configuration_mode` 'none' | 'manual' | 'filter' — The bucket configuration mode. Can be `none`, `manual` or `filter`. `manual` allows to move tasks between buckets as you normally would. `filter` creates buckets based on a filter for each bucket.
      - `created` string — A timestamp when this reaction was created. You cannot change this value.
      - `default_bucket_id` integer — The ID of the bucket where new tasks without a bucket are added to. By default, this is the leftmost bucket in a view.
      - `done_bucket_id` integer — If tasks are moved to the done bucket, they are marked as done. If they are marked as done individually, they are moved into the done bucket.
      - `filter` ModelsTaskCollection
        - `filter` string — The filter query to match tasks by. Check out https://vikunja.io/docs/filters for a full explanation.
        - `filter_include_nulls` boolean — If set to true, the result will also include null values
        - `order_by` string[] — The query parameter to order the items by. This can be either asc or desc, with asc being the default.
        - `s` string
        - `sort_by` string[] — The query parameter to sort by. This is for ex. done, priority, etc.
      - `id` integer — The unique numeric id of this view
      - `position` number — The position of this view in the list. The list of all views will be sorted by this parameter.
      - `project_id` integer — The project this view belongs to
      - `title` string — The title of this view
      - `updated` string — A timestamp when this view was updated. You cannot change this value.
      - `view_kind` 'list' | 'gantt' | 'table' | 'kanban' — The kind of this view. Can be `list`, `gantt`, `table` or `kanban`.
  - `parent_project_id` integer — The target parent project

## Other responses

- `400` — Invalid project duplicate object provided.
- `403` — The user does not have access to the project or its parent.
- `500` — Internal error

---

[API](https://skmtc.net/go-vikunja/apis/vikunja-api.md) · [All operations](https://skmtc.net/go-vikunja/apis/vikunja-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/go-vikunja/vikunja-api/versions/feb3f68bbdf1/schema)
