All docs
Start here
API basics
Agent setups
Resources
- Contacts
- Companies
- Lists
- Deals
- Tasks
- Notes
- Fields
- Quotes
- Stage Checklist Pipelines
- Sequences
- Sequence Lifecycle
- Inbox
- Meetings
- Appointments Management
- Voice & Dialer
- Skills (LLM + API)
- Workflows
- GTM Campaigns
- GTM Context
- GTM Knowledge Base
- Launch Helpers
- Landing Pages
- Intent & Signals
- Search
- Enrichment
- Assert / Upsert
- Agency Keys & Cross-Org Targeting
- CRM Syncs
- Audience Syncs
- Destinations
- Snippet
- Functions
Data pipeline
Webhooks
What's new
Tasks
Create, manage, and track tasks on contacts
Tasks let you create follow-up reminders and action items linked to contacts.
List Contact Tasks
GET /contacts/{contact_id}/tasks
Returns tasks linked to a specific contact.
Query Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
status | string | — | Filter by status: open or completed |
Example
cURL
curl "https://be.graph8.com/api/v1/contacts/12345/tasks?status=open" \
-H "Authorization: Bearer $API_KEY" Python
response = requests.get(
f"{BASE_URL}/contacts/12345/tasks",
headers=HEADERS,
params={"status": "open"}
) Response
{
"data": [
{
"id": "task_uuid",
"entity_type": "contact",
"entity_id": "101",
"title": "Follow up",
"description": "...",
"due_date": "2026-06-01T17:00:00Z",
"assignee_id": "user_x",
"assignee_name": "John",
"status": "open",
"priority": 2,
"task_type": "...",
"created_by": "user_y",
"created_at": "...",
"updated_at": "...",
"parent_task_id": null,
"subtask_sort_order": 0,
"subtask_count": 0,
"completed_subtask_count": 0
}
]
}
List All Tasks
GET /tasks
Returns all tasks across the organization, with optional filters.
Query Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
status | string | — | Filter by status |
priority | integer | — | Filter by priority (0=none, 1=urgent, 2=high, 3=normal, 4=low) |
assignee_id | string | — | Filter by assignee |
search | string | — | Partial match on task title |
Example
cURL
curl "https://be.graph8.com/api/v1/tasks?status=open&priority=2&assignee_id=user_x" \
-H "Authorization: Bearer $API_KEY" Create Task
POST /contacts/{contact_id}/tasks
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
title | string | Yes | Task title |
description | string | No | Task details |
due_date | string | No | ISO 8601 due date |
assignee_id | string | No | User ID to assign |
priority | integer | No | 0=none, 1=urgent, 2=high, 3=normal, 4=low |
parent_task_id | string | No | ID of parent task — makes this a subtask (one level deep) |
subtask_sort_order | integer | No | Sort order among sibling subtasks |
Example
cURL
curl -X POST "https://be.graph8.com/api/v1/contacts/12345/tasks" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"title": "Send proposal", "due_date": "2026-03-05", "priority": 2}' Response 201 Created
Returns the full task object — same shape as the items in GET /contacts/{contact_id}/tasks.
Update Task
PATCH /tasks/{task_id}
Supports partial updates. Send only the fields you want to change.
Request Body
All fields are optional.
| Field | Type | Description |
|---|---|---|
title | string | Task title |
description | string | Task details |
due_date | string | ISO 8601 due date |
assignee_id | string | User ID to assign |
status | string | Task status (open or completed) |
priority | integer | 0=none, 1=urgent, 2=high, 3=normal, 4=low |
parent_task_id | string | ID of parent task (or null to remove subtask relationship) |
subtask_sort_order | integer | Sort order among sibling subtasks |
Example
cURL
curl -X PATCH "https://be.graph8.com/api/v1/tasks/task_uuid" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"status": "completed", "priority": 1}'