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

# List notification channels

> Page through the notification channels belonging to your API key, newest first

export const MonitorsExperimental = () => <Warning>
    <strong>Monitors is experimental.</strong> Request and payload shapes can change without a deprecation window. Monitors isn't recommended for production workflows.
  </Warning>;

<MonitorsExperimental />

## Notes

* To authenticate, you'll need a [Tako API key](https://tako.com/console/api-keys). It's best practice to store it as an environment variable to avoid hardcoding sensitive credentials in your code.
* Returns your channels only, newest first. `limit` is 1–100 and defaults to 20; pass a response's `next_cursor` back as `cursor` for the next page.
* No row carries `secret`. A channel's signing secret is returned once, by [Create a notification channel](/api-reference/notification-channels-create).
* A `status` of `paused` with `status_reason: delivery_failures` means Tako paused the channel itself after two consecutive failed deliveries. A `paused` channel with a `null` `status_reason` is one you paused.


## OpenAPI

````yaml GET /v1/notification_channels
openapi: 3.1.0
info:
  title: Knowledge Search API
  version: 1.0.0
servers:
  - url: https://tako.com/api/
    description: Tako Production API Server
security: []
paths:
  /v1/notification_channels:
    get:
      tags:
        - monitors
      summary: List notification channels
      description: >-
        The caller's channels, newest first.


        **Experimental.** Request and payload shapes can change without a
        deprecation window. Monitors isn't recommended for production workflows.
      operationId: listNotificationChannels
      parameters:
        - description: Opaque pagination cursor from a previous response's next_cursor.
          required: false
          schema:
            type: string
          name: cursor
          in: query
        - description: Max items to return (default 20, max 100).
          required: false
          schema:
            type: integer
            maximum: 100
            minimum: 1
          name: limit
          in: query
      responses:
        '200':
          description: The caller's channels, newest first
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotificationChannelList'
        '400':
          description: Invalid request data (validation or malformed body).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BaseAPIError'
        '401':
          description: Missing or invalid API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BaseAPIError'
      security:
        - apiKey: []
components:
  schemas:
    NotificationChannelList:
      properties:
        items:
          items:
            $ref: '#/components/schemas/NotificationChannelResponse'
          type: array
          title: Items
        next_cursor:
          anyOf:
            - type: string
            - type: 'null'
          title: Next Cursor
      type: object
      required:
        - items
      title: NotificationChannelList
    BaseAPIError:
      properties:
        error_message:
          type: string
          title: Error Message
        error_type:
          $ref: '#/components/schemas/APIErrorType'
      type: object
      required:
        - error_message
        - error_type
      title: BaseAPIError
    NotificationChannelResponse:
      properties:
        id:
          type: string
          format: uuid
          title: Id
        name:
          type: string
          title: Name
        kind:
          $ref: '#/components/schemas/ChannelKind'
        url:
          type: string
          title: Url
        status:
          $ref: '#/components/schemas/ChannelStatus'
        status_reason:
          anyOf:
            - $ref: '#/components/schemas/ChannelStatusReason'
            - type: 'null'
          description: >-
            Why Tako paused the channel. Null while the channel is active, and
            null when you paused it yourself.
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - name
        - kind
        - url
        - status
        - status_reason
        - created_at
        - updated_at
      title: NotificationChannelResponse
    APIErrorType:
      type: string
      enum:
        - BAD_REQUEST
        - AUTHENTICATION_ERROR
        - INTERNAL_SERVER_ERROR
        - RELEVANT_RESULTS_NOT_FOUND
        - RATE_LIMIT_EXCEEDED
        - PAYMENT_REQUIRED
        - REQUEST_TIMEOUT
        - FORBIDDEN
        - NOT_FOUND
        - SERVICE_UNAVAILABLE
        - SERVICE_OVERLOADED
        - UNSUPPORTED_CONTENT_FORMAT
      title: APIErrorType
    ChannelKind:
      type: string
      enum:
        - webhook
        - slack_workflow
      title: ChannelKind
      description: >-
        How Tako shapes the request body it posts to a channel: `webhook` sends
        nested JSON that namespaces the monitor, the firing, and the payload,
        and `slack_workflow` sends a flat body of strings for a Slack Workflow
        Builder trigger, which rejects any nested value.
    ChannelStatus:
      type: string
      enum:
        - active
        - paused
      title: ChannelStatus
    ChannelStatusReason:
      type: string
      enum:
        - delivery_failures
      title: ChannelStatusReason
  securitySchemes:
    apiKey:
      type: apiKey
      name: X-API-Key
      in: header

````