---
title: "Create Checklist Task"
method: POST
path: "/api/external/v2/checklist-tasks"
tags: ["external-v2-checklists"]
---

# Create Checklist Task

`POST /api/external/v2/checklist-tasks`

Create a checklist task under exactly one parent — a section, a checklist
root, or a parent task (subtask, one level deep). The parent is resolved to
its checklist and the caller must have write access to that checklist;
otherwise it 404s (no existence oracle). ``role`` cannot be set here.

## Request body

- CreateChecklistTaskRequest — Body for POST /api/external/v2/checklist-tasks. Anchors the new task to exactly one parent: a ``section_id`` (task within a section), a ``checklist_id`` (root-level task, outside any section), or a ``parent_task_id`` (subtask, one level deep). ``role`` is not settable — it is derived internally and exposed read-only on the checklist read surface. Team assignment (``assigned_team_*``) is likewise read-only on the write surface for now: it needs account-scoping to avoid an id-enumeration oracle, so individual assignment via ``assigned_user_id`` is the supported write path.
  - `title` string, required — Task title.
  - `section_id` integer, nullable — Add the task to this section (use a section ``id`` from GET /deals/{deal_id}/checklists). Mutually exclusive with checklist_id and parent_task_id.
  - `checklist_id` integer, nullable — Add the task at the root of this checklist, outside any section. Mutually exclusive with section_id and parent_task_id.
  - `parent_task_id` integer, nullable — Add the task as a subtask of this task (subtasks are one level deep). Mutually exclusive with section_id and checklist_id.
  - `description` string, nullable — Optional task description.
  - `status` 'to_do' | 'requested' | 'reviewing' | 'updates_needed' | 'approved' | 'cancelled', nullable — Initial workflow status. Defaults to 'to_do' when omitted.
  - `assigned_user_id` integer, nullable — Lev user id to assign (from list_team_members, or an assignee ``id`` on the checklist read).
  - `due_date` string, date, nullable — Due date (YYYY-MM-DD).
  - `document_type_ids` integer[], nullable — Expected document type ids for this task.

## Response `201`

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.net/lev/apis/lev-api.md) · [All operations](https://skmtc.net/lev/apis/lev-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/lev/lev-api/revisions/e1915e1423cf/schema)
