---
title: "Update many tasks"
method: POST
path: "/api/tasks/bulk-update"
tags: ["Tasks"]
---

# Update many tasks

`POST /api/tasks/bulk-update`

## Request

- Base URL: `https://core-api.getaptly.com`
- URL: `https://core-api.getaptly.com/api/tasks/bulk-update`
- Auth: one of:
  - API key in header `x-token`
  - API key in header `Authorization`
- TypeScript: <https://skmtc.dev/getaptly/apis/aptly-api/docs/api/tasks/bulk-update/post.ts> (a function with typed inputs; its response is checked against the schema)

Applies one update to up to 100 tasks: either an explicit `taskIds` list (archived
tasks included, so they can be un-archived), or every non-archived task on a card
(`aptletInstanceId`) — open tasks only unless `includeCompleted` is true. Each task is updated exactly as `PUT /api/tasks/{taskId}` would update it
(card checklist, assignment notifications and completion workflows included).

Use `archived: true` to close or skip tasks, `checked: true` to complete them.
One task failing does not stop the others; it is listed in `failed`. A task on a
board outside an API key's board allowlist is reported as `FORBIDDEN`.

## Request body

- object
  - `userId` string: Acting user the updates are attributed to. Required with API-key auth; ignored with a delegate token, which supplies the user itself.
  - `taskIds` string[]: Tasks to update. Provide this or `aptletInstanceId`.
  - `aptletInstanceId` string: Update every task on this card instead of a `taskIds` list.
  - `includeCompleted` boolean: With `aptletInstanceId`, also update completed tasks.
  - `update` object, required
    - `status` 'backlog' | 'notStarted' | 'inProgress' | 'onHold' | 'completed'
    - `priority` 'asap' | 'high' | 'medium' | 'low'
    - `dueAt` string, date-time, nullable
    - `assigneeId` string
    - `checked` boolean
    - `archived` boolean

## Response `200`

Which tasks were updated and which were not.

- object
  - `updated` string[]
  - `failed` object[]
    - `taskId` string
    - `code` string
    - `message` string

## Other responses

- `400`: Invalid body, no target given, or more than 100 matching tasks.
- `401`: Invalid or missing credential.

---

[API](https://skmtc.dev/getaptly/apis/aptly-api.md) - [All operations](https://skmtc.dev/getaptly/apis/aptly-api/llms.txt) - [OpenAPI document](https://skmtc.dev/getaptly/apis/aptly-api/revisions/75c367e0b8e5?raw)
