Manage tasks/to-dos in Dalil AI CRM — create, read, update, delete, search, and list task records including title, due date, status, and assignee. Use task-relation to attach tasks to people, companies, or opportunities.
searchInput is a plain String! variable — do NOT pass as an object {query: "...", includedObjectNameSingulars: [...]} (causes type error)
limit must be hardcoded in the query string — do NOT pass as a $limit variable (causes type error)
Returns IDs only — always follow up with REST to fetch full records
Endpoints
Operation
Method
Path
Required Fields
Create
POST
/rest/tasks
title
Get
GET
/rest/tasks/{id}
id (path)
List
GET
/rest/tasks
—
Update
PATCH
/rest/tasks/{id}
id (path)
Delete
DELETE
/rest/tasks/{id}
id (path)
Search by title
POST
/graphql
searchInput
Create Task
Request Body
{"title":"Follow up with client","bodyV2":{"markdown":"Call to discuss the proposal.\nSend updated pricing.","blocknote":"[{\"id\":\"block-1\",\"type\":\"paragraph\",\"props\":{\"textColor\":\"default\",\"backgroundColor\":\"default\",\"textAlignment\":\"left\"},\"content\":[{\"type\":\"text\",\"text\":\"Call to discuss the proposal.\",\"styles\":{}}],\"children\":[]},{\"id\":\"block-2\",\"type\":\"paragraph\",\"props\":{\"textColor\":\"default\",\"backgroundColor\":\"default\",\"textAlignment\":\"left\"},\"content\":[{\"type\":\"text\",\"text\":\"Send updated pricing.\",\"styles\":{}}],\"children\":[]}]"},"status":"TODO","dueAt":"2024-03-15T09:00:00.000Z","assigneeId":"uuid-of-workspace-member"}
{"title":"Follow up with client","bodyV2":{"markdown":"Call to discuss the proposal.\nSend updated pricing.","blocknote":"[{\"id\":\"block-1\",\"type\":\"paragraph\",\"props\":{\"textColor\":\"default\",\"backgroundColor\":\"default\",\"textAlignment\":\"left\"},\"content\":[{\"type\":\"text\",\"text\":\"Call to discuss the proposal.\",\"styles\":{}}],\"children\":[]},{\"id\":\"block-2\",\"type\":\"paragraph\",\"props\":{\"textColor\":\"default\",\"backgroundColor\":\"default\",\"textAlignment\":\"left\"},\"content\":[{\"type\":\"text\",\"text\":\"Send updated pricing.\",\"styles\":{}}],\"children\":[]}]"},"status":"TODO","dueAt":"2024-03-15T09:00:00.000Z","assigneeId":"uuid-of-workspace-member"}
{"title":"Follow up with client","bodyV2":{"markdown":"Call to discuss the proposal.\nSend updated pricing.","blocknote":"[{\"id\":\"block-1\",\"type\":\"paragraph\",\"props\":{\"textColor\":\"default\",\"backgroundColor\":\"default\",\"textAlignment\":\"left\"},\"content\":[{\"type\":\"text\",\"text\":\"Call to discuss the proposal.\",\"styles\":{}}],\"children\":[]},{\"id\":\"block-2\",\"type\":\"paragraph\",\"props\":{\"textColor\":\"default\",\"backgroundColor\":\"default\",\"textAlignment\":\"left\"},\"content\":[{\"type\":\"text\",\"text\":\"Send updated pricing.\",\"styles\":{}}],\"children\":[]}]"},"status":"TODO","dueAt":"2024-03-15T09:00:00.000Z","assigneeId":"uuid-of-workspace-member"}
Required Fields
title (string) — Task title
Optional Fields
bodyV2.markdown (string) — Body content as markdown
bodyV2.blocknote (string) — Body content as blocknote JSON
Or use companyId or opportunityId instead of personId.
Filter Examples
# Incomplete tasks
filter=status[neq]:DONE
# Tasks due before a date
filter=dueAt[lt]:2024-04-01T00:00:00.000Z
# Tasks with TODO status
filter=status[eq]:TODO
# Tasks assigned to a specific member
filter=assigneeId[eq]:member-uuid
# Overdue incomplete tasks
filter=status[neq]:DONE,dueAt[lt]
# Incomplete tasks
filter=status[neq]:DONE
# Tasks due before a date
filter=dueAt[lt]:2024-04-01T00:00:00.000Z
# Tasks with TODO status
filter=status[eq]:TODO
# Tasks assigned to a specific member
filter=assigneeId[eq]:member-uuid
# Overdue incomplete tasks
filter=status[neq]:DONE,dueAt[lt]
# Incomplete tasks
filter=status[neq]:DONE
# Tasks due before a date
filter=dueAt[lt]:2024-04-01T00:00:00.000Z
# Tasks with TODO status
filter=status[eq]:TODO
# Tasks assigned to a specific member
filter=assigneeId[eq]:member-uuid
# Overdue incomplete tasks
filter=status[neq]:DONE,dueAt[lt]
Gotchas
Status values are UPPER_SNAKE_CASE — Use TODO, IN_PROGRESS, DONE.
Body uses blocknote JSON format — The bodyV2 field requires both markdown and blocknote. When using the simplified API, send plain body text for auto-conversion.
Tasks are standalone — Not directly linked to records. Use Task Relations (/rest/taskTargets) to associate with people/companies/opportunities.
Due date is ISO 8601 — Use format 2024-03-15T09:00:00.000Z.
Search is title-only — No body content search is available.
GraphQL search returns IDs only — Follow up with GET /rest/tasks?filter=id[in]:[id1,id2] to fetch full records.
URL-encode GET filter params — Filter strings contain special characters ([, ], :) that break manually constructed URLs. Use URL encoding when making requests (e.g., curl -G --data-urlencode "filter=...").