Record Assignees

Set, add, or remove the users assigned to a record, and list the users eligible to be assigned.


Records can be assigned to one or more users. Use the setRecordAssignees, addRecordAssignees, and removeRecordAssignees mutations to change who is assigned, and the assignees query to list the users who are eligible to be assigned in a workspace. Records are Record objects and workspaces are Workspace objects in the API; assignees are User objects.

Pick the mutation by intent:

  • setRecordAssignees — replace the full assignee list. Computes the diff against the current assignees, then adds and removes only what changed. Passing an empty assigneeIds array clears all assignees.
  • addRecordAssignees — add users without touching existing assignees. Users already assigned are skipped.
  • removeRecordAssignees — remove specific users, leaving the rest assigned.
Only set triggers full side effects

setRecordAssignees is the only one that records activity-log entries, sends assignment notifications, fires TODO_ASSIGNEE_ADDED / TODO_ASSIGNEE_REMOVED webhooks, runs assignee automations, and refreshes charts. addRecordAssignees and removeRecordAssignees only change the assignment rows (remove also publishes a real-time record update). If you need notifications, webhooks, or automations to fire, use setRecordAssignees.

Request

Replace the full assignee list on a record:

mutation SetRecordAssignees {
  setRecordAssignees(input: { todoId: "todo_123", assigneeIds: ["user_123", "user_456"] }) {
    success
    operationId
  }
}

Add assignees without removing the existing ones:

mutation AddRecordAssignees {
  addRecordAssignees(input: { todoId: "todo_123", assigneeIds: ["user_789"] }) {
    success
    operationId
  }
}

Remove specific assignees:

mutation RemoveRecordAssignees {
  removeRecordAssignees(input: { todoId: "todo_123", assigneeIds: ["user_456"] }) {
    success
    operationId
  }
}

Parameters

All three mutations take a single input object. The three input types are identical in shape.

SetRecordAssigneesInput

ParameterTypeRequiredDescription
todoIdString!YesID of the record to update.
assigneeIds[String!]!YesThe complete set of user IDs the record should be assigned to. Replaces all current assignees; pass [] to clear all assignees.

AddRecordAssigneesInput

ParameterTypeRequiredDescription
todoIdString!YesID of the record to update.
assigneeIds[String!]!YesUser IDs to add. Users already assigned are skipped.

RemoveRecordAssigneesInput

ParameterTypeRequiredDescription
todoIdString!YesID of the record to update.
assigneeIds[String!]!YesUser IDs to remove. IDs that are not currently assigned are ignored.

Response

Each mutation returns a MutationResult. operationId is null for these operations.

{
  "data": {
    "setRecordAssignees": {
      "success": true,
      "operationId": null
    }
  }
}

Returns

MutationResult

FieldTypeDescription
successBoolean!true when the assignment change was applied.
operationIdStringIdentifier for tracking the operation. null for assignee mutations.

List eligible assignees

Use the assignees query to list the users who can be assigned to records in a workspace — its members. It returns [User!]!.

query GetAssignees {
  assignees(filter: { projectId: "project_123" }) {
    id
    fullName
    email
    image {
      thumbnail
      medium
    }
  }
}
{
  "data": {
    "assignees": [
      {
        "id": "clm4n8qwx000008l0g4oxdqn7",
        "fullName": "Ada Lovelace",
        "email": "ada@example.com",
        "image": {
          "thumbnail": "https://blue.app/files/u/clm4n8qwx-thumb.jpg",
          "medium": "https://blue.app/files/u/clm4n8qwx-medium.jpg"
        }
      }
    ]
  }
}

AssigneesFilterInput

The filter argument is optional. When omitted, the query uses the workspace from the blue-workspace-id request header.

ParameterTypeRequiredDescription
projectIdStringNoWorkspace to list members from. Falls back to the blue-workspace-id header when omitted.
searchStringNoAccepted by the schema but not currently applied server-side — filter the returned list by name or email in your own code.

User fields

assignees returns User objects. Common fields:

FieldTypeDescription
idID!User ID — use this value in assigneeIds.
fullNameString!Display name. firstName and lastName are also available.
emailString!User’s email address.
imageImageAvatar, or null. Select sized URLs: thumbnail, small, medium, large, original.

Errors

These codes apply to all three mutations. The assignees query returns FORBIDDEN when the authenticated user is not a member of the requested workspace.

CodeWhen
TODO_NOT_FOUNDNo record exists for the given todoId.
FORBIDDENThe caller lacks edit access to the record (or, for assignees, is not a member of the workspace).
GRAPHQL_VALIDATION_FAILEDA required argument is missing or malformed (e.g. assigneeIds is null).

Permissions

All three mutations require edit access to the record. VIEW_ONLY and COMMENT_ONLY members are denied; OWNER, ADMIN, MEMBER, and CLIENT are allowed. A custom role with records disabled is also denied, and the workspace must be active (not archived).

RoleCan change assignees
OWNERYes
ADMINYes
MEMBERYes
CLIENTYes
VIEW_ONLYNo
COMMENT_ONLYNo

Notes

  • Duplicates are prevented. Assigning a user who is already assigned is a no-op; there is one assignment row per user per record.
  • No assignment limit. A record can have any number of assignees.
  • Read assignees back on a record via its users field — see List Records.