---
title: "Create a channel binding (two-step)"
method: POST
path: "/api/orgs/{orgId}/channels"
tags: ["channels"]
---

# Create a channel binding (two-step)

`POST /api/orgs/{orgId}/channels`

## Request

- Base URL: `https://api.wizbi.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.wizbi.ai/api/orgs/{orgId}/channels`
- Auth: none declared

`confirm:false` returns a preview of the binding as it would be stored; `confirm:true` stores it.

## Path parameters

- `orgId` string, required

## Request body

- ChannelBindingCreate
  - `channel` 'web' | 'mcp' | 'rest' | 'whatsapp' | 'whatsapp_web' | 'telegram' | 'sms' | 'slack' | 'teams' | 'email' | 'voice' | 'scheduled', required
  - `externalId` string, required
  - `displayName` string
  - `config` object
  - `secretRefs` object
  - `secrets` object
  - `rooms` object[]
    - `roomId` string, required
    - `name` string
    - `active` boolean
    - `membersOnly` boolean
    - `mediaOpen` boolean
    - `dedicated` boolean
    - `gateDomainHints` string[]
    - `gateAskHints` string[]
    - `boundBy` string
    - `boundAt` string, date-time
    - `orgId` string
    - `settings` object
  - `membersOnly` boolean
  - `mediaOpen` boolean
  - `dedicated` boolean
  - `gateDomainHints` string[]
  - `gateAskHints` string[]
  - `status` 'pending' | 'active' | 'disabled' | 'error'
  - `breakGlassReason` string
  - `confirm` boolean

## Response `200`

Preview.

- object
  - `preview` object, required
  - `catalog` object, nullable, required

## Other responses

- `201`: Created.
- `400`: Invalid.
- `401`: Unauthenticated.
- `403`: Forbidden.
- `409`: A binding for this external id already exists.

---

[API](https://skmtc.dev/wizbi/apis/wizbi-core-api.md) · [All operations](https://skmtc.dev/wizbi/apis/wizbi-core-api/llms.txt) · [OpenAPI document](https://skmtc.dev/wizbi/apis/wizbi-core-api/revisions/5a47416c82ec?raw)
