---
title: "List every notification channel (v1.126)"
method: GET
path: "/agent/v1/notifications/channels"
tags: ["Agent"]
---

# List every notification channel (v1.126)

`GET /agent/v1/notifications/channels`

## Request

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

SIWX only, single-wallet scope (same grain as GET preferences). Unifies email, webhook, and every live (non-revoked) Telegram binding — pending bindings are included so a caller can poll status without re-reading the connect response.

## Headers

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

## Response `200`

Channel list

- object
  - `email` object
    - `address` string, nullable
    - `verified` boolean
  - `webhook` object
    - `configured` boolean
    - `url` string, nullable
    - `secret_configured` boolean
  - `telegram` TelegramBinding[]
    - `id` string, uuid
    - `recipient_email` string
    - `status` 'pending' | 'active': Revoked bindings are never returned by list reads (revoked_at IS NULL is the read filter).
    - `chat_id` integer, nullable: Populated once the owner taps the connect link; null while pending.
    - `chat_type` string, nullable
    - `chat_title` string, nullable
    - `label` string, nullable
    - `consecutive_failures` integer
    - `disabled_at` string, date-time, nullable: Set when 10 consecutive HARD delivery failures auto-disabled this binding (transient failures never count). A disabled binding still appears in this list — reconnect by deleting and re-creating, or PATCH a rule off it.
    - `code_expires_at` string, date-time, nullable: Present only while status=pending.
    - `created_at` string, date-time
    - `activated_at` string, date-time, nullable

---

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