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

# Read and filter the notifications feed

> How the dashboard notifications page renders each alert — category icons, kind and severity filters, read state, and live updates.

# Read and filter the notifications feed

The **notifications page** (`/notifications`, reached from the bell in the top bar) renders your org's in-app alerts as a virtualised list. Each row is a category icon, a title and body, a relative timestamp, and a severity badge — and rows with an action link open straight into the surface that resolves them (security alerts to your security settings, wallet alerts to billing, delivery alerts to the email module). This page is the operations counterpart to [Triage the Notification Center](/guides/in-dashboard-notifications), which covers delivery channels, digests, retention, and the API.

Above the feed, the page also pins **Active platform alerts** — persistent cross-module issue states (outbound paused, KYC pending, compliance risk, webhook backlog, number document expiry) — so the center is never empty while a real issue is outstanding.

## Category taxonomy

Every notification has a **kind** — a closed enum that the page's filter dropdown mirrors exactly, so a kind can never be invisible to filtering. Each kind renders with a dedicated icon; kinds without a mapping fall back to the severity glyph (info circle, warning triangle, or error octagon), and ultimately to a generic bell, so newly added kinds always render something recognisable.

### Platform events

| Kind                                 | Triggered by                                                                                                                               | Row icon              |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | --------------------- |
| `campaign_completed`                 | A campaign finished sending                                                                                                                | Megaphone             |
| `campaign_failed`                    | A campaign finished with errors                                                                                                            | Error octagon         |
| `payment_failed`                     | A charge on your payment method failed                                                                                                     | Credit card           |
| `top_up_succeeded`                   | Wallet top-up succeeded; funds available                                                                                                   | Wallet                |
| `credit_low`                         | Balance running low                                                                                                                        | Wallet                |
| `wallet_emptied`                     | Wallet hit zero; outbound is paused until you top up                                                                                       | Error octagon         |
| `unusual_billing_activity`           | Unusual billing activity detected                                                                                                          | Credit card           |
| `number_renewal_failed`              | A number's renewal charge hit an empty wallet (see the [insufficient-balance troubleshooting tree](/troubleshooting/insufficient-balance)) | Wallet                |
| `dlq_alert`                          | Webhook deliveries backing up in the dead-letter queue                                                                                     | Error octagon         |
| `webhook_endpoint_disabled`          | A webhook endpoint auto-disabled after repeated failures                                                                                   | Error octagon         |
| `webhook_endpoint_decryption_failed` | A webhook endpoint's signing secret could not be decrypted                                                                                 | Error octagon         |
| `port_status_changed`                | A number port status changed                                                                                                               | Phone-forwarded glyph |
| `telnyx_regulatory_approved`         | Regulatory bundle approved                                                                                                                 | Shield-check          |
| `telnyx_regulatory_declined`         | Regulatory bundle declined                                                                                                                 | Shield-alert          |
| `telnyx_number_order_complete`       | Number order finished provisioning                                                                                                         | Hash                  |
| `telnyx_number_order_failed`         | Number order could not be provisioned                                                                                                      | Error octagon         |
| `telnyx_port_request_status_changed` | Port request status changed                                                                                                                | Phone-forwarded glyph |
| `number_compliance_requested`        | A purchased number needs compliance documents to activate                                                                                  | Shield-alert          |
| `kyc_decision`                       | Your KYC submission was reviewed                                                                                                           | Shield-check          |
| `sender_id_review`                   | A sender ID needs review                                                                                                                   | Tag                   |
| `compliance_incident`                | A compliance gate fired on a recent send                                                                                                   | Warning triangle      |
| `email_dns_regression`               | Your email DNS records regressed; deliverability at risk                                                                                   | Mail                  |
| `system_alert`                       | Generic platform alert                                                                                                                     | Info circle           |

### Security alerts

| Kind                           | Triggered by                           | Row icon     |
| ------------------------------ | -------------------------------------- | ------------ |
| `new_signin_from_new_ip`       | Account accessed from a new IP address | Shield-alert |
| `new_signin_from_new_device`   | Account accessed from a new device     | Shield-alert |
| `password_changed`             | Password changed                       | Key          |
| `email_changed`                | Primary email changed                  | Mail         |
| `recovery_email_changed`       | Recovery email changed                 | Mail         |
| `two_factor_disabled`          | Two-factor auth disabled               | Shield-alert |
| `two_factor_method_removed`    | A two-factor method removed            | Shield-alert |
| `mfa_backup_codes_regenerated` | Backup codes regenerated               | Key          |
| `api_key_created`              | A new API key created                  | Key          |
| `api_key_revoked`              | An API key revoked                     | Key          |
| `org_member_role_changed`      | A teammate's role changed              | Users        |
| `org_member_removed`           | A teammate removed from the org        | Users        |

<Note>
  Security kinds are **always shown** regardless of your notification preferences — suppressible preferences would let a hijacked session mute the takeover signal.
</Note>

### Agent and inbox activity

| Kind                          | Triggered by                                            | Row icon              |
| ----------------------------- | ------------------------------------------------------- | --------------------- |
| `agent_handoff_pending`       | An AI agent escalated a conversation; a human is needed | Phone-forwarded glyph |
| `inbox_new_conversation`      | A new customer conversation opened                      | Message bubble        |
| `inbox_new_message`           | A customer replied on a conversation                    | Message bubble        |
| `inbox_conversation_assigned` | A conversation assigned to you                          | Message bubble        |
| `inbox_mention`               | A teammate mentioned you in a note                      | At sign               |
| `inbox_sla_breach`            | A conversation breached its SLA target                  | Warning triangle      |

On rows, severity is tinted across the icon and badge: blue for info, amber for warning, red for error. Rows with warning or error severity also carry an explicit severity pill next to the timestamp.

## Filters and read state

Three filters combine freely in the **Filters** card; a **Clear** control appears whenever any filter is active:

* **Unread only** — toggle that narrows the feed to unread rows.
* **Kind** — dropdown mirroring the full kind enum. The list is group-ordered (security kinds cluster together, inbox kinds cluster together) rather than alphabetised, matching how you think about what you're filtering for.
* **Severity** — `info`, `warning`, or `error`.

A malformed filter value never errors the page — it is ignored and the feed loads unfiltered.

### Read, dismiss, retention

* **Mark read** — hover a row to reveal its check button, or open the row (opening marks it read). **Mark all read** in the header clears the badge in one click.
* **Dismiss** — hover a user-scoped row to reveal the dismiss control; the row hides immediately and the delete commits after a short undo window (\~5s). Org-wide rows show no dismiss control — they expire on their own clock.
* **Retention** — rows carrying an expiry timestamp drop out of every list and unread count once it passes; rows without one persist until dismissed.

History loads in cursor-paginated pages with a **Load more** control. The list is virtualised, so only the visible window of rows mounts in the DOM no matter how many pages you accumulate.

## Live updates

The page subscribes to the notification **live stream**, so a new row lands without a refresh and read state stays in sync across open browser tabs. If the live channel hiccups, the unread-count badge self-corrects on its next poll, so the badge can never get stuck on a stale number.

Security-critical kinds (sign-in from a new IP or device, 2FA changes, password or email change, API key mint/revoke, member-role changes, billing anomalies) always mint a row and always bypass per-category mutes — a hijacked session can't silence the takeover signal.

## Choosing the right channel

Notifications are **for a human operator**; webhooks are **for your code**. A notification is a durable UI row an operator triages from the dashboard — no endpoint to expose. A webhook is a server-to-server POST to an endpoint you control, processed automatically. Developer-facing failure modes (dead-letter queue, endpoint auto-disabled, decryption failures) mint both, so an operator sees the failure even when your webhook handler isn't watching. For the full webhook event catalog, see [Webhook events](/webhooks/events).

Outbound push notifications to your end users — the push APIs (`/push/categories`, `/push/scheduled`, `/push/telemetry`) — are covered in the [push integration guide](/guides/push-integration) and [push notification categories](/guides/push-notification-categories). For programmatic access to the in-app feed itself (list, unread count, mark-read, dismiss, SSE stream), see [Notifications API](/api-reference/notifications).
