Tasks
A task is an action item: one line saying what needs doing, an optional due date, and the users or groups responsible for it. A task can be attached to the record it concerns, such as a contact, a deal, or an email thread, and can belong to a milestone. Use this resource to create, assign, and complete tasks, and to list the tasks for a record or a due window.
A task is visible to your key when your key’s user owns it or is assigned to it, directly or through a group, or when the task has no owner. Anyone who can see a task can edit it.
Your team creates tasks directly. Carom’s agents also propose tasks from email and meetings as proposals; accepting one creates the task.
#The task object
Returned by every task endpoint. The nested thread, contact, organization, milestone, file, calendar_event, and deal objects are previews of linked records. Each appears only when the task links to that record and the record is visible to your key; otherwise only the bare id is set.
Attributes
-
idstring · uuidUnique identifier for the task.
-
assignmentstring · nullableWhat needs doing, in one line. This is the task’s title.
-
descriptionstring · nullableLonger notes about the task.
-
assigned_user_idsarray of strings · uuid · nullableUsers responsible for the task. See users.
-
assigned_group_idsarray of strings · uuid · nullableGroups responsible for the task. Every member of an assigned group can see it.
-
user_idstring · uuid · nullableThe user who owns the task. Null for a task with no owner, which everyone in the account can see.
-
duestring · date · nullableThe day the task is due.
-
completed_atstring · date-time · nullableWhen the task was completed. Null while the task is open.
-
milestone_idstring · uuid · nullableThe milestone the task belongs to.
-
contact_idstring · uuid · nullableThe contact the task concerns.
-
organization_idstring · uuid · nullableThe organization the task concerns.
-
deal_idstring · uuid · nullableThe deal the task concerns.
-
thread_idstring · uuid · nullableThe email thread the task came from or concerns.
-
file_idstring · uuid · nullableThe file the task concerns.
-
calendar_event_idstring · uuid · nullableThe meeting the task concerns.
-
space_idstring · uuid · nullableThe space the task was added to directly.
-
ai_generatedboolean · nullableTrue when the task was created by accepting an agent’s proposal.
-
ai_generation_justificationstring · nullableThe evidence the agent quoted when it proposed the task.
-
ai_completedboolean · nullableTrue when an agent marked the task complete.
-
ai_completion_justificationstring · nullableThe agent’s reason for marking the task complete.
-
created_atstring · date-time -
updated_atstring · date-time -
threadobjectPreview of the linked thread.
Show 6 child attributesHide child attributes
idstring · uuidsubjectstring · nullablesnippetstring · nullablehas_attachmentsboolean · nullablefirst_sent_atstring · date-time · nullablelast_sent_atstring · date-time · nullable
-
contactobjectPreview of the linked contact, with an
idandname. -
organizationobjectPreview of the linked organization, with an
idandname. -
milestoneobjectPreview of the milestone. Present only when the milestone is visible to your key.
Show 4 child attributesHide child attributes
idstring · uuidnamestring · nullabledescriptionstring · nullableduestring · date · nullable
-
fileobjectPreview of the linked file.
Show 4 child attributesHide child attributes
idstring · uuidnamestring · nullablefile_namestring · nullableextensionstring · nullable
-
calendar_eventobjectPreview of the linked meeting.
Show 4 child attributesHide child attributes
idstring · uuidnamestring · nullablestart_datetimestring · date-time · nullableWhen a timed event starts. Null for an all-day event.
all_day_start_datestring · date · nullableThe first day of an all-day event. Null for a timed event.
-
dealobjectPreview of the linked deal.
Show 3 child attributesHide child attributes
idstring · uuidnamestringstatusstringopenwonlost
{
"id": "e7f8a9b0-c1d2-4e3f-8a4b-5c6d7e8f9a01",
"assignment": "Send the Q4 renewal proposal",
"description": "Priya asked for pricing on all 14 properties, with the new maintenance tier broken out.",
"assigned_user_ids": ["9c41d2e8-3f6a-4b7c-8d1e-5a2f7b9c0d3e"],
"assigned_group_ids": [],
"user_id": "9c41d2e8-3f6a-4b7c-8d1e-5a2f7b9c0d3e",
"due": "2026-09-12",
"completed_at": null,
"milestone_id": "f3bb9a33-6078-4fbc-9166-a28e5cc0dce7",
"contact_id": "1f3c9a52-7b0e-4d4a-9c1e-2a6f0d8b3e41",
"organization_id": null,
"deal_id": null,
"thread_id": "7548f9d5-2a32-4ed3-8c14-aac4ebe980a2",
"file_id": null,
"calendar_event_id": null,
"space_id": null,
"ai_generated": true,
"ai_generation_justification": "\"Could you send over the renewal numbers before the 15th?\"",
"ai_completed": false,
"ai_completion_justification": null,
"created_at": "2026-09-03T18:52:30.715Z",
"updated_at": "2026-09-03T18:52:30.715Z",
"thread": {
"id": "7548f9d5-2a32-4ed3-8c14-aac4ebe980a2",
"subject": "Renewal for 2027",
"snippet": "Could you send over the renewal numbers before the 15th? I'm out the week after.",
"has_attachments": false,
"first_sent_at": "2026-09-02T15:10:04.167Z",
"last_sent_at": "2026-09-03T17:41:22.518Z"
},
"contact": {
"id": "1f3c9a52-7b0e-4d4a-9c1e-2a6f0d8b3e41",
"name": "Priya Natarajan"
},
"milestone": {
"id": "f3bb9a33-6078-4fbc-9166-a28e5cc0dce7",
"name": "Wildgrove renewal",
"description": "Signed 2027 contract by the end of September.",
"due": "2026-09-30"
}
}
#List tasks
Returns the open tasks visible to your key, 25 per page by default, soonest due first. Tasks with no due date come last. Filter by a linked record, by assignee, by due window, or by a search query, and page through the result with a cursor in either direction.
Query parameters
-
querystringMatch against
assignmentanddescription. Up to 500 characters. -
completedbooleandefaultfalsefalsereturns open tasks;truereturns completed tasks instead. -
slicestringRestrict to tasks linked to one kind of record, or to a due window. Due windows use your key’s user’s time zone; weeks end on Sunday.
latermeans no due date or due after next week.contactsorganizationsemailsfilesoverduetodaytomorrowthis_weeknext_weeklater -
assigned_user_idsstring or array of strings · uuidTasks assigned to any of these users. Pass one id, or repeat the parameter as
assigned_user_ids[]. At most 50. -
contact_idstring · uuidTasks attached to this contact.
-
organization_idstring · uuidTasks attached to this organization.
-
deal_idstring · uuidTasks attached to this deal.
-
calendar_event_idstring · uuidTasks attached to this meeting.
-
space_idstring · uuidTasks in this space: tasks added to it directly, tasks carrying one of its tags, and tasks attached to its contacts or organizations.
-
limitintegerdefault25Tasks per page, from 1 to 100. Values outside that range are clamped.
-
next_cursorstringOpaque token from the previous page’s
page_info.next_cursor. Omit to start from the beginning. See Pagination. -
prev_cursorstringOpaque token from
page_info.prev_cursor, to fetch the page before this one. See Pagination.
Returns
-
collectionobjectA page of tasks and the cursors around it.
Show 4 child attributesHide child attributes
-
recordsarray of tasksUp to
limittasks in due order. -
page_infopage infoWhere this page sits in the full list. Pass
next_cursorback to fetch the next page whilehas_more_afteris true. -
slice_keystring · nullableThe
slicethat was applied. -
filtersobject · nullableThe filters that were applied, echoed back. Always includes
completed.
-
Errors
- 400
invalid_cursorThe cursor is unreadable, or came from another list or sort. - 400
invalid_requestA parameter is malformed, for example an id that isn’t a UUID or more than 50 assignee ids. - 404
record_not_foundAcontact_id,organization_id,deal_id,calendar_event_id, orspace_iddoesn’t match a record visible to your key.
curl "https://api.carom.io/tasks?contact_id=1f3c9a52-7b0e-4d4a-9c1e-2a6f0d8b3e41&limit=2" \
-H "Authorization: Bearer $CAROM_API_KEY"
{
"collection": {
"slice_key": null,
"filters": {
"completed": false,
"contact_id": "1f3c9a52-7b0e-4d4a-9c1e-2a6f0d8b3e41"
},
"page_info": {
"limit": 2,
"has_more_before": false,
"has_more_after": true,
"prev_cursor": null,
"next_cursor": "q7Rm2XkV9pLc4TnW8aHs"
},
"records": [
{
"id": "e7f8a9b0-c1d2-4e3f-8a4b-5c6d7e8f9a01",
"assignment": "Send the Q4 renewal proposal",
"due": "2026-09-12",
"completed_at": null,
…
},
{
"id": "0361c1d0-a72d-43bc-86c1-26537f0236ec",
"assignment": "Confirm headcount for the 2027 contract",
"due": "2026-09-18",
"completed_at": null,
…
}
]
}
}
#Create a task
Creates a task owned by your key’s user. Assign it to users or groups, give it a due date, and attach it to the records it concerns. Assignees other than your key’s user receive a notification.
Every record id you send must be a record visible to your key, or the request fails with invalid_request and nothing is created. Assignee ids outside your account are dropped; assigned_user_ids and assigned_group_ids in the response show which were kept.
Request body application/json
-
taskobjectrequiredShow 15 child attributesHide child attributes
-
assignmentstringrequiredWhat needs doing, in one line.
-
descriptionstring -
assigned_user_idsarray of strings · uuid -
assigned_group_idsarray of strings · uuid -
duestring · dateAs
YYYY-MM-DD. -
due_shortcutstringSet
duerelative to the current date in your key’s user’s time zone:this_weekis the coming Sunday andnext_weekthe Sunday after. Any value exceptdateoverridesdue;dateusesdueas sent. Any other value is rejected withinvalid_request.todaytomorrowthis_weeknext_weekdate -
completed_atstring · date-timeRecord a task that is already done.
-
milestone_idstring · uuidThe milestone to add the task to.
-
contact_idstring · uuid -
organization_idstring · uuid -
deal_idstring · uuid -
thread_idstring · uuid -
file_idstring · uuid -
calendar_event_idstring · uuid -
space_idstring · uuid
-
Returns
The new task object, wrapped in task, with status 201.
Errors
- 400
missing_paramsassignmentis missing. - 400
invalid_requestA field failed validation, or a record id isn’t a record visible to your key.error.fieldssays which.
curl https://api.carom.io/tasks \
-H "Authorization: Bearer $CAROM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"task": {
"assignment": "Book the site walk at the Alder Street property",
"due": "2026-09-25",
"assigned_user_ids": ["44c3f6da-393b-4664-9bfa-3c14e76b8cb8"],
"contact_id": "1f3c9a52-7b0e-4d4a-9c1e-2a6f0d8b3e41",
"milestone_id": "f3bb9a33-6078-4fbc-9166-a28e5cc0dce7"
}
}'
{
"task": {
"id": "ffffb36c-42a3-41c2-8962-5577814a9a62",
"assignment": "Book the site walk at the Alder Street property",
"assigned_user_ids": ["44c3f6da-393b-4664-9bfa-3c14e76b8cb8"],
"user_id": "9c41d2e8-3f6a-4b7c-8d1e-5a2f7b9c0d3e",
"due": "2026-09-25",
"completed_at": null,
"contact_id": "1f3c9a52-7b0e-4d4a-9c1e-2a6f0d8b3e41",
"milestone_id": "f3bb9a33-6078-4fbc-9166-a28e5cc0dce7",
"ai_generated": false,
…
}
}
#Retrieve a task
Returns a single task, open or completed, with previews of the records it links to.
Path parameters
-
idstring · uuidrequiredThe task’s id.
Returns
The task object, wrapped in task.
Errors
- 404
record_not_foundNo task with that id is visible to your key.
curl https://api.carom.io/tasks/e7f8a9b0-c1d2-4e3f-8a4b-5c6d7e8f9a01 \
-H "Authorization: Bearer $CAROM_API_KEY"
{
"task": {
"id": "e7f8a9b0-c1d2-4e3f-8a4b-5c6d7e8f9a01",
"assignment": "Send the Q4 renewal proposal",
"due": "2026-09-12",
"completed_at": null,
…
"contact": {
"id": "1f3c9a52-7b0e-4d4a-9c1e-2a6f0d8b3e41",
"name": "Priya Natarajan"
}
}
}
#Update a task
Changes the fields you send and leaves the rest alone. To complete a task, send completed_at. To reopen it, send "completed_at": null or "incomplete": true. Omitting both leaves the completion state as it is. Users and groups newly added to the assignee lists receive a notification.
Path parameters
-
idstring · uuidrequired
Request body application/json
-
taskobjectrequiredAny of the attributes accepted by Create a task, none of them required. Send a record id as
nullto detach the task from that record. A new record id must be a record visible to your key; resending the id the task already links to is accepted even when your key can’t see that record. One more field is accepted.Show 1 child attributeHide child attributes
-
incompletebooleantruereopens the task. Not stored. Sending it with a non-nullcompleted_atis rejected as contradictory.
-
Returns
The updated task object, wrapped in task.
Errors
- 400
invalid_requestA field failed validation, a new record id isn’t a record visible to your key, orincomplete: truecame with a non-nullcompleted_at. Nothing is changed. - 404
record_not_foundNo task with that id is visible to your key.
curl -X PATCH https://api.carom.io/tasks/e7f8a9b0-c1d2-4e3f-8a4b-5c6d7e8f9a01 \
-H "Authorization: Bearer $CAROM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"task": {
"completed_at": "2026-09-11T16:20:00Z"
}
}'
{
"task": {
"id": "e7f8a9b0-c1d2-4e3f-8a4b-5c6d7e8f9a01",
"assignment": "Send the Q4 renewal proposal",
"user_id": "9c41d2e8-3f6a-4b7c-8d1e-5a2f7b9c0d3e",
"due": "2026-09-12",
"completed_at": "2026-09-11T16:20:00.000Z",
"updated_at": "2026-09-11T16:20:03.902Z",
…
}
}
#Delete a task
Permanently deletes a task. Anyone who can see a task can delete it. Pending agent proposals about the task, such as one to mark it complete, expire.
Path parameters
-
idstring · uuidrequired
Returns
An empty response with status 204.
Errors
- 404
record_not_foundNo task with that id is visible to your key.
curl -X DELETE https://api.carom.io/tasks/e7f8a9b0-c1d2-4e3f-8a4b-5c6d7e8f9a01 \
-H "Authorization: Bearer $CAROM_API_KEY"
No content
#Count tasks
Counts the tasks that List tasks would return for the same filters, without fetching them. The count is always exact, so exact is always true and capped always false.
Query parameters
-
query,completed,slice,assigned_user_ids,contact_id,organization_id,deal_id,calendar_event_id,space_idAs on List tasks.
Returns
-
countcountThe number of matching tasks is in
total.
Errors
- 400
invalid_requestA parameter is malformed, as on List tasks. - 404
record_not_foundA record filter doesn’t match a record visible to your key.
curl "https://api.carom.io/tasks/count?slice=overdue" \
-H "Authorization: Bearer $CAROM_API_KEY"
{
"count": {
"total": 6,
"exact": true,
"capped": false,
"cap": null
}
}