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": "..."
}| Field | Values |
|---|---|
priority | low, medium (default), high |
status | todo (default), in_progress, done |
due_has_time | false: the due date is a whole day (due_day); true: a precise time (due_date) |
due_state | overdue, today, upcoming, none (no due date) or done, in due_timezone (the app timezone) |
is_overdue | true once a whole day is over, or once a precise time has passed. A done task is never overdue |
sent_email_id, campaign_id | The reply and campaign the task was created from, when recorded |
Endpoints
| Method | Path | Description |
|---|---|---|
| GET | /crm/tasks | List tasks (paginated) |
| POST | /crm/tasks | Create 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}/complete | Mark the task as done |
List tasks
See CRM listings for search, workspace-scoped filters, stable sorting, pagination, and a curl example.
Create a task
| Field | Rules |
|---|---|
title | Required. Max 255 characters |
description | Text |
due_date | 2026-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, status | See the table above |
assigned_to | The user ID of a workspace member |
contact_id, deal_id, company_id | Records 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}/complete200: { "message": "Task completed", "data": Task }. Completing a task already done changes nothing: its completed_at is kept.