About
A task is one actionable line item — a follow-up call, a document to chase, a step in an onboarding SOP. It has a title, an optional description, a due date, and assignees, and it gets checked off when the work is done. Two things a task is not:- A calendar event. Something with a start time and attendees is an appointment — see the Appointments API.
- A background job. The async jobs that ops like
addContactTagsreturn abulkTaskIdfor live under the Bulk Tasks API, and are unrelated to the CRM tasks on this page.
operationId. If you haven’t set up a key yet, start with the
Developer API Overview.
Operations
Reading tasks (READ scope)
What
listMyTasks returns depends on the key’s roleA MEMBER or ISA key always sees only the key owner’s own tasks, whatever
filters you pass. A team-admin key with no participants filter gets the
org’s feed narrowed to contacts the key owner can access — tasks on
contacts visible only to teammates are silently omitted, so don’t treat that
default as a complete org backlog. To read a specific teammate’s queue, pass
their userIds in participants (from listTeammates, same-org only).Writing tasks (WRITE scope)
Which complete operation to use
listMyTasks tells you: if a task comes back with contact: null, there is no
contactId to pass and completeTask cannot touch it — use completeTaskById.
If it has a contact, use completeTask, which records the completion on that
contact’s timeline as well. completeTaskById refuses a task that has a
contact, so an error there means you want the other operation.Due dates are a local day, not an instant
timezone (PST, MST, CST, EST, …) is the zone the due date’s day is
read in, and it decides which TODAY / OVERDUE bucket the task lands in.
Send the user’s own zone, and for a day-level request (“follow up Friday”)
pick an end-of-business time in that zone rather than a bare midnight.No bulk create, and no re-anchoringThere is no multi-task call: a checklist is built by calling
createTaskOnContact once per step, in order, with staggered due dates. The
response echoes the contact’s full task list every time, so the last call
confirms the whole set landed.A task also cannot be moved to a different contact. contactId on updateTask
identifies the task’s existing contact — any other contact is rejected.
Delete-and-recreate is not equivalent: a fresh task loses the original’s
completedAt history, created date, and notification links.Organization guardEvery id you pass is org-guarded before the operation runs:
taskId (via its
linked contact, or via an in-org participant for a contact-less task),
contactId, dealId/dealIds, and participants user ids. The write
operations additionally bind the pair — a foreign task id can never be
completed or edited under a contact you do own, and vice versa. See
Authorization for the model.