---
title: "List a multi-alert's tracked groups"
method: GET
path: "/api/v2/{org_id}/alerts/{alert_id}/groups"
tags: ["Alerts"]
---

# List a multi-alert's tracked groups

`GET /api/v2/{org_id}/alerts/{alert_id}/groups`

## Request

- Base URL: `https://api.openobserve.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.openobserve.ai/api/v2/{org_id}/alerts/{alert_id}/groups`
- Auth: API key in header `Authorization`
- TypeScript: <https://skmtc.dev/openobserve/apis/openobserve-api-http/docs/api/v2/:org_id/alerts/:alert_id/groups/get.ts> (a function with typed inputs; its response is checked against the schema)

Returns the per-group state rows of a multi-alert, most severe first, with the pre-cap group counts needed to render 'N of M groups firing'. Empty for alerts that have not opted in to per-group evaluation.

## Path parameters

- `org_id` string, required
- `alert_id` string, required

## Response `200`

Success

- object: HTTP response body for `ListAlertGroups`.
  - `capped` boolean, required: True when the last evaluation observed more groups than the M-6 cap tracks, so `list` is a truncated view. Drives the cap banner — M-6 forbids truncating silently.
  - `group_cap` integer, required: The cap in force, for the banner's wording.
  - `groups_firing` integer, nullable
  - `groups_firing_is_lower_bound` boolean, nullable
  - `groups_observed` integer, nullable: Pre-cap totals from the rollup row, so the caller can render "N of M groups firing" without counting the (post-cap) list above.
  - `groups_observed_is_lower_bound` boolean, nullable
  - `list` AlertGroupResponseItem[], required: Tracked groups, most severe first.
    - `ack` AckView
      - `ack_source` 'ui' | 'api' | 'slack' | 'oncall' | 'incident'
      - `acked_at` integer, required
      - `acked_by` string, required
      - `firing_started_at` integer, required
      - `group_key` string
      - `taken_over_from` string, nullable
    - `firing_started_at` integer, nullable: Start of the current firing cycle (µs), the key an ack names; absent when not firing.
    - `group_key` string, required: Deterministic hash of the group's label set — the state identity, and the key the per-group history filter takes.
    - `group_labels` string, nullable: Rendered `k=v,k=v` labels, for display only. `group_key` stays the identity because a readable rendering is ambiguous once a label value contains the separators.
    - `labels` AlertGroupLabel[], required: Parsed form of `group_labels`, so the UI does not re-parse the string.
      - `name` string, required
      - `value` string, required
    - `last_notified_level` string, nullable: Level of this group's last *successful* delivery — what escalation is measured against. Absent when it has never paged.
    - `last_outcome` string, nullable
    - `last_outcome_at` integer, nullable
    - `last_seen` integer, nullable: Last evaluation that actually included this group (M-7). A group whose `last_seen` is falling behind is on its way to being resolved.
    - `level` string, nullable
    - `level_since` integer, nullable: When `level` last changed — "critical for 20 minutes".
    - `silenced_until` integer, nullable: Per-group silence window (MN-2): suppress re-delivery until this instant. Absent when the group is not silenced.

## Other responses

- `404`: NotFound

---

[API](https://skmtc.dev/openobserve/apis/openobserve-api-http.md) - [All operations](https://skmtc.dev/openobserve/apis/openobserve-api-http/llms.txt) - [OpenAPI document](https://skmtc.dev/openobserve/apis/openobserve-api-http/revisions/0529b8a10252?raw)
