---
title: "Send a test notification"
method: POST
path: "/channels/{channel}/test"
tags: ["Channels"]
---

# Send a test notification

`POST /channels/{channel}/test`

## Request

- Base URL: `https://api.spectate.net/v1`
- URL: `https://api.spectate.net/v1/channels/{channel}/test`
- Auth: HTTP bearer

Delivers a test through the channel right away and returns when it was accepted. A
successful test clears the failure count and, with `enable`, turns a disabled channel back
on. A failed test (`422` `CHANNEL_TEST_FAILED`) doesn't count towards turning it off. SMS
and voice tests use the team's notification credits (`422` `NOTIFICATION_CREDITS_EXHAUSTED`
without them). Limited to 10 tests a minute per token.

## Path parameters

- `channel` string, uuid, required

## Request body

- TestChannel: Options of a channel test.
  - `enable` boolean: Enable the channel again when the test succeeds, also after Spectate turned it off. Default `false`

## Response `200`

The test was delivered.

- ChannelTestResult: A test notification that was delivered.
  - `message` string, required: What was sent
  - `channel` Channel, required: A notification channel: where escalation paths send alerts. The settings of its type are in the object of that name (`email`, `slack`…); the others are `null`. Secrets (webhook URLs, tokens, header values) are never returned.
    - `id` string, uuid, required: Channel ID
    - `name` string, required: Name shown in escalation paths
    - `type` 'email' | 'slack' | 'discord' | 'microsoft_teams' | 'telegram' | 'webhook' | 'pushover' | 'sms' | 'voice', required
    - `enabled` boolean, required: Whether the channel delivers. `false` when a member turned it off or Spectate did after repeated failures (`auto_disabled`)
    - `auto_disabled` boolean, required: Whether Spectate turned the channel off because deliveries kept failing. Fix the cause, then enable it or send a test with `enable`
    - `disabled_at` string, date-time, nullable, required: When the channel was turned off automatically
    - `disabled_reason` string, nullable, required: Why it was turned off automatically
    - `consecutive_failures` integer, required: Failed deliveries since the last successful one
    - `failing_since` string, date-time, nullable, required: Since when deliveries fail
    - `last_failure_at` string, date-time, nullable, required: When a delivery last failed
    - `last_failure_reason` string, nullable, required: Why the last delivery failed
    - `last_delivered_at` string, date-time, nullable, required: When a delivery last succeeded
    - `email` ChannelEmail, required: Where an `email` channel sends.
      - `address` string, email, required: The address alerts go to
    - `slack` ChannelSlack, required: Where a `slack` channel posts: a channel of a Slack workspace connected under Integrations.
      - `installation_id` string, uuid, nullable, required: The team's Slack installation (workspace) that posts. `null` for older channels with their own bot token
      - `channel` string, required: The Slack channel ID
      - `channel_name` string, nullable, required: The channel's name, for display
    - `telegram` ChannelTelegram, required: The chat a `telegram` channel sends to. Telegram channels are connected from the dashboard (Alerting → Channels), not through the API.
      - `chat_id` string, required: The Telegram chat ID
      - `chat_title` string, nullable, required: The chat's title, for display
    - `webhook` ChannelWebhook, required: What a `webhook` channel sends. The URL and header values can hold credentials, so only the host and the header names are returned.
      - `host` string, nullable, required: The host of the URL the channel posts to
      - `header_names` string[], required: Names of the headers it sends
    - `pushover` ChannelPushover, required: Who a `pushover` channel notifies. The application token is write-only.
      - `user_key` string, required: The Pushover user or group key
      - `priority` integer, nullable, required: Pushover priority, -2 (lowest) to 2 (emergency); `null` for normal (0)
    - `sms` ChannelPhone, required: The phone an `sms` or `voice` channel reaches. Each message or call uses the team's notification credits.
      - `phone_number` string, required: The phone number in international format
    - `voice` ChannelPhone, required: The phone an `sms` or `voice` channel reaches. Each message or call uses the team's notification credits.
      - `phone_number` string, required: The phone number in international format
    - `created_at` string, date-time, required: When the channel was created

## Other responses

- `401`: `UNAUTHENTICATED`: no token was sent. `INVALID_TOKEN`: the token is unknown or revoked. `TOKEN_EXPIRED`: the token has expired.
- `403`: `FORBIDDEN`: the token lacks an ability this endpoint requires (listed in `details.required_abilities`). `TEAM_PENDING_DELETION`: the team is scheduled for deletion. `TEAM_SUSPENDED`: Spectate suspended the team.
- `404`: `RESOURCE_NOT_FOUND`: there is no such resource in this team.
- `422`: `CHANNEL_TEST_FAILED`: the test couldn't be delivered; the message has the delivery error, `details.permanent` whether the settings are wrong. `NOTIFICATION_CREDITS_EXHAUSTED`: the team has no SMS and voice credits left; buy more under Billing.
- `429`: `RATE_LIMITED`: too many requests for this token. Wait for the number of seconds in `Retry-After`.

---

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