# Create an alert channel

`POST /service/@id/uptime/channels` · Tino Uptime, service owner's sign-in token

A new channel awaits verification, except an email to the account owner's own verified address. `verification.method` names the next step: `email_code` (code in the email, valid 24 hours), `telegram_link` (open `telegram_url` within 10 minutes), `test_message` (Discord, Slack, webhook: call [verify the channel](/en/docs/api/uptime-post-channels-channel-verify) to send a test message), `zalo_link`, `zalo_otp`. A webhook channel returns `webhook_secret` (`whsec_…`) once only. HTTP 201. A channel type outside the plan's `limits.channels` answers 403 `entitlement_exceeded`.

## HTTP request

| Item | Value |
| --- | --- |
| URL | `https://api.tino.vn/service/@id/uptime/channels` |
| Method | `POST` |
| Authentication | the Tino Uptime service owner's sign-in token (`Authorization: Bearer <token>`); the `/v1` gateway does not expose Tino Uptime yet |
| Content-Type | `application/json` |

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | int | yes | Tino Uptime service ID |
| `kind` | body | string | yes | `email`, `telegram`, `discord`, `slack`, `webhook` or `zalo`, within the plan's `limits.channels` |
| `name` | body | string | yes | Channel name, 1–100 characters |
| `config` | body | object | no | `address` for email; `url` (https) for Discord, Slack, webhook; Zalo: `consent: true` and `phone` (mobile number, verified by OTP) or no `phone` to link through the OA; Telegram needs none |
| `idempotency_key` | body | string | no | 8–128 characters `A-Za-z0-9._:-`: resending the same key and body creates nothing new |

## Example request

```bash
curl -X POST "https://api.tino.vn/service/100002/uptime/channels" \
  -H "Authorization: Bearer $TINO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "kind": "email",
  "name": "Email kỹ thuật",
  "config": {
    "address": "ops@example.com"
  },
  "idempotency_key": "kenh-email-ops-0001"
}'
```

`$TINO_TOKEN` is the Tino Uptime service owner's sign-in token. Path parameters in the example are sample values.

SDK ([SDK & examples](/en/docs/sdk)): no dedicated function yet, use `client.request("POST", "/service/@id/uptime/channels")`.

## Example response

```json
{
 "data": {
  "id": "c41e8b20-6d7f-4a1c-9b3e-5f2a8d0c6e17",
  "kind": "email",
  "name": "Email kỹ thuật",
  "target": "o***@example.com",
  "verified_at": null,
  "opted_in_at": null,
  "disabled_reason": null,
  "last_sent_at": null,
  "link_pending": false,
  "route_key": null,
  "created_at": "2026-10-24T10:40:00+07:00",
  "verification": {
   "method": "email_code",
   "expires_at": "2026-10-25T10:40:00+07:00"
  }
 }
}
```

Sample built from the Tino Uptime OpenAPI (Tino relays the answer as is inside `data`); values are examples.
