---
title: "Bulk update issues"
method: POST
path: "/issues/bulk-update"
tags: ["Issues"]
---

# Bulk update issues

`POST /issues/bulk-update`

## Request

- Base URL: `https://public.escape.tech/v3`
- URL: `https://public.escape.tech/v3/issues/bulk-update`
- Auth: API key in header `X-ESCAPE-API-KEY`

Update the status and/or severity of multiple issues matching a filter predicate. For example, mark all LOW severity issues on a given asset as IGNORED, or reset severities to scanner values. A non-empty `where` or `all: true` is required. Set `dryRun` to preview the matching issue IDs without changing anything. Requests matching more than 10,000 issues are rejected: narrow the filter.

## Request body

- object
  - `status` union: The new status to apply
    - object
      - `value` 'FALSE_POSITIVE' | 'IGNORED' | 'MANUAL_REVIEW' | 'OPEN' | 'RESOLVED', required: The status to set
      - `reason` string, nullable: Reason for the change (required if your organization enforces it)
    - 'FALSE_POSITIVE' | 'IGNORED' | 'MANUAL_REVIEW' | 'OPEN' | 'RESOLVED': Deprecated: pass an object { value, reason } instead
  - `severity` union: The new severity to apply. Pass null to reset to the scanner severity.
    - object
      - `value` 'CRITICAL' | 'HIGH' | 'INFO' | 'LOW' | 'MEDIUM' | 'null', nullable, required: The severity to set. Pass null to reset to the scanner default.
      - `reason` string, nullable: Reason for the change (required if your organization enforces it)
    - 'CRITICAL' | 'HIGH' | 'INFO' | 'LOW' | 'MEDIUM': Deprecated: pass an object { value, reason } instead
  - `where` object: Filter predicate. Required unless `all` is true.
    - `ids` string[]: Filter by specific issue IDs
    - `blacklistedIds` string[]: Exclude these issue IDs
    - `blacklistedNames` string[]: Exclude issues by their raw name (e.g. 'SQL injection')
    - `projectIds` string[]: Filter by project IDs
    - `profileIds` string[]: Filter by profile IDs
    - `assetIds` string[]: Filter by asset IDs
    - `targetIds` string[]: Filter by target IDs
    - `scanIds` string[]: Filter by scan IDs
    - `tagIds` string[]: Filter by tag IDs
    - `securityTestUids` string[]: Filter by security test UIDs
    - `domains` string[]: Filter by domain
    - `names` string[]: Filter by issue full name (the display name including risk characteristics, e.g. 'SQL injection found on external-facing asset')
    - `search` string: Search term to filter issues by name or description
    - `jiraTicket` boolean: Filter by issues with Jira tickets
    - `noTags` true: Filter by issues whose assets have no tags. Only `true` is supported: the API cannot express "assets that have tags", so `false` is rejected instead of silently matching every issue.
    - `aiFalsePositive` boolean: Filter by AI false positive classification
    - `agentic` boolean: Filter by agentic (AI pentest) issues
    - `risks` string[]: Filter by risk types
    - `assetClasses` string[]: Filter by asset classes
    - `categories` string[]: Filter by issue categories
    - `assetTypes` string[]: Filter by asset types
    - `assetStatuses` string[]: Filter by asset statuses
    - `scannerKinds` string[]: Filter by scanner kinds
    - `severities` string[]: Filter by issue severities
    - `status` string[]: Filter by issue status
    - `dnf` object: Advanced filter as a DNF expression (JSON object)
  - `all` boolean: Set to true to target every issue. Mutually exclusive with a non-empty `where`.
  - `dryRun` boolean: Return the matching issue IDs and count without updating anything

## Response `200`

OK

- object
  - `ids` string[], required: IDs of the updated issues (or matching issues on dry run)
  - `count` integer, required: Number of issue IDs in `ids`
  - `dryRun` boolean, required: Whether this was a preview with no update applied

## Other responses

- `400`: Bad Request

---

[API](https://skmtc.dev/escape/apis/escape-public-api.md) - [All operations](https://skmtc.dev/escape/apis/escape-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/escape/apis/escape-public-api/revisions/2eab35df40c7?raw)
