---
title: "Bulk-ack signals (docs §6b)"
method: POST
path: "/api/v1/organizations/{organization_id}/signals/ack"
tags: ["organizations"]
---

# Bulk-ack signals (docs §6b)

`POST /api/v1/organizations/{organization_id}/signals/ack`

## Request

- Base URL: `https://composal.com` (the document declares no server; this is the origin it was published from)
- URL: `https://composal.com/api/v1/organizations/{organization_id}/signals/ack`
- Auth: HTTP bearer

Two mutually exclusive shapes. Explicit `ids` acks exactly those and ignores every other key. Otherwise the request must be explicitly scoped — `before_id`, at least one filter, `recovered_only`, or an opt-in `all: true` — so a request the server did not understand can never silently ack the whole organization.

## Path parameters

- `organization_id` string, required

## Request body

- OpsSignalBulkAckRequest
  - `ids` string[]: Explicit `sig_…` ids. When present every other key is ignored.
  - `before_id` string: Inclusive upper bound (`sig_…`) — ack matching signals at or before it.
  - `kind` string: Single kind or comma-separated list.
  - `severity` string: Single severity or comma-separated list.
  - `min_severity` 'info' | 'warning' | 'error' | 'critical': Severity levels (docs §2, reusing `AlertRule::SEVERITIES`).
  - `hosted_app_id` string
  - `source` string: Single source provider or comma-separated list (docs §6e). Alone it satisfies the "explicitly scoped" guard.
  - `integration_id` string: One signal integration — raw id, or `sint_…` once that model ships.
  - `since` string
  - `all` boolean: Opt in to an otherwise-unconstrained ack of every unacked signal.
  - `recovered_only` boolean: Narrow to signals whose `resolution.resolved` is true. Composes with every other filter and alone satisfies the "explicitly scoped" guard.

## Response `200`

The number of signals newly acked.

- OpsSignalBulkAckResult
  - `acked_count` integer, required

## Other responses

- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not found
- `422`: The request was neither `ids` nor explicitly scoped, or a supplied cursor or filter is invalid.
- `502`: Bad gateway

---

[API](https://skmtc.dev/composal/apis/vex-api.md) - [All operations](https://skmtc.dev/composal/apis/vex-api/llms.txt) - [OpenAPI document](https://skmtc.dev/composal/apis/vex-api/revisions/74298a24e040?raw)
