---
title: "Update a channel endpoint"
method: PATCH
path: "/v1/channel-endpoints/{identifier}"
tags: ["Channel Endpoints"]
---

# Update a channel endpoint

`PATCH /v1/channel-endpoints/{identifier}`

Update an existing channel endpoint by its unique identifier.

## Path parameters

- `identifier` string, required

## Request body

- UpdateChannelEndpointRequestDto
  - `endpoint` union, required — Updated endpoint data. The structure must match the existing channel endpoint type.
    - SlackChannelEndpointDto
      - `channelId` string, required — Slack channel ID
    - SlackUserEndpointDto
      - `userId` string, required — Slack user ID
    - WebhookEndpointDto
      - `url` string, required — Webhook URL
      - `channel` string — Optional channel identifier
    - PhoneEndpointDto
      - `phoneNumber` string, required — Phone number in E.164 format
    - WebexRoomEndpointDto
      - `roomId` string, required — Webex room ID
      - `parentId` string — Optional Webex parent message ID for threaded replies
    - WebexPersonEndpointDto
      - `personId` string — Webex person ID. Provide exactly one of personId or personEmail.
      - `personEmail` string — Webex person email. Provide exactly one of personId or personEmail.
    - ToolWebhookEndpointDto
      - `url` string, required — Destination webhook URL (often a per-subscriber capability URL). Encrypted at rest on the channel endpoint (`endpoint` field).
      - `headers` object — Optional headers (e.g. auth tokens) sent with every request to this webhook. Header values are encrypted at rest on the channel endpoint (`endpoint` field).
      - `method` 'POST' | 'PUT' | 'PATCH' — Optional HTTP method override for this webhook. Defaults to the integration-level method.

## Response `200`

OK

- GetChannelEndpointResponseDto
  - `identifier` string, required — The unique identifier of the channel endpoint.
  - `channel` 'in_app' | 'email' | 'sms' | 'chat' | 'push' | 'tool', nullable, required — The channel type (email, sms, push, chat, etc.).
  - `providerId` 'anypost' | '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' | 'ruach-sms' | 'fcm' | 'apns' | 'expo' | 'one-signal' | 'pushpad' | 'push-webhook' | 'pusher-beams' | 'appio' | 'novu' | 'slack' | 'discord' | 'msteams' | 'webex-messaging' | 'mattermost' | 'ryver' | 'zulip' | 'grafana-on-call' | 'getstream' | 'rocket-chat' | 'whatsapp-business' | 'line' | 'chat-webhook' | 'novu-slack' | 'telegram' | 'sendblue' | 'novu-web-chat' | 'anthropic' | 'novu-anthropic' | 'anthropic-aws' | 'pagerduty' | 'opsgenie' | 'grafana' | 'tool-webhook', nullable, required — The provider identifier (e.g., sendgrid, twilio, slack, etc.).
  - `integrationIdentifier` string, nullable, required — The identifier of the integration to use for this channel endpoint.
  - `connectionIdentifier` string, nullable, required — The identifier of the channel connection used for this endpoint.
  - `subscriberId` string, nullable, required — The subscriber ID to which the channel endpoint is linked
  - `contextKeys` string[], required — The context of the channel connection
  - `type` 'slack_channel' | 'slack_user' | 'webhook' | 'phone' | 'ms_teams_channel' | 'ms_teams_user' | 'telegram_chat' | 'webex_room' | 'webex_person' | 'line_user' | 'pagerduty_service' | 'opsgenie_integration' | 'grafana_oncall_integration' | 'tool_webhook', required — Type of channel endpoint
  - `endpoint` union, required — Endpoint data specific to the channel type
    - SlackChannelEndpointDto
      - `channelId` string, required — Slack channel ID
    - SlackUserEndpointDto
      - `userId` string, required — Slack user ID
    - WebhookEndpointDto
      - `url` string, required — Webhook URL
      - `channel` string — Optional channel identifier
    - PhoneEndpointDto
      - `phoneNumber` string, required — Phone number in E.164 format
    - MsTeamsChannelEndpointDto
      - `teamId` string, required — MS Teams team ID
      - `channelId` string, required — MS Teams channel ID
    - MsTeamsUserEndpointDto
      - `userId` string, required — MS Teams user ID
    - TelegramChatEndpointDto
      - `chatId` string, required — Telegram chat ID
    - WebexRoomEndpointDto
      - `roomId` string, required — Webex room ID
      - `parentId` string — Optional Webex parent message ID for threaded replies
    - WebexPersonEndpointDto
      - `personId` string — Webex person ID. Provide exactly one of personId or personEmail.
      - `personEmail` string — Webex person email. Provide exactly one of personId or personEmail.
    - LineUserEndpointDto
      - `userId` string, required — LINE user ID
    - PagerDutyServiceEndpointDto
      - `routingKey` string, required — PagerDuty Events API v2 integration key (32-character alphanumeric string). Encrypted at rest on the channel endpoint (`endpoint` field).
      - `region` 'us' | 'eu', required — PagerDuty account region — determines the events API data-center endpoint.
    - OpsgenieIntegrationEndpointDto
      - `apiKey` string, required — Opsgenie API integration key (GenieKey) in UUID format. Encrypted at rest on the channel endpoint (`endpoint` field).
      - `region` 'us' | 'eu', required — Opsgenie account region that determines the alert API data-center endpoint.
    - GrafanaOnCallIntegrationEndpointDto
      - `url` string, required — Grafana IRM/OnCall incoming-webhook (Formatted Webhook) integration URL. The routing secret is embedded in the URL path. Encrypted at rest on the channel endpoint (`endpoint` field).
      - `authToken` string — Optional Grafana service account bearer token, required when the integration enforces authenticated ingestion. Encrypted at rest on the channel endpoint (`endpoint` field).
    - ToolWebhookEndpointDto
      - `url` string, required — Destination webhook URL (often a per-subscriber capability URL). Encrypted at rest on the channel endpoint (`endpoint` field).
      - `headers` object — Optional headers (e.g. auth tokens) sent with every request to this webhook. Header values are encrypted at rest on the channel endpoint (`endpoint` field).
      - `method` 'POST' | 'PUT' | 'PATCH' — Optional HTTP method override for this webhook. Defaults to the integration-level method.
  - `createdAt` string, required — The timestamp indicating when the channel endpoint was created, in ISO 8601 format.
  - `updatedAt` string, required — The timestamp indicating when the channel endpoint was last updated, in ISO 8601 format.

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not Found
- `405` — Method Not Allowed
- `409` — Conflict
- `413` — Payload Too Large
- `414` — URI Too Long
- `415` — Unsupported Media Type
- `422` — Unprocessable Entity
- `429` — The client has sent too many requests in a given amount of time.
- `500` — Internal Server Error
- `503` — 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.

---

[API](https://skmtc.net/novu/apis/deprecated-novu-api-use-openapi-json-yaml-instead.md) · [All operations](https://skmtc.net/novu/apis/deprecated-novu-api-use-openapi-json-yaml-instead/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/novu/deprecated-novu-api-use-openapi-json-yaml-instead/versions/986fe259fa85/schema)
