Copy project
copy_projectCopy a project’s settings and optionally its work packages into a new project to start a release or engagement from a template without rebuilding members, versions, or categories.
Instructions
Copy a project — its settings, and optionally its work packages — into a new one.
Use it to spin a new engagement or release off a template project, which is the only
way to reproduce a project's members, versions, categories and enabled modules in one
call. The request goes through POST /projects/{id}/copy/form first, so a name that
derives a taken identifier comes back as violations naming the attribute instead of
a failed background job.
Copying is ASYNCHRONOUS: OpenProject queues a job and answers immediately. This tool
therefore returns {scheduled: true, job_id, status, message, notes} and NEVER
claims the copy exists — a large project takes minutes. Poll
get_job_status(job_id=...) until status is 'success' (it then reports the new
project) or 'failure'.
Pitfalls: only include_work_packages and notify are exposed; every other copy
flag (members, versions, wiki, boards, file links) keeps this instance's own default,
which the form fills in — so the copy can contain more than the two parameters
suggest. A 403 means the account may not copy this project (it needs the 'copy project'
permission on the template plus the right to create projects). Work packages come
across with their relations, but time entries and comment histories do not.
Cross-references: get_job_status follows the job to completion; list_projects
or get_project confirms the result; create_project makes an empty project
instead; update_project renames the copy afterwards.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| notify | No | Send OpenProject notification emails for everything the copy creates. false (default) keeps a large copy quiet; the copy itself is identical. | |
| new_name | Yes | Display name of the copy, e.g. 'Apollo migration (2027)'. OpenProject derives the copy's URL identifier from it; the derived value is reported by get_job_status once the job succeeds. | |
| id_or_identifier | Yes | Numeric id or URL identifier of the project to copy (the TEMPLATE, not the copy). Both are accepted and come from list_projects or get_project. | |
| include_work_packages | No | Copy the template's work packages too (default). false copies the project shell — members, versions, categories, wiki and the other settings the instance defaults to — without any tickets. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | ||
| job_id | No | ||
| source | Yes | ||
| status | No | ||
| message | No | ||
| project | No | ||
| new_name | Yes | ||
| scheduled | Yes |