---
title: "Add Subtasks"
method: POST
path: "/tasks/{task_id}/subtasks"
tags: ["tasks"]
---

# Add Subtasks

`POST /tasks/{task_id}/subtasks`

## Request

- Base URL: `https://app.tascan.io/api/v1`
- URL: `https://app.tascan.io/api/v1/tasks/{task_id}/subtasks`
- Auth: HTTP bearer

Add one or more subtasks to a task (bulk). Subtasks support typed responses: "number" for per-set data (reps, weight, distance), "text" for notes, "choice" for options, "checkbox" for simple steps. Set-logging example: task "Bench Press" with subtasks Set 1/Set 2/Set 3 each response_type "number" — each completed set stores its value and timestamp, giving per-set timing for progression tracking.

## Path parameters

- `task_id` string, required

## Request body

- object
  - `subtasks` object[], required: Array of subtasks to create
    - `title` string, required: Subtask title (e.g. "Set 1")
    - `description` string: Optional detail
    - `response_type` 'checkbox' | 'number' | 'text' | 'choice' | 'link' | 'url' | 'file': Default checkbox. "number" for per-set values. "choice" needs response_config.options. "link" = the worker submits a URL. "url" = the worker visits a preset URL and confirms. "file" = the worker uploads a file.
    - `response_config` object: For "choice": {options: [...]}. For "number"/"text": {placeholder}.
    - `requires_photo` boolean: Require photo on completion
    - `sort_order` number: Explicit position (defaults to end, in array order)

## Response `200`

Success. JSON body: { data: ... } or an error object { error, message }.

## Other responses

- `4XX`: Client error (validation, auth, scope, rate limit).

---

[API](https://skmtc.dev/tascan/apis/tascan-api.md) · [All operations](https://skmtc.dev/tascan/apis/tascan-api/llms.txt) · [OpenAPI document](https://skmtc.dev/tascan/apis/tascan-api/revisions/56fcd2861498?raw)
