Skip to content

Tasks ​

Tasks are to-dos. You can link a task to a contact, a deal or a company.

Permissions: contacts:read and contacts:write.

The task object ​

json
{
  "id": 30,
  "title": "Send the proposal",
  "description": null,
  "due_date": "2026-04-10T09:00:00.000000Z",
  "due_has_time": true,
  "due_day": "2026-04-10",
  "due_state": "overdue",
  "due_timezone": "UTC",
  "priority": "high",
  "status": "todo",
  "is_overdue": false,
  "completed_at": null,
  "contact_id": 7,
  "deal_id": 15,
  "company_id": 3,
  "assigned_to": 1,
  "sent_email_id": null,
  "campaign_id": null,
  "created_at": "...",
  "updated_at": "..."
}
FieldValues
prioritylow, medium (default), high
statustodo (default), in_progress, done
due_has_timefalse: the due date is a whole day (due_day); true: a precise time (due_date)
due_stateoverdue, today, upcoming, none (no due date) or done, in due_timezone (the app timezone)
is_overduetrue once a whole day is over, or once a precise time has passed. A done task is never overdue
sent_email_id, campaign_idThe reply and campaign the task was created from, when recorded

Endpoints ​

MethodPathDescription
GET/crm/tasksList tasks (paginated)
POST/crm/tasksCreate a task
GET/crm/tasks/{id}Get a task
PUT/crm/tasks/{id}Update a task (partial)
DELETE/crm/tasks/{id}Delete a task. Returns 204.
POST/crm/tasks/{id}/completeMark the task as done

List tasks ​

See CRM listings for search, workspace-scoped filters, stable sorting, pagination, and a curl example.

Create a task ​

FieldRules
titleRequired. Max 255 characters
descriptionText
due_date2026-04-10: a whole day, overdue only once that day is over. A datetime (2026-04-10T09:00:00Z): that precise time. null: no due date
priority, statusSee the table above
assigned_toThe user ID of a workspace member
contact_id, deal_id, company_idRecords in your workspace

201: { "data": Task }

PUT is partial: a field that is not sent is kept (updating the title never moves the due date nor removes its time). Setting status to done records completed_at; on a task already done, the date is kept. Setting any other status clears it. Completing a task never handles a reply nor wins a deal.

Complete ​

POST /crm/tasks/{id}/complete

200: { "message": "Task completed", "data": Task }. Completing a task already done changes nothing: its completed_at is kept.

API v1.0