---
title: "Create Channel"
method: POST
path: "/v1/channels"
tags: ["Channels"]
---

# Create Channel

`POST /v1/channels`

## Request

- Base URL: `https://api.fettle.sh` (the document declares no server; this is the origin it was published from)
- URL: `https://api.fettle.sh/v1/channels`
- Auth: API key in header `Authorization`

Create a notification channel for the active organization.

For a webhook channel the response includes the signing ``secret`` once — it
is not retrievable afterwards. For Slack and Discord channels, the incoming
webhook URL is encrypted and never returned after creation.

## Headers

- `X-Organization-Id` string, uuid, nullable

## Request body

- NotificationChannelCreate: Request body for ``POST /v1/channels``. TELEGRAM, WEBHOOK, SLACK, and DISCORD channels can be created through the API. EMAIL is the account email, exposed read-only by the list endpoint and never created here. For WEBHOOK, ``destination`` is the https delivery URL (SSRF-checked) and the signing secret is generated server-side and returned once on create. For SLACK and DISCORD, ``destination`` is the incoming-webhook URL (stored encrypted; a masked display string is returned on reads).
  - `type` 'EMAIL' | 'TELEGRAM' | 'WEBHOOK' | 'SLACK' | 'DISCORD': Transport for a user notification channel.
  - `destination` string, required
  - `label` string, nullable

## Response `201`

Successful Response

- NotificationChannelCreatedRead: Create response. ``secret`` is the plaintext webhook signing key, shown EXACTLY ONCE (only for WEBHOOK channels); ``None`` for EMAIL/TELEGRAM/SLACK/DISCORD. It is never returned by GET or PATCH — store it on receipt.
  - `id` string, uuid, nullable, required
  - `type` 'EMAIL' | 'TELEGRAM' | 'WEBHOOK' | 'SLACK' | 'DISCORD', required: Transport for a user notification channel.
  - `destination` string, required
  - `label` string, nullable, required
  - `is_verified` boolean, required
  - `is_active` boolean, required
  - `created_at` string, date-time, nullable, required
  - `updated_at` string, date-time, nullable, required
  - `secret` string, nullable

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/fettle/apis/fettle-sh.md) · [All operations](https://skmtc.dev/fettle/apis/fettle-sh/llms.txt) · [OpenAPI document](https://skmtc.dev/fettle/apis/fettle-sh/revisions/f32c8a18606f?raw)
