---
title: "Batch create or update tasks"
method: POST
path: "/open/v1/task/batch"
---

# Batch create or update tasks

`POST /open/v1/task/batch`

Each add and update operation is limited to 50 tasks. Processing is not atomic: if one task fails,
tasks processed before the failure may already have been created or updated. Do not retry the entire
request without first checking which tasks succeeded.

## Request body

- SyncTaskRequest
  - `add` Task[] — Tasks to create, up to 50 tasks
    - `id` string — The ID of task
    - `etag` string — Version identifier of task, returned after task changes
    - `projectId` string — The ID of project which task in
    - `title` string — Title of task
    - `isAllDay` string — Is task all day, true or false
    - `completedTime` string — Task completed time in "yyyy-MM-dd'T'HH:mm:ssZ", Example "2019-11-13T03:00:00+0000
    - `content` string — Content of task
    - `desc` string — Description of checklist
    - `dueDate` string — Task due date time in "yyyy-MM-dd'T'HH:mm:ssZ", Example "2019-11-13T03:00:00+0000"
    - `items` ChecklistItem[]
      - `id` string — The ID of checklistItem
      - `title` string — Title of checklistItem
      - `status` 0 | 1 — The completion status of checklistItem, Normal is 0, Completed is 1
      - `completedTime` string — checklistItem completed time in "yyyy-MM-dd'T'HH:mm:ssZ", Example "2019-11-13T03:00:00+0000
      - `isAllDay` string — Is checklistItem all day, true or false
      - `sortOrder` integer — Order value of checklistItem
      - `startDate` string — checklistItem start date time in "yyyy-MM-dd'T'HH:mm:ssZ", Example "2019-11-13T03:00:00+0000"
      - `timeZone` string — checklistItem timezone, Example "America/Los_Angeles"
    - `priority` integer — Task priority, None is 0, Low is 1, Medium is 3, High is 5
    - `reminders` string[] — List of reminder trigger, Example ["TRIGGER:P0DT9H0M0S","TRIGGER:PT0S"]
    - `repeatFlag` string — Recurring rules of task, Example "RRULE:FREQ=DAILY;INTERVAL=1"
    - `repeatFrom` '0' | '1' | '2' — Recurrence calculation mode. This field only takes effect when repeatFlag is present. "0" (REPEAT_FROM_DUEDATE): Repeat from the original due or scheduled date. The next occurrence is based on dueDate and repeatFlag, for fixed schedules such as "every Monday". "1" (REPEAT_FROM_COMPLETETIME): Repeat from the completion date while preserving the original time of day, for rules such as "3 days after completion". No next occurrence is generated without a completion time. "2" (REPEAT_FROM_DEFAULT): Default calendar recurrence. It uses the task time zone, skips expired historical occurrences, and advances to the next applicable occurrence. The server usually uses "2" when this field is omitted or empty. Both "0" and "2" follow calendar or scheduled recurrence rules, but "2" advances from the current date in the task time zone and is the recommended default for ordinary daily, weekly, or monthly recurrence.
    - `sortOrder` integer — Sort order value of task, Example 12345
    - `startDate` string — Start data time in "yyyy-MM-dd'T'HH:mm:ssZ", Example "2023-04-23T12:00:00+0000"
    - `status` -1 | 0 | 2 — Task completion status, Abandoned is -1, Normal is 0, Completed is 2
    - `assigneeUsername` string — Username of the project member assigned to the task
    - `timeZone` string — Task timezone, Example "America/Los_Angeles"
  - `update` Task[] — Tasks to update, up to 50 tasks
    - `id` string — The ID of task
    - `etag` string — Version identifier of task, returned after task changes
    - `projectId` string — The ID of project which task in
    - `title` string — Title of task
    - `isAllDay` string — Is task all day, true or false
    - `completedTime` string — Task completed time in "yyyy-MM-dd'T'HH:mm:ssZ", Example "2019-11-13T03:00:00+0000
    - `content` string — Content of task
    - `desc` string — Description of checklist
    - `dueDate` string — Task due date time in "yyyy-MM-dd'T'HH:mm:ssZ", Example "2019-11-13T03:00:00+0000"
    - `items` ChecklistItem[]
      - `id` string — The ID of checklistItem
      - `title` string — Title of checklistItem
      - `status` 0 | 1 — The completion status of checklistItem, Normal is 0, Completed is 1
      - `completedTime` string — checklistItem completed time in "yyyy-MM-dd'T'HH:mm:ssZ", Example "2019-11-13T03:00:00+0000
      - `isAllDay` string — Is checklistItem all day, true or false
      - `sortOrder` integer — Order value of checklistItem
      - `startDate` string — checklistItem start date time in "yyyy-MM-dd'T'HH:mm:ssZ", Example "2019-11-13T03:00:00+0000"
      - `timeZone` string — checklistItem timezone, Example "America/Los_Angeles"
    - `priority` integer — Task priority, None is 0, Low is 1, Medium is 3, High is 5
    - `reminders` string[] — List of reminder trigger, Example ["TRIGGER:P0DT9H0M0S","TRIGGER:PT0S"]
    - `repeatFlag` string — Recurring rules of task, Example "RRULE:FREQ=DAILY;INTERVAL=1"
    - `repeatFrom` '0' | '1' | '2' — Recurrence calculation mode. This field only takes effect when repeatFlag is present. "0" (REPEAT_FROM_DUEDATE): Repeat from the original due or scheduled date. The next occurrence is based on dueDate and repeatFlag, for fixed schedules such as "every Monday". "1" (REPEAT_FROM_COMPLETETIME): Repeat from the completion date while preserving the original time of day, for rules such as "3 days after completion". No next occurrence is generated without a completion time. "2" (REPEAT_FROM_DEFAULT): Default calendar recurrence. It uses the task time zone, skips expired historical occurrences, and advances to the next applicable occurrence. The server usually uses "2" when this field is omitted or empty. Both "0" and "2" follow calendar or scheduled recurrence rules, but "2" advances from the current date in the task time zone and is the recommended default for ordinary daily, weekly, or monthly recurrence.
    - `sortOrder` integer — Sort order value of task, Example 12345
    - `startDate` string — Start data time in "yyyy-MM-dd'T'HH:mm:ssZ", Example "2023-04-23T12:00:00+0000"
    - `status` -1 | 0 | 2 — Task completion status, Abandoned is -1, Normal is 0, Completed is 2
    - `assigneeUsername` string — Username of the project member assigned to the task
    - `timeZone` string — Task timezone, Example "America/Los_Angeles"

## Response `200`

IDs mapped to their updated etags or error types.

- SyncTaskResult
  - `id2etag` object — Map of successfully processed task IDs to etags
  - `id2error` object — Map of task IDs that could not be processed to error types

## Other responses

- `500` — A task could not be created because its project has reached the task limit. Earlier tasks in the same request may have succeeded.

## Changes

- **2026-07-31** `fc6b6ae72259` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/ticktick/apis/ticktick-openapi/changes/open/v1/task/batch/post.md)

---

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