---
title: "Confirm Channel Association"
method: POST
path: "/channel_associations"
tags: ["channels"]
---

# Confirm Channel Association

`POST /channel_associations`

Bind the channel identity from the token to the authenticated user.

Mounted on both ``POST /channel_associations`` (canonical, #858) and
``POST /whatsapp_associations`` (legacy alias kept so the existing
mobile client keeps working without a coordinated release). Both routes
share this handler; the channel is resolved from the token's
:class:`ChannelAssociationRequest` row.

## Query parameters

- `user_id` string, nullable

## Headers

- `accept-language` string, nullable
- `x-device-timezone` string, nullable
- `x-units` string, nullable

## Request body

- ChannelAssociationConfirmRequest — Body of the mobile-side confirm call after tapping the deep link. Channel-blind by #858: the token alone identifies which channel and which channel-user the request was minted for, so the body shape stays a single field across all channels.
  - `token` string, required

## Response `200`

Successful Response

- object

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/imperfect/apis/imperfect-api.md) · [All operations](https://skmtc.dev/imperfect/apis/imperfect-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/imperfect/imperfect-api/revisions/cc2293a44257/schema)
