---
title: "Set Notification Channel"
method: PUT
path: "/channel_associations/notification_channel"
tags: ["channels"]
---

# Set Notification Channel

`PUT /channel_associations/notification_channel`

## Request

- Base URL: `https://api.imperfect.co` (the document declares no server; this is the origin it was published from)
- URL: `https://api.imperfect.co/channel_associations/notification_channel`
- Auth: HTTP bearer

Choose where the coach's notifications go: a linked channel, or the app.

``{"channel": null}`` sends them to the app's push only. A channel the
athlete has no live link on is a 404 and changes nothing. Answers with the
resulting ``notification_channel``, the same field the GET reads. A
channel that can't take notifications right now, such as iMessage while
its deploy keeps it off, is a 409 and changes nothing.

## Query parameters

- `user_id` string, nullable

## Request body

- NotificationChannelRequest: Body of ``PUT /channel_associations/notification_channel``. The channel the coach's notifications go to, or ``null`` for the app only. Required, so an empty body is a 422 rather than a silent switch-off.
  - `channel` 'whatsapp' | 'imessage' | 'heylo', required: Messaging channel discriminator on the generic channel-associations core. One value per integrated bridge. Adding a channel = new enum value + new :class:`cheshire.channels.bridge.BridgeClient` impl + new thin webhook route. No new backend tables — every channel reuses ``channel_associations`` / ``channel_association_requests``.

## Response `200`

Successful Response

- object

## Other responses

- `422`: Validation Error

## Changes

- **2026-10-08** `524e36c570b0`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/imperfect/apis/imperfect-api/changes/channel_associations/notification_channel/put.md)

---

[API](https://skmtc.dev/imperfect/apis/imperfect-api.md) - [All operations](https://skmtc.dev/imperfect/apis/imperfect-api/llms.txt) - [OpenAPI document](https://skmtc.dev/imperfect/apis/imperfect-api/revisions/33a8821ec7f8?raw)
