REST API
Tasks API
Create and manage tasks with the correct visibility, dates, and assignees.
Use the tasks API to create work and keep an external system in sync. Task writes use the same underlying service as the app, including activity, notification, and integration behavior.
Endpoints
Paths below are relative to https://api.getkato.io/v1.
| Method | Path | Scope | Result |
|---|---|---|---|
| GET | /tasks | tasks:read | Paginated visible tasks |
| GET | /tasks/:id | tasks:read | A visible task, including archived tasks |
| POST | /tasks | tasks:write | Create a task (201) |
| PATCH | /tasks/:id | tasks:write | Update an active task |
| DELETE | /tasks/:id | tasks:write | Archive a task |
There is currently no public task-restore endpoint.
Visibility
Owners and admins can access tasks across the workspace. A regular member's key can access tasks the member created or is assigned to. The key owner's current role is checked for every task request; scopes alone do not grant access to every task.
Inaccessible tasks return 404. If the key owner leaves the workspace, task access stops. Parent tasks must also be accessible to the caller.
List tasks
curl --fail-with-body --silent --show-error --get \
https://api.getkato.io/v1/tasks \
-H "Authorization: Bearer $KATO_API_KEY" \
--data-urlencode "limit=25"Supported query parameters are limit, cursor, and include_archived. Archived tasks are excluded unless include_archived=true. There are no public status or assignee query filters on this endpoint; filter the returned tasks in your integration if needed.
Follow next_cursor while has_more is true. See pagination.
Create a task
curl --fail-with-body --silent --show-error \
https://api.getkato.io/v1/tasks \
-H "Authorization: Bearer $KATO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"title": "Prepare the Northlane kickoff",
"description": "Confirm the agenda and collect open questions.",
"priority": "high",
"estimated_time": 45
}'| Input | Format |
|---|---|
title | Required string, 1–500 characters |
description | Optional string, up to 100,000 characters |
status | Workspace task-status slug |
priority | no_priority, low, medium, high, or urgent |
start_date / due_date | Unix timestamp in milliseconds |
parent_task_id | Accessible parent task ID |
assignees | Array of workspace auth-user IDs, up to 50 |
estimated_time | Positive integer, in minutes |
linked_record_ids | Array of record IDs, up to 10; creation only |
Use real workspace status slugs and auth-user IDs from your Kato workspace. The general public API does not currently provide a member directory or task-status list endpoint. You can omit optional fields for a minimal task.
Date and response formats
Write start_date and due_date as numbers, such as the result of JavaScript's Date.parse("2026-09-15T17:00:00Z"). Use an explicit timezone. When both dates are set, the start must not be later than the due date.
Responses contain a mix of snake_case and camelCase names:
| Write input | Response property | Response format |
|---|---|---|
start_date | start_date | ISO 8601 string or null |
due_date | dueDate | ISO 8601 string or null |
parent_task_id | parent_task_id | Task ID or null |
estimated_time | estimatedTime | Minutes or null |
Other response properties include id, title, description, status, priority, assignees, timeLogged, archived, createdBy, createdAt, and updatedAt. Do not send a response object straight back as an update; build the expected input fields.
Update a task
Set KATO_TASK_ID to a task returned by your workspace.
curl --fail-with-body --silent --show-error \
-X PATCH "https://api.getkato.io/v1/tasks/$KATO_TASK_ID" \
-H "Authorization: Bearer $KATO_API_KEY" \
-H "Content-Type: application/json" \
--data '{"priority":"urgent","due_date":null}'Omitted fields stay unchanged. Use null to clear start_date, due_date, parent_task_id, or estimated_time. Use assignees: [] to remove all assignees. linked_record_ids is only accepted during creation.
Archive a task
curl --fail-with-body --silent --show-error \
-X DELETE "https://api.getkato.io/v1/tasks/$KATO_TASK_ID" \
-H "Authorization: Bearer $KATO_API_KEY"This returns the task with archived: true. Repeating the archive operation is supported. Patching an archived task returns 404.
Use task webhooks for status and assignment changes, and verify incoming signatures before processing an event.
Something missing? Let us know.