Checklist Items

Add, edit, and delete checklist items on a record, manage assignees, and set start and due dates.


Checklist items are the individual to-dos inside a checklist. Each one can be assigned to users, scheduled with start and due dates, and marked complete. In the API they are ChecklistItem objects, attached to a Checklist, which in turn belongs to a record (Record).

This page covers the five mutations that operate on checklist items:

To create the parent checklist first, see Create a Checklist. To find items across your whole organization, use the checklistItems query.

Authentication

All requests go to https://api.blue.app/graphql and authenticate with your personal access token headers. Headers are case-insensitive; the canonical casing is shown below.

curl https://api.blue.app/graphql \
  -H "blue-token-id: YOUR_TOKEN_ID" \
  -H "blue-token-secret: YOUR_TOKEN_SECRET" \
  -H "blue-org-id: YOUR_ORG_ID" \
  -H "Content-Type: application/json" \
  -d '{"query": "..."}'

blue-org-id accepts either the organization ID or its slug. See Authentication for how to create tokens.

Create a checklist item

Use the createChecklistItem mutation to add a new item to an existing checklist. The item starts incomplete and unassigned; assign users and set dates with the dedicated mutations below.

Request

mutation CreateChecklistItem {
  createChecklistItem(input: { checklistId: "list_123", title: "Write unit tests", position: 1 }) {
    id
    title
    position
    done
  }
}

Parameters

CreateChecklistItemInput

ParameterTypeRequiredDescription
checklistIdString!YesID of the checklist to add the item to.
titleString!YesItem title. HTML is stripped and stored as plain text (see Title handling).
positionFloat!YesPosition of the item within the checklist, used for ordering.

Response

{
  "data": {
    "createChecklistItem": {
      "id": "clm4n8qwx000008l0g4oxdqn7",
      "title": "Write unit tests",
      "position": 1,
      "done": false
    }
  }
}

Returns the created ChecklistItem. See ChecklistItem fields for the full selection set.

Edit a checklist item

Use the editChecklistItem mutation to update an item’s title, position, or completion status, or to move it to a different checklist. Every field except checklistItemId is optional; omitted fields are left unchanged.

Request

Mark an item complete:

mutation MarkItemDone {
  editChecklistItem(input: { checklistItemId: "todo_123", done: true }) {
    id
    title
    done
  }
}

Parameters

EditChecklistItemInput

ParameterTypeRequiredDescription
checklistItemIdString!YesID of the checklist item to edit.
checklistIdStringNoID of a different checklist to move this item into.
titleStringNoUpdated title. HTML is stripped and stored as plain text.
positionFloatNoUpdated position within the checklist.
doneBooleanNotrue to mark complete, false to mark incomplete.

Response

{
  "data": {
    "editChecklistItem": {
      "id": "clm4n8qwx000008l0g4oxdqn7",
      "title": "Write unit tests",
      "done": true
    }
  }
}

Returns the updated ChecklistItem.

Full example

Move an item to another checklist and update its title and position in one call:

mutation EditChecklistItem {
  editChecklistItem(
    input: {
      checklistItemId: "todo_123"
      checklistId: "list_456"
      title: "Updated task description"
      position: 2
      done: false
    }
  ) {
    id
    title
    position
    done
    checklist {
      id
      title
    }
    users {
      id
      fullName
    }
  }
}

Toggling done and changing the title or moving the item fire distinct activity actions: a completion change records MARK_CHECKLIST_ITEM_AS_DONE / MARK_CHECKLIST_ITEM_AS_UNDONE, while a title change records UPDATE_CHECKLIST_ITEM. A completion change also triggers any matching automation (CHECKLIST_ITEM_MARKED_AS_DONE / CHECKLIST_ITEM_MARKED_AS_UNDONE).

Delete a checklist item

Use the deleteChecklistItem mutation to permanently remove an item. This is irreversible.

Request

mutation DeleteChecklistItem {
  deleteChecklistItem(id: "todo_123")
}

Parameters

ParameterTypeRequiredDescription
idString!YesID of the checklist item to delete.

Response

Returns Boolean!true when the item is deleted.

{
  "data": {
    "deleteChecklistItem": true
  }
}

Set assignees

Use the setChecklistItemAssignees mutation to set the complete list of users assigned to an item. This is a replace operation: pass every assignee you want each time. Users present in the existing assignment but absent from assigneeIds are unassigned; new IDs are added.

Request

mutation AssignChecklistItem {
  setChecklistItemAssignees(
    input: { checklistItemId: "todo_123", assigneeIds: ["user_123", "user_456"] }
  )
}

To remove all assignees, pass an empty array:

mutation UnassignAllFromItem {
  setChecklistItemAssignees(input: { checklistItemId: "todo_123", assigneeIds: [] })
}

Parameters

SetChecklistItemAssigneesInput

ParameterTypeRequiredDescription
checklistItemIdString!YesID of the checklist item.
assigneeIds[String!]!YesThe full set of user IDs to assign. Pass [] to clear all assignees.

Response

Returns Boolean!true when assignees are updated.

{
  "data": {
    "setChecklistItemAssignees": true
  }
}

Only users who are members of the record’s workspace (and your organization) can be assigned; IDs that don’t meet both conditions are silently skipped. Newly assigned users receive an email and push notification.

Set the due date

Use the updateChecklistItemDueDate mutation to set or clear an item’s start and due dates. Setting a due date schedules an overdue notification for the item’s assignees.

Request

mutation SetItemDueDate {
  updateChecklistItemDueDate(
    input: { checklistItemId: "todo_123", duedAt: "2026-03-15T17:00:00Z" }
  ) {
    id
    title
    startedAt
    duedAt
  }
}

Parameters

UpdateChecklistItemDueDateInput

ParameterTypeRequiredDescription
checklistItemIdString!YesID of the checklist item.
startedAtDateTimeNoStart date/time (ISO 8601). Pass null to clear.
duedAtDateTimeNoDue date/time (ISO 8601). Pass null to clear.
timezoneStringNoIANA timezone used to interpret startedAt/duedAt. Only affects inference when granularity is omitted.
granularityDateGranularityNoALL_DAY or TIMED. See All-day vs. timed dates. Omit to infer from the values sent.

Response

{
  "data": {
    "updateChecklistItemDueDate": {
      "id": "clm4n8qwx000008l0g4oxdqn7",
      "title": "Write unit tests",
      "startedAt": null,
      "duedAt": "2026-03-15T17:00:00Z"
    }
  }
}

Returns the updated ChecklistItem.

Full example

Set a start/due window, then later clear both dates by passing null:

mutation SetItemDateRange {
  updateChecklistItemDueDate(
    input: {
      checklistItemId: "todo_123"
      startedAt: "2026-03-10T09:00:00Z"
      duedAt: "2026-03-15T17:00:00Z"
    }
  ) {
    id
    startedAt
    duedAt
    users {
      id
      fullName
    }
  }
}

mutation RemoveItemDueDate {
  updateChecklistItemDueDate(
    input: { checklistItemId: "todo_123", startedAt: null, duedAt: null }
  ) {
    id
    startedAt
    duedAt
  }
}

Clearing or changing the dates fires the matching webhook event: TODO_CHECKLIST_ITEM_DUE_DATE_ADDED when an item previously had no dates, TODO_CHECKLIST_ITEM_DUE_DATE_REMOVED when both fields become null, otherwise TODO_CHECKLIST_ITEM_DUE_DATE_UPDATED.

ChecklistItem fields

createChecklistItem, editChecklistItem, and updateChecklistItemDueDate return a ChecklistItem. (deleteChecklistItem and setChecklistItemAssignees return Boolean! — see their Response sections.) Select any of these fields:

FieldTypeDescription
idID!Unique identifier for the checklist item.
titleString!Item title.
positionFloat!Position within the checklist.
doneBoolean!Whether the item is marked complete.
startedAtDateTimeStart date/time, if set.
duedAtDateTimeDue date/time, if set.
dueDateGranularityDateGranularityALL_DAY or TIMED — see All-day vs. timed dates.
createdAtDateTime!When the item was created.
updatedAtDateTime!When the item was last updated.
checklistChecklist!The parent checklist (which exposes its own todo).
createdByUserThe user who created the item. Nullable — null-guard it before reading subfields.
users[User!]!Users assigned to this item.
createdBy nullability

ChecklistItem.createdBy is nullable (User), so it can come back null for items created by deleted users or by automations. This differs from Checklist.createdBy, which is non-null (User!). Always null-check createdBy on a checklist item before selecting fullName or id.

Errors

CodeWhen
FORBIDDENThe caller has VIEW_ONLY or COMMENT_ONLY access, the workspace is archived, or a custom role lacks the required permission.
CHECKLIST_NOT_FOUNDA checklistId (on createChecklistItem, or the move target on editChecklistItem) doesn’t exist or isn’t accessible.
CHECKLIST_ITEM_NOT_FOUNDThe checklistItemId / id doesn’t exist or isn’t accessible.
{
  "errors": [
    {
      "message": "Checklist item was not found.",
      "extensions": { "code": "CHECKLIST_ITEM_NOT_FOUND" }
    }
  ]
}

Permissions

All five mutations require the same access level on the record’s workspace. Read-only roles are denied.

Access levelCan manage checklist items
OWNERYes
ADMINYes
MEMBERYes
CLIENTYes
COMMENT_ONLYNo
VIEW_ONLYNo

Title handling

Titles passed to createChecklistItem and editChecklistItem are sanitized server-side: HTML tags are stripped and only the plain-text content is stored. Send plain text to avoid surprises.

  • Create a Checklist — create the parent checklist and query items across the organization.
  • Manage Checklists — rename, reorder, and delete checklists.
  • Assignees — assign users to records (not just checklist items).
  • Webhooks — subscribe to checklist item events.