---
title: "List operator notifications (audit log)"
method: GET
path: "/agent/v1/notifications"
tags: ["Agent"]
---

# List operator notifications (audit log)

`GET /agent/v1/notifications`

## Request

- Base URL: `https://api.run402.com`
- URL: `https://api.run402.com/agent/v1/notifications`
- Auth: API key in header `SIGN-IN-WITH-X`

Read the per-delivery-attempt audit log. Single-wallet scope by default; cross-wallet rollup requires email_verified assurance on the authenticated wallet. Redacted rows return payload: null.

## Query parameters

- `type` string
- `since` string, date-time
- `limit` integer
- `offset` integer

## Headers

- `SIGN-IN-WITH-X` string, required

## Response `200`

Paginated audit rows

- object
  - `notifications` OwnerNotificationRow[]
    - `id` string, uuid
    - `recipient_email` string, nullable
    - `kind` 'digest' | 'lifecycle_event' | 'threshold_alert' | 'missing_verified_recipient'
    - `event_type` string, nullable
    - `channel` 'email' | 'webhook' | 'skipped' | 'telegram': telegram (notification-channel-routing-telegram, v1.126): every Telegram delivery attempt (queue-fed platform pass or the app-lane outbox tail) audits here alongside email/webhook.
    - `delivery_status` 'delivered' | 'failed_transient' | 'failed_permanent' | 'skipped_no_recipient' | 'skipped_disabled' | 'deferred': deferred (v1.126): a Telegram send that overflowed its per-chat/global rate budget and was pushed to the next ~60s tick — never silently dropped.
    - `delivery_error` string, nullable
    - `subject` object: notification-render-context: the project identity as it was RESOLVED at delivery time and shown in the message. Present only for project-scoped notifications whose subject resolved; individual fields are omitted (never empty) when unresolved. Rows written before this shipped have no subject key. Not part of the signed webhook envelope.
      - `project_id` string
      - `project_name` string
      - `org_id` string, uuid
      - `organization_display_name` string
      - `serving_host` string: Bound active custom domain if any, else the managed <subdomain>.run402.com host.
    - `attempt_count` integer
    - `is_test` boolean
    - `related_project_id` string, nullable
    - `related_org_id` string, uuid, nullable
    - `related_wallet_address` string, nullable
    - `created_at` string, date-time
    - `redacted_at` string, date-time, nullable
    - `payload` object, nullable: null when row has been redacted past its retention window
  - `pagination` object
    - `limit` integer
    - `offset` integer
    - `returned` integer

---

[API](https://skmtc.dev/run402/apis/run402-api.md) · [All operations](https://skmtc.dev/run402/apis/run402-api/llms.txt) · [OpenAPI document](https://skmtc.dev/run402/apis/run402-api/revisions/893607557f50?raw)
