---
title: "Bulk-update tickets"
url: https://docs.gleap.ai/en/reference/rest-api/bulk-update-tickets
method: PUT
path: "/tickets/bulk"
api: "API Reference"
tag: "Ticket"
operationId: "BulkUpdateTickets"
updatedAt: "2026-11-01T18:40:15.677Z"
language: en
---

# Bulk-update tickets

`PUT https://api.gleap.io/v3/tickets/bulk`

## Authorization

- `Authorization` (header, required): `Bearer <token>`

## Headers

- `project` (string, required)

## Request body (`application/json`, required)

- `action` (enum<string>, required): One of: `close`, `assign`, `archive`, `snooze`, `team`, `priority`, `tag`.
- `selection` (object, required)
  - `ids` (string[]): Explicit ticket ids (checkbox selection).
  - `query` (object): "All matching" — the same raw query-param shape the lane's GET /tickets uses.
    - `sort` (string)
    - `filter` (string)
    - `status` (string, required)
    - `type` (string, required)
  - `limit` (number<double>): Select-N: only the first N tickets in the query's sort order. Query mode only.
- `payload` (object)
  - `processingUser` (string)
  - `duration` (number<double>)
  - `processingTeam` (string)
  - `priority` (string): Priority key (LOW, MEDIUM, HIGH or a board's custom key) or title. Resolved against each ticket's board; tickets whose board has no such active priority are skipped.
  - `tag` (string): Tag label added to every ticket, stored exactly as given: project tags can carry spaces ("Plan Assistant "), so a trimmed write would be another tag.

## Example request

```bash
curl --request PUT \
  --url https://api.gleap.io/v3/tickets/bulk \
  --header 'Authorization: Bearer <token>' \
  --header 'project: <project>' \
  --header 'Content-Type: application/json' \
  --data '{
  "action": "close",
  "selection": {}
}'
```

## Responses

### 200 (`application/json`)

Ok
