Copy Record
Duplicate a record into any list, choosing exactly which elements carry over.
Use the copyRecord mutation to duplicate an existing record into a target list, choosing exactly which elements (description, due date, checklists, assignees, tags, custom fields, comments) carry over to the copy. Records are Record objects in the API; lists are RecordList objects.
The copy is created in the destination list — which can belong to the same workspace or a different one — and is placed at the bottom of that list. Subtasks (todo actions) are always copied. The mutation returns Boolean!; on failure it throws an error rather than returning false.
Request
mutation CopyRecord {
copyRecord(
input: {
todoId: "todo_123"
todoListId: "list_123"
title: "Copy of Q3 onboarding"
options: [DESCRIPTION, DUE_DATE, CHECKLISTS, ASSIGNEES, TAGS, CUSTOM_FIELDS, COMMENTS]
}
)
}Send these headers with the request. Company and project accept either an ID or a slug, and header names are case-insensitive.
blue-token-id: YOUR_TOKEN_ID
blue-token-secret: YOUR_TOKEN_SECRET
blue-org-id: YOUR_ORG_ID
blue-workspace-id: project_123Parameters
CopyRecordInput
| Parameter | Type | Required | Description |
|---|---|---|---|
todoId | String! | Yes | ID of the record to copy. |
todoListId | String! | Yes | ID of the list to create the copy in. May be in the same workspace or a different one. |
options | [CopyRecordOption!]! | Yes | Which elements to copy from the source record. Pass an empty list [] to copy only the record’s title and subtasks. |
title | String | No | Title for the copy. Defaults to the source record’s title when omitted. |
customFieldIds | [String!] | No | When options includes CUSTOM_FIELDS, restrict the copy to this subset of source custom-field IDs. Omit (or pass null) to copy every custom field. |
CopyRecordOption
Each value in options opts a category of data into the copy. Anything not listed is not copied.
| Value | Description |
|---|---|
DESCRIPTION | The record’s description (text / html). |
DUE_DATE | The due date and its timezone. |
ASSIGNEES | Assigned users. On a cross-workspace copy, assignees are filtered to users who are members of the destination workspace. |
TAGS | Associated tags. |
COMMENTS | Comments and their replies. |
CHECKLISTS | Checklists and their items. |
CUSTOM_FIELDS | Custom field values, including file attachments (duplicated to new storage references). Pair with customFieldIds to copy only specific fields. |
Response
{
"data": {
"copyRecord": true
}
}Returns
| Field | Type | Description |
|---|---|---|
copyRecord | Boolean! | true when the copy succeeds. Failures throw an error instead of returning false. |
Errors
| Code | When |
|---|---|
TODO_NOT_FOUND | todoId does not exist, or you lack OWNER / ADMIN / MEMBER access to its workspace. |
TODO_LIST_NOT_FOUND | todoListId does not exist, or you lack OWNER / ADMIN / MEMBER access to the destination workspace. |
FORBIDDEN | Your role does not permit copying (e.g. VIEW_ONLY / COMMENT_ONLY), or a MEMBER attempted a cross-workspace copy. |
PLAN_LIMIT_REACHED | The destination workspace or organization has reached its record limit for the current plan. |
{
"errors": [
{
"message": "You are not authorized.",
"extensions": {
"code": "FORBIDDEN"
}
}
]
}Permissions
You need edit access to both the source and destination workspaces. The role on the source workspace also governs whether the copy can cross workspaces.
| Role | Same workspace | Cross-workspace |
|---|---|---|
OWNER | Yes | Yes |
ADMIN | Yes | Yes |
MEMBER | Yes | No |
COMMENT_ONLY | No | No |
VIEW_ONLY | No | No |
A MEMBER can only copy within the same workspace; a cross-workspace copy from a MEMBER returns FORBIDDEN. Cross-workspace copies also run any automations configured for records arriving from another workspace.