Add a task
const url = 'https://api.threadkite.app/v1/tasks';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"threadId":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","title":"Follow up with Sarah","note":"example","dueAt":"2026-04-15T12:00:00Z","dueDate":"2026-10-08","assigneeUserId":"example","snoozeThread":false}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.threadkite.app/v1/tasks \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "threadId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "title": "Follow up with Sarah", "note": "example", "dueAt": "2026-04-15T12:00:00Z", "dueDate": "2026-10-08", "assigneeUserId": "example", "snoozeThread": false }'For you, or for someone on a Full seat who can see the thread. Give dueAt for a time or dueDate for a day. snoozeThread also snoozes the thread until then.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”object
The thread it is about; leave out for a task on its own
Example
Follow up with SarahWhen it is due. Give this or dueDate.
The day it is due (all day, reminded at 9am in the thread’s location time zone). Give this or dueAt.
Example
2026-10-08Who does it (a Full seat who can see the thread). Defaults to you; API keys default to the thread owner.
Also snooze the thread until the task is due
Responses
Section titled “Responses”object
The thread’s inbox
object
When it is due; for an all-day task, 9am on its day (when it is reminded)
The time zone its day belongs to
Against today, in your time zone
object
Their picture; null to show their initials
object
object
You can change, complete and delete it
Example
{ "contact": { "name": "Sarah Turner" }, "title": "Follow up with Sarah", "timeZone": "Europe/London", "dueState": "overdue", "dueLabel": "Tomorrow, 9am", "assignee": { "id": "usr_8f2c", "name": "James Patel", "avatarUrl": "https://api.threadkite.app/avatars/0b7c3a52-5d9e-4f3a-9a51-2f1e8c6d4b10.jpg" }, "completedBy": { "id": "usr_8f2c", "name": "James Patel" }, "createdBy": { "id": "usr_8f2c", "name": "James Patel" }, "origin": "person"}object
Stable machine-readable reason
With code invalid: every problem with the request, by field (message is the first)
object
Dotted path inside the item, e.g. attributes.price.amountMinor
Example
{ "statusCode": 403, "code": "forbidden", "message": "You do not have permission to do that.", "errors": [ { "message": "Enter the make" } ]}Missing or invalid API key
object
Stable machine-readable reason
With code invalid: every problem with the request, by field (message is the first)
object
Dotted path inside the item, e.g. attributes.price.amountMinor
Example
{ "statusCode": 403, "code": "forbidden", "message": "You do not have permission to do that.", "errors": [ { "message": "Enter the make" } ]}The organisation is on the Free plan (code upgrade_required)
object
Stable machine-readable reason
The feature that needs Pro
Where to upgrade or pay, in the web app
Example
{ "statusCode": 402, "code": "upgrade_required", "message": "Connections are part of Pro. Upgrade to connect texts, calls and more.", "feature": "extraSeats", "upgradePath": "/settings/billing"}The key does not have the scope (or the person the permission)
object
Stable machine-readable reason
With code invalid: every problem with the request, by field (message is the first)
object
Dotted path inside the item, e.g. attributes.price.amountMinor
Example
{ "statusCode": 403, "code": "forbidden", "message": "You do not have permission to do that.", "errors": [ { "message": "Enter the make" } ]}object
Stable machine-readable reason
With code invalid: every problem with the request, by field (message is the first)
object
Dotted path inside the item, e.g. attributes.price.amountMinor
Example
{ "statusCode": 403, "code": "forbidden", "message": "You do not have permission to do that.", "errors": [ { "message": "Enter the make" } ]}Rate limit reached
object
Stable machine-readable reason
Seconds until another request will be accepted
Example
{ "statusCode": 429, "code": "rate_limited", "message": "Too many requests. Each key can make 120 requests a minute; try again in 12 seconds.", "retryAfter": 12}