> ## Documentation Index
> Fetch the complete documentation index at: https://novu-c5de82d9-docs-homepage-redesign.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# List all channel endpoints

> List all channel endpoints using the Novu REST API. Requires your environment secret key in the Authorization header.



## OpenAPI

````yaml GET /v1/channel-endpoints
openapi: 3.0.0
info:
  title: Novu API
  description: >-
    Novu REST API. Please see https://docs.novu.co/api-reference for more
    details.
  version: 3.15.0
  contact:
    name: Novu Support
    url: https://discord.gg/novu
    email: support@novu.co
  termsOfService: https://novu.co/terms
  license:
    name: MIT
    url: https://opensource.org/license/mit
servers:
  - url: https://api.novu.co
  - url: https://eu.api.novu.co
security:
  - secretKey: []
tags:
  - name: Events
    description: >-
      Events represent a change in state of a subscriber. They are used to
      trigger workflows, and enable you to send notifications to subscribers
      based on their actions.
    externalDocs:
      url: https://docs.novu.co/workflows
  - name: Subscribers
    description: >-
      A subscriber in Novu represents someone who should receive a message. A
      subscriber's profile information contains important attributes about the
      subscriber that will be used in messages (name, email). The subscriber
      object can contain other key-value pairs that can be used to further
      personalize your messages.
    externalDocs:
      url: https://docs.novu.co/subscribers/subscribers
  - name: Topics
    description: >-
      Topics are a way to group subscribers together so that they can be
      notified of events at once. A topic is identified by a custom key. This
      can be helpful for things like sending out marketing emails or notifying
      users of new features. Topics can also be used to send notifications to
      the subscribers who have been grouped together based on their interests,
      location, activities and much more.
    externalDocs:
      url: https://docs.novu.co/subscribers/topics
  - name: Integrations
    description: >-
      With the help of the Integration Store, you can easily integrate your
      favorite delivery provider. During the runtime of the API, the
      Integrations Store is responsible for storing the configurations of all
      the providers.
    externalDocs:
      url: https://docs.novu.co/platform/integrations/overview
  - name: Workflows
    description: >-
      All notifications are sent via a workflow. Each workflow acts as a
      container for the logic and blueprint that are associated with a type of
      notification in your system.
    externalDocs:
      url: https://docs.novu.co/workflows
  - name: Messages
    description: >-
      A message in Novu represents a notification delivered to a recipient on a
      particular channel. Messages contain information about the request that
      triggered its delivery, a view of the data sent to the recipient, and a
      timeline of its lifecycle events. Learn more about messages.
    externalDocs:
      url: https://docs.novu.co/workflows/messages
  - name: Environments
    description: >-
      Environments allow you to manage different stages of your application
      development lifecycle. Each environment has its own set of API keys and
      configurations, enabling you to separate development, staging, and
      production workflows.
    externalDocs:
      url: https://docs.novu.co/platform/environments
  - name: Layouts
    description: Layouts are reusable wrappers for your email notifications.
    externalDocs:
      url: https://docs.novu.co/platform/workflow/layouts
  - name: Translations
    description: Used to localize your notifications to different languages.
    externalDocs:
      url: https://docs.novu.co/platform/workflow/advanced-features/translations
  - name: Domains
    description: Used to manage your inbound email domains.
    externalDocs:
      url: https://docs.novu.co/platform/domains
externalDocs:
  description: Novu Documentation
  url: https://docs.novu.co
paths:
  /v1/channel-endpoints:
    get:
      tags:
        - Channel Endpoints
      summary: List all channel endpoints
      description: List all channel endpoints for a resource based on query filters.
      operationId: ChannelEndpointsController_listChannelEndpoints
      parameters:
        - name: after
          required: false
          in: query
          description: >-
            Cursor for pagination indicating the starting point after which to
            fetch results.
          schema:
            type: string
        - name: before
          required: false
          in: query
          description: >-
            Cursor for pagination indicating the ending point before which to
            fetch results.
          schema:
            type: string
        - name: limit
          required: false
          in: query
          description: Limit the number of items to return (max 100)
          example: 10
          schema:
            maximum: 100
            type: number
        - name: orderDirection
          required: false
          in: query
          description: Direction of sorting
          schema:
            type: string
            enum:
              - ASC
              - DESC
        - name: orderBy
          required: false
          in: query
          description: Field to order by
          schema:
            type: string
        - name: includeCursor
          required: false
          in: query
          description: Include cursor item in response
          schema:
            type: boolean
        - name: subscriberId
          required: false
          in: query
          description: The subscriber ID to filter results by
          example: subscriber-123
          schema:
            type: string
        - name: contextKeys
          required: false
          in: query
          description: 'Filter by exact context keys, order insensitive (format: "type:id")'
          example:
            - tenant:org-123
            - region:us-east-1
          schema:
            type: array
            items:
              type: string
        - name: channel
          required: false
          in: query
          description: Channel type to filter results.
          schema:
            enum:
              - in_app
              - email
              - sms
              - chat
              - push
            type: string
        - name: providerId
          required: false
          in: query
          description: Filter by provider identifier (e.g., sendgrid, twilio, slack, etc.).
          example: slack
          schema:
            $ref: '#/components/schemas/ProvidersIdEnum'
        - name: integrationIdentifier
          required: false
          in: query
          description: Integration identifier to filter results.
          example: slack-prod
          schema:
            type: string
        - name: connectionIdentifier
          required: false
          in: query
          description: Connection identifier to filter results.
          example: slack-connection-abc123
          schema:
            type: string
        - name: idempotency-key
          in: header
          description: A header for idempotency purposes
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          headers:
            Content-Type:
              $ref: '#/components/headers/Content-Type'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Idempotency-Key:
              $ref: '#/components/headers/Idempotency-Key'
            Idempotency-Replay:
              $ref: '#/components/headers/Idempotency-Replay'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListChannelEndpointsResponseDto'
        '400':
          description: Bad Request
          headers:
            Content-Type:
              $ref: '#/components/headers/Content-Type'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Idempotency-Key:
              $ref: '#/components/headers/Idempotency-Key'
            Idempotency-Replay:
              $ref: '#/components/headers/Idempotency-Replay'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '401':
          description: Unauthorized
          headers:
            Content-Type:
              $ref: '#/components/headers/Content-Type'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Idempotency-Key:
              $ref: '#/components/headers/Idempotency-Key'
            Idempotency-Replay:
              $ref: '#/components/headers/Idempotency-Replay'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '403':
          description: Forbidden
          headers:
            Content-Type:
              $ref: '#/components/headers/Content-Type'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Idempotency-Key:
              $ref: '#/components/headers/Idempotency-Key'
            Idempotency-Replay:
              $ref: '#/components/headers/Idempotency-Replay'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '404':
          description: Not Found
          headers:
            Content-Type:
              $ref: '#/components/headers/Content-Type'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Idempotency-Key:
              $ref: '#/components/headers/Idempotency-Key'
            Idempotency-Replay:
              $ref: '#/components/headers/Idempotency-Replay'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '405':
          description: Method Not Allowed
          headers:
            Content-Type:
              $ref: '#/components/headers/Content-Type'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Idempotency-Key:
              $ref: '#/components/headers/Idempotency-Key'
            Idempotency-Replay:
              $ref: '#/components/headers/Idempotency-Replay'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '409':
          description: Conflict
          headers:
            Content-Type:
              $ref: '#/components/headers/Content-Type'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Idempotency-Key:
              $ref: '#/components/headers/Idempotency-Key'
            Idempotency-Replay:
              $ref: '#/components/headers/Idempotency-Replay'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '413':
          description: Payload Too Large
          headers:
            Content-Type:
              $ref: '#/components/headers/Content-Type'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Idempotency-Key:
              $ref: '#/components/headers/Idempotency-Key'
            Idempotency-Replay:
              $ref: '#/components/headers/Idempotency-Replay'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '414':
          description: URI Too Long
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '415':
          description: Unsupported Media Type
          headers:
            Content-Type:
              $ref: '#/components/headers/Content-Type'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Idempotency-Key:
              $ref: '#/components/headers/Idempotency-Key'
            Idempotency-Replay:
              $ref: '#/components/headers/Idempotency-Replay'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '422':
          description: Unprocessable Entity
          headers:
            Content-Type:
              $ref: '#/components/headers/Content-Type'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Idempotency-Key:
              $ref: '#/components/headers/Idempotency-Key'
            Idempotency-Replay:
              $ref: '#/components/headers/Idempotency-Replay'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationErrorDto'
        '429':
          description: 'The client has sent too many requests in a given amount of time. '
          headers:
            Content-Type:
              $ref: '#/components/headers/Content-Type'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Idempotency-Key:
              $ref: '#/components/headers/Idempotency-Key'
            Idempotency-Replay:
              $ref: '#/components/headers/Idempotency-Replay'
            Retry-After:
              $ref: '#/components/headers/Retry-After'
          content:
            application/json:
              schema:
                type: string
                example: API rate limit exceeded
        '500':
          description: Internal Server Error
          headers:
            Content-Type:
              $ref: '#/components/headers/Content-Type'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Idempotency-Key:
              $ref: '#/components/headers/Idempotency-Key'
            Idempotency-Replay:
              $ref: '#/components/headers/Idempotency-Replay'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '503':
          description: >-
            The server is currently unable to handle the request due to a
            temporary overload or scheduled maintenance, which will likely be
            alleviated after some delay.
          headers:
            Content-Type:
              $ref: '#/components/headers/Content-Type'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Idempotency-Key:
              $ref: '#/components/headers/Idempotency-Key'
            Idempotency-Replay:
              $ref: '#/components/headers/Idempotency-Replay'
            Retry-After:
              $ref: '#/components/headers/Retry-After'
          content:
            application/json:
              schema:
                type: string
                example: Please wait some time, then try again.
      security:
        - secretKey: []
        - secretKey: []
      x-codeSamples:
        - lang: php
          label: PHP
          source: >-
            declare(strict_types=1);


            require 'vendor/autoload.php';


            use novu;

            use novu\Models\Components;

            use novu\Models\Operations;


            $sdk = novu\Novu::builder()
                ->setSecurity(
                    'YOUR_SECRET_KEY_HERE'
                )
                ->build();

            $request = new
            Operations\ChannelEndpointsControllerListChannelEndpointsRequest(
                limit: 10,
                subscriberId: 'subscriber-123',
                contextKeys: [
                    'tenant:org-123',
                    'region:us-east-1',
                ],
                providerId: Components\ProvidersIdEnum::Slack,
                integrationIdentifier: 'slack-prod',
                connectionIdentifier: 'slack-connection-abc123',
            );


            $response = $sdk->channelEndpoints->list(
                request: $request
            );


            if ($response->listChannelEndpointsResponseDto !== null) {
                // handle response
            }
        - lang: python
          label: Python
          source: |-
            import novu_py
            from novu_py import Novu


            with Novu(
                secret_key="YOUR_SECRET_KEY_HERE",
            ) as novu:

                res = novu.channel_endpoints.list(request={
                    "limit": 10,
                    "subscriber_id": "subscriber-123",
                    "context_keys": [
                        "tenant:org-123",
                        "region:us-east-1",
                    ],
                    "provider_id": novu_py.ProvidersIDEnum.SLACK,
                    "integration_identifier": "slack-prod",
                    "connection_identifier": "slack-connection-abc123",
                })

                # Handle response
                print(res)
        - lang: go
          label: Go
          source: "package main\n\nimport(\n\t\"context\"\n\t\"github.com/novuhq/novu-go/v3\"\n\t\"github.com/novuhq/novu-go/v3/models/components\"\n\t\"github.com/novuhq/novu-go/v3/models/operations\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := v3.New(\n        v3.WithSecurity(\"YOUR_SECRET_KEY_HERE\"),\n    )\n\n    res, err := s.ChannelEndpoints.List(ctx, operations.ChannelEndpointsControllerListChannelEndpointsRequest{\n        Limit: v3.Pointer[float64](10.0),\n        SubscriberID: v3.Pointer(\"subscriber-123\"),\n        ContextKeys: []string{\n            \"tenant:org-123\",\n            \"region:us-east-1\",\n        },\n        ProviderID: components.ProvidersIDEnumSlack.ToPointer(),\n        IntegrationIdentifier: v3.Pointer(\"slack-prod\"),\n        ConnectionIdentifier: v3.Pointer(\"slack-connection-abc123\"),\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res.ListChannelEndpointsResponseDto != nil {\n        // handle response\n    }\n}"
        - lang: typescript
          label: TypeScript
          source: |-
            import { Novu } from "@novu/api";

            const novu = new Novu({
              secretKey: "YOUR_SECRET_KEY_HERE",
            });

            async function run() {
              const result = await novu.channelEndpoints.list({
                limit: 10,
                subscriberId: "subscriber-123",
                contextKeys: [
                  "tenant:org-123",
                  "region:us-east-1",
                ],
                providerId: "slack",
                integrationIdentifier: "slack-prod",
                connectionIdentifier: "slack-connection-abc123",
              });

              console.log(result);
            }

            run();
        - lang: csharp
          label: Csharp (SDK)
          source: >-
            using Novu;

            using Novu.Models.Components;

            using Novu.Models.Requests;

            using System.Collections.Generic;


            var sdk = new NovuSDK(secretKey: "YOUR_SECRET_KEY_HERE");


            ChannelEndpointsControllerListChannelEndpointsRequest req = new
            ChannelEndpointsControllerListChannelEndpointsRequest() {
                Limit = 10D,
                SubscriberId = "subscriber-123",
                ContextKeys = new List<string>() {
                    "tenant:org-123",
                    "region:us-east-1",
                },
                ProviderId = ProvidersIdEnum.Slack,
                IntegrationIdentifier = "slack-prod",
                ConnectionIdentifier = "slack-connection-abc123",
            };


            var res = await sdk.ChannelEndpoints.ListAsync(req);


            // handle response
components:
  schemas:
    ProvidersIdEnum:
      type: string
      description: Provider ID of the job
      enum:
        - emailjs
        - mailgun
        - mailjet
        - mandrill
        - nodemailer
        - postmark
        - sendgrid
        - sendinblue
        - ses
        - netcore
        - infobip-email
        - resend
        - plunk
        - mailersend
        - mailtrap
        - clickatell
        - outlook365
        - novu-email
        - sparkpost
        - email-webhook
        - braze
        - novu-email-agent
        - nexmo
        - plivo
        - sms77
        - sms-central
        - sns
        - telnyx
        - twilio
        - gupshup
        - firetext
        - infobip-sms
        - burst-sms
        - bulk-sms
        - isend-sms
        - forty-six-elks
        - kannel
        - maqsam
        - termii
        - africas-talking
        - novu-sms
        - sendchamp
        - generic-sms
        - clicksend
        - bandwidth
        - messagebird
        - simpletexting
        - azure-sms
        - ring-central
        - brevo-sms
        - eazy-sms
        - mobishastra
        - afro-message
        - unifonic
        - smsmode
        - imedia
        - sinch
        - isendpro-sms
        - cm-telecom
        - fcm
        - apns
        - expo
        - one-signal
        - pushpad
        - push-webhook
        - pusher-beams
        - appio
        - novu
        - slack
        - discord
        - msteams
        - mattermost
        - ryver
        - zulip
        - grafana-on-call
        - getstream
        - rocket-chat
        - whatsapp-business
        - chat-webhook
        - novu-slack
        - telegram
        - anthropic
        - novu-anthropic
        - anthropic-aws
    ListChannelEndpointsResponseDto:
      type: object
      properties:
        data:
          description: List of returned Channel Endpoints
          type: array
          items:
            $ref: '#/components/schemas/GetChannelEndpointResponseDto'
        next:
          type: string
          description: >-
            The cursor for the next page of results, or null if there are no
            more pages.
          nullable: true
        previous:
          type: string
          description: >-
            The cursor for the previous page of results, or null if this is the
            first page.
          nullable: true
        totalCount:
          type: number
          description: The total count of items (up to 50,000)
        totalCountCapped:
          type: boolean
          description: Whether there are more than 50,000 results available
      required:
        - data
        - next
        - previous
        - totalCount
        - totalCountCapped
    ErrorDto:
      type: object
      properties:
        statusCode:
          type: number
          description: HTTP status code of the error response.
          example: 404
        timestamp:
          type: string
          description: Timestamp of when the error occurred.
          example: '2024-12-12T13:00:00Z'
        path:
          type: string
          description: The path where the error occurred.
          example: /api/v1/resource
        message:
          description: Value that failed validation
          oneOf:
            - type: string
              nullable: true
            - type: number
            - type: boolean
            - type: object
              nullable: true
            - type: array
              items:
                anyOf:
                  - type: string
                    nullable: true
                  - type: number
                  - type: boolean
                  - type: object
                    additionalProperties: true
          example: 'xx xx xx '
        ctx:
          type: object
          description: Optional context object for additional error details.
          additionalProperties: true
          example:
            workflowId: some_wf_id
            stepId: some_wf_id
        errorId:
          type: string
          description: >-
            Optional unique identifier for the error, useful for tracking using
            Sentry and 
                  New Relic, only available for 500.
          example: abc123
      required:
        - statusCode
        - timestamp
        - path
    ValidationErrorDto:
      type: object
      properties:
        statusCode:
          type: number
          description: HTTP status code of the error response.
          example: 404
        timestamp:
          type: string
          description: Timestamp of when the error occurred.
          example: '2024-12-12T13:00:00Z'
        path:
          type: string
          description: The path where the error occurred.
          example: /api/v1/resource
        message:
          description: Value that failed validation
          oneOf:
            - type: string
              nullable: true
            - type: number
            - type: boolean
            - type: object
              nullable: true
            - type: array
              items:
                anyOf:
                  - type: string
                    nullable: true
                  - type: number
                  - type: boolean
                  - type: object
                    additionalProperties: true
          example: 'xx xx xx '
        ctx:
          type: object
          description: Optional context object for additional error details.
          additionalProperties: true
          example:
            workflowId: some_wf_id
            stepId: some_wf_id
        errorId:
          type: string
          description: >-
            Optional unique identifier for the error, useful for tracking using
            Sentry and 
                  New Relic, only available for 500.
          example: abc123
        errors:
          type: object
          description: A record of validation errors keyed by field name
          additionalProperties:
            $ref: '#/components/schemas/ConstraintValidation'
          example:
            fieldName1:
              messages:
                - Field is required
                - Must be a valid email address
              value: invalidEmail
            fieldName2:
              messages:
                - Must be at least 18 years old
              value: 17
            fieldName3:
              messages:
                - Must be a boolean value
              value: true
            fieldName4:
              messages:
                - Must be a valid object
              value:
                key: value
            fieldName5:
              messages:
                - Field is missing
              value: null
            fieldName6:
              messages:
                - Undefined value
      required:
        - statusCode
        - timestamp
        - path
        - errors
    GetChannelEndpointResponseDto:
      type: object
      properties:
        identifier:
          type: string
          description: The unique identifier of the channel endpoint.
        channel:
          nullable: true
          enum:
            - in_app
            - email
            - sms
            - chat
            - push
          type: string
          description: The channel type (email, sms, push, chat, etc.).
        providerId:
          type: string
          nullable: true
          description: The provider identifier (e.g., sendgrid, twilio, slack, etc.).
          enum:
            - emailjs
            - mailgun
            - mailjet
            - mandrill
            - nodemailer
            - postmark
            - sendgrid
            - sendinblue
            - ses
            - netcore
            - infobip-email
            - resend
            - plunk
            - mailersend
            - mailtrap
            - clickatell
            - outlook365
            - novu-email
            - sparkpost
            - email-webhook
            - braze
            - novu-email-agent
            - nexmo
            - plivo
            - sms77
            - sms-central
            - sns
            - telnyx
            - twilio
            - gupshup
            - firetext
            - infobip-sms
            - burst-sms
            - bulk-sms
            - isend-sms
            - forty-six-elks
            - kannel
            - maqsam
            - termii
            - africas-talking
            - novu-sms
            - sendchamp
            - generic-sms
            - clicksend
            - bandwidth
            - messagebird
            - simpletexting
            - azure-sms
            - ring-central
            - brevo-sms
            - eazy-sms
            - mobishastra
            - afro-message
            - unifonic
            - smsmode
            - imedia
            - sinch
            - isendpro-sms
            - cm-telecom
            - fcm
            - apns
            - expo
            - one-signal
            - pushpad
            - push-webhook
            - pusher-beams
            - appio
            - novu
            - slack
            - discord
            - msteams
            - mattermost
            - ryver
            - zulip
            - grafana-on-call
            - getstream
            - rocket-chat
            - whatsapp-business
            - chat-webhook
            - novu-slack
            - telegram
            - anthropic
            - novu-anthropic
            - anthropic-aws
          example: slack
        integrationIdentifier:
          type: string
          nullable: true
          description: The identifier of the integration to use for this channel endpoint.
          example: slack-prod
        connectionIdentifier:
          type: string
          nullable: true
          description: The identifier of the channel connection used for this endpoint.
          example: slack-connection-abc123
        subscriberId:
          type: string
          nullable: true
          description: The subscriber ID to which the channel endpoint is linked
          example: subscriber-123
        contextKeys:
          description: The context of the channel connection
          example:
            - tenant:org-123
            - region:us-east-1
          type: array
          items:
            type: string
        type:
          type: string
          description: Type of channel endpoint
          enum:
            - slack_channel
            - slack_user
            - webhook
            - phone
            - ms_teams_channel
            - ms_teams_user
            - telegram_chat
          example: slack_channel
        endpoint:
          description: Endpoint data specific to the channel type
          oneOf:
            - $ref: '#/components/schemas/SlackChannelEndpointDto'
            - $ref: '#/components/schemas/SlackUserEndpointDto'
            - $ref: '#/components/schemas/WebhookEndpointDto'
            - $ref: '#/components/schemas/PhoneEndpointDto'
            - $ref: '#/components/schemas/MsTeamsChannelEndpointDto'
            - $ref: '#/components/schemas/MsTeamsUserEndpointDto'
            - $ref: '#/components/schemas/TelegramChatEndpointDto'
        createdAt:
          type: string
          description: >-
            The timestamp indicating when the channel endpoint was created, in
            ISO 8601 format.
        updatedAt:
          type: string
          description: >-
            The timestamp indicating when the channel endpoint was last updated,
            in ISO 8601 format.
      required:
        - identifier
        - channel
        - providerId
        - integrationIdentifier
        - connectionIdentifier
        - subscriberId
        - contextKeys
        - type
        - endpoint
        - createdAt
        - updatedAt
    ConstraintValidation:
      type: object
      properties:
        messages:
          type: array
          items:
            type: string
          description: List of validation error messages
          example:
            - Field is required
            - Invalid format
        value:
          description: Value that failed validation
          oneOf:
            - type: string
              nullable: true
            - type: number
            - type: boolean
            - type: object
            - type: array
              items:
                anyOf:
                  - type: string
                    nullable: true
                  - type: number
                  - type: boolean
                  - type: object
                    additionalProperties: true
          example: 'xx xx xx '
      required:
        - messages
    SlackChannelEndpointDto:
      type: object
      properties:
        channelId:
          type: string
          description: Slack channel ID
          example: C123456789
      required:
        - channelId
    SlackUserEndpointDto:
      type: object
      properties:
        userId:
          type: string
          description: Slack user ID
          example: U123456789
      required:
        - userId
    WebhookEndpointDto:
      type: object
      properties:
        url:
          type: string
          description: Webhook URL
          example: https://example.com/webhook
        channel:
          type: string
          description: Optional channel identifier
      required:
        - url
    PhoneEndpointDto:
      type: object
      properties:
        phoneNumber:
          type: string
          description: Phone number in E.164 format
          example: '+1234567890'
      required:
        - phoneNumber
    MsTeamsChannelEndpointDto:
      type: object
      properties:
        teamId:
          type: string
          description: MS Teams team ID
          example: 19:abc123...@thread.tacv2
        channelId:
          type: string
          description: MS Teams channel ID
          example: 19:def456...@thread.tacv2
      required:
        - teamId
        - channelId
    MsTeamsUserEndpointDto:
      type: object
      properties:
        userId:
          type: string
          description: MS Teams user ID
          example: 29:1234567890abcdef
      required:
        - userId
    TelegramChatEndpointDto:
      type: object
      properties:
        chatId:
          type: string
          description: Telegram chat ID
          example: '123456789'
      required:
        - chatId
  headers:
    Content-Type:
      required: true
      description: The MIME type of the response body.
      schema:
        type: string
      example: application/json
    RateLimit-Limit:
      required: false
      description: >-
        The number of requests that the client is permitted to make per second.
        The actual maximum may differ when burst is enabled.
      schema:
        type: string
      example: '100'
    RateLimit-Remaining:
      required: false
      description: The number of requests remaining until the next window.
      schema:
        type: string
      example: '93'
    RateLimit-Reset:
      required: false
      description: >-
        The remaining seconds until a request of the same cost will be
        refreshed.
      schema:
        type: string
      example: '8'
    RateLimit-Policy:
      required: false
      description: The rate limit policy that was used to evaluate the request.
      schema:
        type: string
      example: >-
        100;w=1;burst=110;comment="token
        bucket";category="trigger";cost="single"
    Idempotency-Key:
      required: false
      description: The idempotency key used to evaluate the request.
      schema:
        type: string
      example: '8'
    Idempotency-Replay:
      required: false
      description: Whether the request was a replay of a previous request.
      schema:
        type: string
      example: 'true'
    Retry-After:
      required: false
      description: >-
        The number of seconds after which the client may retry the request that
        was previously rejected.
      schema:
        type: string
      example: '8'
  securitySchemes:
    secretKey:
      type: apiKey
      name: Authorization
      in: header
      description: >-
        API key authentication. Allowed headers-- "Authorization: ApiKey
        <novu_secret_key>".
      x-speakeasy-example: YOUR_SECRET_KEY_HERE

````