Skip to main content
A task is follow-up work for your team, such as a callback, a refund request, or a damage claim. The AI creates a task from a conversation or a website form submission when a person needs to act. Task IDs name their source: conversation-184532 came from conversation 184532, and form-submission-45 came from form submission 45.
You can search tasks, read one, change its status or assignee, and add internal notes. To get each new task the moment it is created, use the task.created webhook.

Search tasks

Try it in the playground. Returns tasks, newest first.
string
Matches the title, the description, or the customer’s name, phone number, or email. Up to 100 characters.
string
default:"all"
One of:
  • not_done: open, in_progress, and on_hold.
  • open, in_progress, on_hold, or done: that status only.
  • all: every task.
boolean
true returns only tasks assigned to the key’s owner.
string
Created within this window: today, yesterday, 7d, 14d, 30d, 90d, 365d, mtd, or ytd. Every window starts at midnight in your team’s timezone. See time ranges. Leave it out for all time.
integer
default:"10"
Results per page, 1 to 50.
integer
default:"1"
Page number. Use next_page from the previous response.

Task fields

string
The task ID, such as conversation-184532 or form-submission-45.
string
The task’s conversation or form submission in the dashboard.
string | null
A short title. Up to 200 characters.
string
open, in_progress, on_hold, or done. Search and updates take the same values.
object | null
The assigned team member’s id and name, or null when nobody is assigned. Send the id as assigned_to or expected_assigned_to in an update. It matches members[].id in GET /account.
string | null
The category key of the task’s conversation, such as cancellation, from the same list as a conversation’s category. A form task has form.
string
low, medium, high, or urgent, or normal when none was set.
string | null
When the source conversation started or the form was submitted, as an ISO 8601 UTC timestamp. Despite the name, it is not the time the AI created the task, which comes later. Search with range uses this time too.
object
The customer’s name, phone, and email. A conversation task takes them from the conversation’s contact, and a form task from the form submission. Any of them can be null.
object | null
The source conversation: id, url, channel, and phone_line (id, name, phone_number). null for form tasks.
object | null
The source form’s title. null for conversation tasks.

Get a task

Try it in the playground. Returns one task with every task field, plus its full description.
string
required
A task ID from search, such as conversation-184532.
string | null
The full task description. Up to 5,000 characters.
A task ID that does not exist, or that the key’s owner cannot see, returns 404. So does a task on a repeat conversation that was merged into an earlier one. Its error names the task to use instead, such as This conversation was merged into conversation-184519. Use that task.

Update a task

Try it in the playground. Changes a task’s status, its assignee, or both. It works like making the same change in the dashboard. The assignee gets the usual notification, and the task’s activity shows the change as made by the person who created the key.
string
required
A task ID from search, such as conversation-184532.
string
open, in_progress, on_hold, or done.
integer | null
A team member’s id, from a task’s assignee.id or members[].id in GET /account, or null to unassign.
string
Optional. open, in_progress, on_hold, or done. Apply the change only if the task still has this status. Otherwise the API returns 409 and changes nothing. A task that never had a status counts as open. Use it so a sync does not overwrite a change someone just made in the dashboard.
integer | null
Optional. Apply the change only if the task still has this assignee. Use null to require that nobody is assigned.
Send status, assigned_to, or both. Any other key in the body returns 400.
Setting status to in_progress, on_hold, or done without assigned_to can assign the task to the person who created the key, the same as a click in the dashboard. That happens when the person has Self assign turned on in the team’s member settings, which is the default. To keep the current assignee, send their ID in assigned_to.
This example marks Dana Ruiz’s task done for Priya Shah (9034 in the /account example), but only if nobody changed its status since your sync last read it:
The response is the updated task, in the same shape as Get a task. Here it has "status": "done" and "assignee": { "id": 9034, "name": "Priya Shah" }. The change can take the task out of what the key can see. For example, a manager who sees only some phone lines reassigns a task they could see only because it was theirs. The change is still saved, and the body is {"id": "conversation-184532", "status": "open", "assignee": {"id": 9040, "name": "Jordan Lee"}, "visible": false}. If your team requires a note before a task can be marked done, add a note first, then send "status": "done". Without the note, the update returns 422 with This task has unmet completion requirements.

Add a note

Try it in the playground. Adds an internal note to a conversation task, the same as typing a note on the task in the dashboard. Only your team sees the note. Answering Agent does not contact the customer. The note shows in the task’s activity with the person who created the key as its author, and the audit trail records that it came through the API. A note counts as work by a person on the conversation, the same as a note typed in the dashboard. It never reopens a task that is done.
string
required
A conversation task ID, such as conversation-184532. Form tasks do not take notes, so a form-submission- ID returns 400.
string
required
The note text. 1 to 5,000 characters after leading and trailing spaces are removed. An @mention stays plain text and notifies nobody.
Send only content. Any other key in the body, including task_id, returns 400.
Each request adds a note. If you send the same request twice, for example when you retry after a timeout, the task gets two notes.
This example records that Dana Ruiz’s membership was cancelled:
integer
The note ID.
string
The note text.
object | null
The person who created the key, as id and name. null only when that person has no name on their profile.
string | null
When the note was added, as an ISO 8601 UTC timestamp.