> ## Documentation Index
> Fetch the complete documentation index at: https://docs.getkato.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Update a task

> Update supplied task properties while preserving omitted values.

Update supplied task properties while preserving omitted values.

Use a developer access key. See [authentication, errors, and rate limits](/api-reference/authentication).

Required scopes: `tasks:write`.

Task access uses the owner’s current workspace role. Non-admin members can access tasks they created or are assigned to; inaccessible tasks return `404`. See [task visibility](/api-reference/tasks/overview#visibility). Archived tasks return `404`. `linked_record_ids` is only accepted by task creation, not this route.

## Parameters

<ParamField path="taskId" type="string" required>
  Task ID accessible to the key owner.
</ParamField>

<ParamField body="title" type="string">
  1–500 characters.
</ParamField>

<ParamField body="description" type="string">
  Up to 100,000 characters.
</ParamField>

<ParamField body="status" type="string">
  Workspace task-status slug.
</ParamField>

<ParamField body="priority" type="string">
  One of no\_priority, low, medium, high, urgent.
</ParamField>

<ParamField body="start_date" type="number | null">
  Unix milliseconds; null clears the start date.
</ParamField>

<ParamField body="due_date" type="number | null">
  Unix milliseconds; null clears the due date. Start must not be later than due date.
</ParamField>

<ParamField body="parent_task_id" type="string | null">
  Accessible parent task ID; null clears the parent.
</ParamField>

<ParamField body="assignees" type="string[]">
  Up to 50 workspace auth-user IDs. Replaces the assignee list; \[] clears it.
</ParamField>

<ParamField body="estimated_time" type="integer | null">
  Positive minutes; null clears the estimate.
</ParamField>

## Response

**200** — Returns the resource under `data`. Example IDs and values are illustrative.

<ResponseExample>
  ```json 200 theme={null}
  {
    "data": {
      "id": "task_example",
      "title": "Prepare kickoff",
      "description": null,
      "status": "todo",
      "priority": "no_priority",
      "assignees": [],
      "start_date": null,
      "dueDate": null,
      "parent_task_id": null,
      "timeLogged": 0,
      "estimatedTime": null,
      "archived": false,
      "createdBy": "user_example",
      "createdAt": "2026-09-07T12:00:00.000Z",
      "updatedAt": "2026-09-07T12:00:00.000Z"
    }
  }
  ```
</ResponseExample>

<RequestExample>
  ```bash Request theme={null}
  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": "high",
    "due_date": null
  }'
  ```
</RequestExample>

Set path-ID environment variables to values returned by your workspace before running the request.

This request changes workspace data. A timeout does not prove that the write failed; inspect the result before retrying.


## Related topics

- [Tasks API](/api-reference/tasks/overview.md)
- [All endpoints](/api-reference/endpoints.md)
- [Update a Raycast task](/api-reference/raycast/tasks-update.md)
- [Write a weekly project update](/recipes/weekly-project-update.md)
- [Organize tasks](/documentation/organize-tasks.md)
