> ## Documentation Index
> Fetch the complete documentation index at: https://docs.signa.so/llms.txt
> Use this file to discover all available pages before exploring further.

# List Alerts

> List alerts for the calling org with cursor pagination

## Overview

Returns alerts produced by any of the org's watches. Alerts are
**immutable** -- there is no `PATCH` or batch state operation. For polling
clients, the recommended pattern is:

1. Pull pages (newest first) until you encounter an `id` you've already
   processed.
2. Persist alert IDs in your own store as the system of record for "open
   work" / "acknowledged."

Required scope: `portfolios:manage`.

## Query Parameters

<ParamField query="limit" type="integer" default="20">Page size (1--100).</ParamField>
<ParamField query="cursor" type="string">Opaque cursor from the previous response.</ParamField>
<ParamField query="severity" type="string">Filter by `normal`, `high`, or `critical`.</ParamField>
<ParamField query="event_type" type="string">Filter by `trademark.created`, `trademark.updated`, or `trademark.status_changed`.</ParamField>
<ParamField query="epoch" type="string" default="all">`all` (default) returns alerts from every evaluation epoch; `current` returns only alerts emitted under each watch's current query revision.</ParamField>

<Note>
  The legacy `?after=` and `?after_seq=` parameters are explicitly rejected
  with `400`. Migrate to opaque `cursor` pagination.
</Note>

## Response

<ResponseField name="object" type="string">Always `"list"`.</ResponseField>

<ResponseField name="data" type="object[]">
  Array of `Alert` objects.

  <Expandable title="Alert">
    <ResponseField name="id" type="string">Alert ID (`alt_*`).</ResponseField>
    <ResponseField name="object" type="string">Always `"alert"`.</ResponseField>
    <ResponseField name="watch_id" type="string">Source watch (`wat_*`).</ResponseField>
    <ResponseField name="watch_name" type="string">Snapshot of watch name at evaluation time.</ResponseField>
    <ResponseField name="trademark_id" type="string">Matched trademark (`tm_*`).</ResponseField>
    <ResponseField name="event_type" type="string">Trigger event type.</ResponseField>
    <ResponseField name="content_version" type="integer">Mark version snapshot.</ResponseField>
    <ResponseField name="must_act_by" type="string | null">Computed action deadline (ISO).</ResponseField>
    <ResponseField name="opposition_window_status" type="string | null">One of `open`, `closing_soon`, `critical`, `closed`.</ResponseField>
    <ResponseField name="severity" type="string">`normal`, `high`, or `critical`.</ResponseField>
    <ResponseField name="created_at" type="string">ISO timestamp.</ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="has_more" type="boolean">Whether more pages exist.</ResponseField>
<ResponseField name="pagination" type="object">Cursor envelope.</ResponseField>
<ResponseField name="request_id" type="string">Request identifier.</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl "https://api.signa.so/v1/alerts?severity=critical&limit=50" \
    -H "Authorization: Bearer $SIGNA_API_KEY"
  ```

  ```ts TypeScript theme={null}
  const alerts = await signa.alerts.list({ severity: 'critical', limit: 50 });
  for await (const a of alerts) {
    if (a.opposition_window_status === 'critical') escalate(a);
  }
  ```
</RequestExample>
