---
title: "Update Checklist Task"
method: PATCH
path: "/api/external/v2/checklist-tasks/{task_id}"
tags: ["external-v2-checklists"]
---

# Update Checklist Task

`PATCH /api/external/v2/checklist-tasks/{task_id}`

Partially update a checklist task. Only provided fields change; nullable
fields are cleared by sending ``null``. Set ``is_completed=false`` to reopen
a completed task — to mark a task done, use the ``/complete`` endpoint.

## Path parameters

- `task_id` integer, required

## Request body

- UpdateChecklistTaskRequest — Body for PATCH /api/external/v2/checklist-tasks/<task_id>. Partial update: only fields present in the request are changed. For nullable fields, sending ``null`` clears the value; omitting a field leaves it unchanged. Use ``is_completed=false`` to reopen a completed task — to mark a task done, prefer POST /checklist-tasks/<task_id>/complete (idempotent, and it also approves attached files).
  - `title` string, nullable — New task title.
  - `description` string, nullable — New description; null clears it.
  - `status` 'to_do' | 'requested' | 'reviewing' | 'updates_needed' | 'approved' | 'cancelled', nullable — New workflow status.
  - `assigned_user_id` integer, nullable — New assignee user id; null unassigns.
  - `due_date` string, date, nullable — New due date (YYYY-MM-DD); null clears it.
  - `is_completed` boolean, nullable — Set false to reopen a completed task.
  - `document_type_ids` integer[], nullable — Replace the expected document type ids.

## Response `200`

Successful Response

- ChecklistTaskObjectResponse — OpenAPI schema for the single-task write endpoints (create / update / complete).
  - `request_id` string, required
  - `timestamp` string, required
  - `data` ChecklistTaskResponse, required — A single checklist task. Completion is two fields by design, matching the internal model: ``status`` is the workflow state and ``is_completed`` is the soft completion flag. ``subtasks`` is one level deep (subtasks cannot nest further). ``position`` orders tasks within their section / checklist root / parent task.
    - `id` integer, required
    - `title` string, required
    - `description` string, nullable
    - `status` 'to_do' | 'requested' | 'reviewing' | 'updates_needed' | 'approved' | 'cancelled', required
    - `is_completed` boolean, required
    - `position` integer, required
    - `due_date` string, date, nullable
    - `role` 'sponsor' | 'my_team' | 'lender' | 'borrower', nullable
    - `assignee` ChecklistTaskAssignee — The user a task is assigned to. Built from base ``User`` fields (not account-scoped profile overrides), so it serializes correctly for API-key callers without a user profile.
      - `id` integer, required
      - `first_name` string, nullable
      - `last_name` string, nullable
      - `email` string, nullable
    - `assigned_team` ChecklistTaskAssignedTeam — The team, lender, or borrower org a task is assigned to.
      - `id` integer, required
      - `type` 'account' | 'private_company', required
      - `name` string, nullable
    - `document_types` ChecklistTaskDocumentTypeResponse[]
      - `id` integer, required
      - `name` string, nullable
    - `files` ChecklistTaskFileResponse[]
      - `vault_resource_id` integer, required
      - `document_id` integer, nullable
      - `name` string, nullable
      - `origin` 'auto_match' | 'manually_added', required
    - `collaborators` ChecklistTaskCollaborator[]
      - `id` integer, nullable
      - `email` string, nullable
    - `subtasks` ChecklistTaskResponse[]

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/lev/apis/lev-api.md) · [All operations](https://skmtc.dev/lev/apis/lev-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/lev/lev-api/revisions/d0119cf38f9c/schema)
