Tasks

CRM tasks — the Task object, linking a task to an order or contact, due dates and overdue reminders, and every endpoint for listing, creating, updating and deleting tasks.

A task is a to-do for a project member: call a customer back, send a quote, check a delivery. A task has an assignee (user_uuid), an optional due date, and can be linked to an order or a contact. Creating and completing a linked task is recorded in that order's or contact's journal.

A task is either open or done. When an open task passes its due date, the assignee is notified and the project's task_overdue automations run once. If the due date is moved later, the reminder can fire again.

Field types follow the field notation.

Access

Every endpoint on this page requires both the projects and tasks OAuth scopes. The user must be a member of the project, and the owner's subscription must be active. Otherwise the endpoint returns 404 RES_NOT_FOUND. The project owner bypasses permission checks.

Permission Grants
can_view_own_tasks Read tasks assigned to the user (user_uuid)
can_view_role_tasks Read tasks assigned to members with the same role as the user
can_view_all_tasks Read every task in the project
can_edit_tasks Create, update and delete tasks

Every endpoint that addresses a task, including updating and deleting it, sees only the tasks within the user's widest view permission. A task outside that range behaves as if it does not exist (404 RES_NOT_FOUND).

The assignee (user_uuid) must be a member of the project; otherwise the request fails with 400 RES_NOT_FOUND. On update it is checked only when it changes.

Task Object

Task Structure

Field Type Description
uuid uuid Task ID
title string Title, 1–255 characters
description ?string Details, up to 5000 characters
status string open or done
due_date ?ISO8601 datetime Deadline
user_uuid uuid Assignee
user_name string Assignee's full name
created_by ?uuid Who created the task; null if an automation created it
entity_type ?string order or contact if the task is linked
entity_uuid ?uuid ID of the linked order or contact
entity_name ?string The linked order's serial or the contact's name; null if the entity was deleted
completion_note ?string Result of the work, up to 5000 characters
completed_at ?ISO8601 datetime When the task was marked done; cleared if it is reopened
created_at ISO8601 datetime When the task was created
updated_at ISO8601 datetime When the task was last changed

Example Task

{
  "uuid": "0199a7c1-4d5e-7f60-8172-839405a1b2c3",
  "title": "Send the revised quote",
  "description": "Customer wants a price with triple glazing.",
  "status": "open",
  "due_date": "2026-10-03T15:00:00.000Z",
  "user_uuid": "0198e7aa-91f0-7c22-a4d1-0f9e8d7c6b5a",
  "user_name": "Anna Petrova",
  "created_by": "0198e7aa-91f0-7c22-a4d1-0f9e8d7c6b5a",
  "entity_type": "order",
  "entity_uuid": "0199a4e2-7b1c-7c3e-9d2a-5f4e8b1c0a11",
  "entity_name": "26274003",
  "completion_note": null,
  "completed_at": null,
  "created_at": "2026-10-01T09:45:00.000Z",
  "updated_at": "2026-10-01T09:45:00.000Z"
}

Linking a task

entity_type and entity_uuid go together. Send both to link a task, send both as null to unlink it, or omit both. The order or contact must exist in this project; otherwise the request fails with 400 TASK_ENTITY_NOT_FOUND.

What a link records in the entity's journal:

Event Order journal Contact journal
Task created task_created task_created
Task moved from open to done task_completed task_completed
completion_note set or changed to a non-empty value note with the note text, also visible on the order's contact note

The task_created and task_completed payload is {task_uuid, title, due_date}.

List Tasks

GET /api/v1/projects/{project.uuid}/tasks

Returns the tasks visible to the user. Tasks are sorted by due date, soonest first, with undated tasks last; ties go to the newest task.

Requires one of can_view_own_tasks, can_view_role_tasks, can_view_all_tasks.

Query String Params

Field Type Description
page? integer Page number, from 1. Default 1
limit? integer Page size, 1–100. Default 50
filters? string A URL-encoded JSON array of filter objects. Invalid JSON is ignored

Task Filter Structure

Each filter is {"field": ..., "value": ...}. Filters with the same field combine with OR; different fields combine with AND. Filters with an empty value are skipped.

field value Matches
title string Title contains the value, case-insensitive
member uuid Assignee
status string open or done
entity_type string order or contact
entity_uuid uuid Linked order or contact
overdue any non-empty Open tasks whose due date has passed
due_from date Due on or after this date, e.g. 2026-10-01
due_to date Due on or before this date, the whole day included

Example Request

All open tasks of one order:

[
  {
    "field": "entity_uuid",
    "value": "0199a4e2-7b1c-7c3e-9d2a-5f4e8b1c0a11"
  },
  {
    "field": "status",
    "value": "open"
  }
]
GET /api/v1/projects/0198e7a0-0000-7000-8000-000000000001/tasks?filters=%5B%7B%22field%22%3A%22entity_uuid%22%2C%22value%22%3A%220199a4e2-7b1c-7c3e-9d2a-5f4e8b1c0a11%22%7D%2C%7B%22field%22%3A%22status%22%2C%22value%22%3A%22open%22%7D%5D
Authorization: Bearer <access_token>

Response

200 OK — an array of task objects.

Errors

Status Code When
403 AUTH_INSUFFICIENT_SCOPE The token lacks projects or tasks
403 AUTH_NO_PROJECT_ACCESS The user's role has no task view permission
404 RES_NOT_FOUND The project does not exist or is not accessible

Get Task

GET /api/v1/projects/{project.uuid}/tasks/{task.uuid}

Returns a single task.

Requires one of can_view_own_tasks, can_view_role_tasks, can_view_all_tasks.

Errors

Status Code When
403 AUTH_INSUFFICIENT_SCOPE The token lacks projects or tasks
403 AUTH_NO_PROJECT_ACCESS The user's role has no task view permission
404 RES_NOT_FOUND The project or task does not exist, or the task is outside the user's visibility

Create Task

POST /api/v1/projects/{project.uuid}/tasks

Creates an open task. If it is linked, a task_created entry is written to the entity's journal.

Requires can_edit_tasks.

JSON Params

Field Type Description
title string 1–255 characters, trimmed
description? ?string Up to 5000 characters
due_date? ?ISO8601 datetime Deadline in UTC, ending in Z, e.g. 2026-10-03T15:00:00Z. Offsets like +03:00 are rejected
user_uuid? uuid Assignee. Default: the authenticated user
entity_type? ?string order or contact, see Linking a task
entity_uuid? ?uuid ID of the order or contact

Example Request

{
  "title": "Send the revised quote",
  "due_date": "2026-10-03T15:00:00Z",
  "entity_type": "order",
  "entity_uuid": "0199a4e2-7b1c-7c3e-9d2a-5f4e8b1c0a11"
}

Response

201 Created

{
  "uuid": "0199a7c1-4d5e-7f60-8172-839405a1b2c3"
}

Errors

Status Code When
400 REQ_VALIDATION_FAILED The body does not match the schema
400 TASK_ENTITY_NOT_FOUND Only one of entity_type/entity_uuid is set, or the entity does not exist in this project
403 AUTH_INSUFFICIENT_SCOPE The token lacks projects or tasks
403 AUTH_NO_PROJECT_ACCESS The user's role lacks can_edit_tasks
404 RES_NOT_FOUND The project does not exist or is not accessible

Modify Task

PATCH /api/v1/projects/{project.uuid}/tasks/{task.uuid}

Updates only the fields you send.

  • Setting status to done sets completed_at and, for a linked task, writes task_completed to the journal. Setting it back to open clears completed_at.
  • Changing due_date re-arms the overdue and due-soon reminders.
  • Setting completion_note to a new non-empty value copies it into the linked entity's journal as a note.

Requires can_edit_tasks.

JSON Params

All fields are optional, but at least one must be present.

Field Type Description
title? string 1–255 characters
description? ?string Up to 5000 characters
status? string open or done
due_date? ?ISO8601 datetime Deadline; null removes it
user_uuid? uuid Assignee
entity_type? ?string See Linking a task
entity_uuid? ?uuid See Linking a task
completion_note? ?string Result of the work, up to 5000 characters

Example Request

{
  "status": "done",
  "completion_note": "Quote sent, customer will reply by Monday."
}

Response

204 No Content

Errors

Status Code When
400 REQ_VALIDATION_FAILED The body does not match the schema
400 REQ_NO_DATA_PROVIDED The body has no fields
400 TASK_ENTITY_NOT_FOUND The resulting link is incomplete or points to a missing entity
403 AUTH_INSUFFICIENT_SCOPE The token lacks projects or tasks
403 AUTH_NO_PROJECT_ACCESS The user's role lacks can_edit_tasks
404 RES_NOT_FOUND The project or task does not exist, or the task is outside the user's visibility

Replace Task

PUT /api/v1/projects/{project.uuid}/tasks/{task.uuid}

Same as Modify Task, but every field in the table must be present. Nullable fields accept null.

Requires can_edit_tasks.

Response

204 No Content

Errors

Same as Modify Task, except REQ_NO_DATA_PROVIDED.

Delete Task

DELETE /api/v1/projects/{project.uuid}/tasks/{task.uuid}

Permanently deletes the task. Journal entries it has already produced stay.

Requires can_edit_tasks.

Response

204 No Content

Errors

Status Code When
403 AUTH_INSUFFICIENT_SCOPE The token lacks projects or tasks
403 AUTH_NO_PROJECT_ACCESS The user's role lacks can_edit_tasks
404 RES_NOT_FOUND The project or task does not exist, or the task is outside the user's visibility