---
title: "Get one operator notification by id"
method: GET
path: "/agent/v1/notifications/{notification_id}"
tags: ["Agent"]
---

# Get one operator notification by id

`GET /agent/v1/notifications/{notification_id}`

## Request

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

## Path parameters

- `notification_id` string, uuid, required

## Headers

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

## Response `200`

Single audit row

- 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

## Other responses

- `404`: Not found (or outside the caller's scope)

---

[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)
