---
title: "Update many existing todos at once"
method: PATCH
path: "/to-do/bulk"
tags: ["to-do"]
---

# Update many existing todos at once

`PATCH /to-do/bulk`

## Request

- Base URL: `https://api.focusbear.io` (the document declares no server; this is the origin it was published from)
- URL: `https://api.focusbear.io/to-do/bulk`
- Auth: HTTP bearer

Each item is a PUT /to-do body with a required id, saved with the same rules. Always 200: each result says whether its todo was saved.

## Request body

- BulkUpdateToDosDto
  - `todos` BulkUpdateToDoItemDto[], required
    - `eisenhower_quadrant` number, required
    - `assignee_id` string, uuid, nullable: Id of the user to assign this task to, or null to unassign it.
    - `planned_block_key` string, nullable: Day Plan: opaque time-box key (`event:` / `deepwork:` / `habit:`).
    - `recurrence_rule` string, nullable: One unfolded RFC 5545 RRULE content line. Supports DAILY, plain-weekday WEEKLY, constrained MONTHLY, and non-leap-day YEARLY rules, with INTERVAL and either COUNT or a UTC UNTIL. Null stops the todo repeating.
    - `recurrence_timezone` string: IANA timezone the recurrence rule is evaluated in.
    - `id` string, uuid, required
    - `title` string, required
    - `details` string
    - `due_date` string, date-time
    - `focus_type` string, uuid
    - `status` string
    - `tags` CreateFocusModeTagDto[]
      - `id` string, uuid, required
      - `text` string, required
    - `subtasks` SubtaskDto[]
      - `id` string
      - `name` string, required
      - `is_completed` boolean, required
      - `trello_check_item_id` string
    - `objective` string
    - `duration` number
    - `icon` string
    - `perspiration_level` number
    - `outcome` number
    - `project_id` string, uuid
    - `synced_project_id` string, uuid
    - `external_status_id` string
    - `assigned_mcp_token_id` string, uuid
    - `custom_status_id` string
    - `planned_date` string, nullable: Day Plan: the day this todo is planned for (yyyy-MM-dd). Pass `null` to remove the todo from the Day Plan (the todo itself is not deleted).
    - `planned_order` number, nullable: Day Plan: manual ordering within the planned day.

## Response `200`

- BulkUpdateToDosResponse
  - `results` BulkUpdateToDoResult[], required
    - `id` string, required
    - `success` boolean, required
    - `todo` object: The saved todo, exactly as `PUT /to-do` returns it. Only on success.
    - `status_code` number: The HTTP status the same body would have got from `PUT /to-do`. Only on failure.
    - `message` string

---

[API](https://skmtc.dev/focusbear/apis/focusbear-api.md) - [All operations](https://skmtc.dev/focusbear/apis/focusbear-api/llms.txt) - [OpenAPI document](https://skmtc.dev/focusbear/apis/focusbear-api/revisions/3a83a3b9a811?raw)
