Copy Record

Duplicate a record into any list, choosing exactly which elements carry over.


For records in multiple databases, see Database Records for explicit database scope, supported operations, and field-value formats.

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_123

Parameters

CopyRecordInput

ParameterTypeRequiredDescription
todoIdString!YesID of the record to copy.
sourceDatabaseIdIDNoSelect the source database home without changing the destination list.
todoListIdString!YesID of the list to create the copy in. May be in the same workspace or a different one.
options[CopyRecordOption!]!YesWhich elements to copy from the source record. Pass an empty list [] to copy only the record’s title and subtasks.
titleStringNoTitle for the copy. Defaults to the source record’s title when omitted.
customFieldIds[String!]NoWhen 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.

ValueDescription
DESCRIPTIONThe record’s description (text / html).
DUE_DATEThe due date and its timezone.
ASSIGNEESAssigned users. On a cross-workspace copy, assignees are filtered to users who are members of the destination workspace.
TAGSAssociated tags.
COMMENTSComments and their replies.
CHECKLISTSChecklists and their items.
CUSTOM_FIELDSCustom field values, including file attachments (duplicated to new storage references). Pair with customFieldIds to copy only specific fields.

Response

{
  "data": {
    "copyRecord": true
  }
}

Returns

FieldTypeDescription
copyRecordBoolean!true when the copy succeeds. Failures throw an error instead of returning false.

Errors

CodeWhen
TODO_NOT_FOUNDtodoId does not exist, or you lack OWNER / ADMIN / MEMBER access to its workspace.
TODO_LIST_NOT_FOUNDtodoListId does not exist, or you lack OWNER / ADMIN / MEMBER access to the destination workspace.
FORBIDDENYour role does not permit copying (e.g. VIEW_ONLY / COMMENT_ONLY), or a MEMBER attempted a cross-workspace copy.
PLAN_LIMIT_REACHEDThe 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.

RoleSame workspaceCross-workspace
OWNERYesYes
ADMINYesYes
MEMBERYesNo
COMMENT_ONLYNoNo
VIEW_ONLYNoNo

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.