Channels

Notification channels define where WatchCron sends alerts when a check goes down (or recovers). The API lets you list all channels configured in your project.

Channels are currently read-only via the API. To create or configure notification channels, use the WatchCron dashboard. We plan to add channel CRUD endpoints in a future API version.

List channels

GET /api/v1/channels

Returns all notification channels in the project associated with your API key.

curl -H "Authorization: Bearer YOUR_API_KEY" \
     "https://watchcron.com/api/v1/channels"
$response = Http::withToken('YOUR_API_KEY')
    ->get('https://watchcron.com/api/v1/channels');

$channels = $response->json('data');
response = requests.get(
    "https://watchcron.com/api/v1/channels",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
)

channels = response.json()["data"]
const response = await fetch(
  "https://watchcron.com/api/v1/channels",
  { headers: { "Authorization": "Bearer YOUR_API_KEY" } }
);

const { data: channels } = await response.json();

Response 200 OK

JSON
{
  "data": [
    {
      "id": 1,
      "name": "DevOps Email",
      "type": "email",
      "is_active": true,
      "checks_count": 15,
      "created_at": "2026-03-10T08:00:00Z"
    },
    {
      "id": 2,
      "name": "#alerts Slack",
      "type": "slack",
      "is_active": true,
      "checks_count": 8,
      "created_at": "2026-04-15T12:30:00Z"
    },
    {
      "id": 3,
      "name": "On-call webhook",
      "type": "webhook",
      "is_active": false,
      "checks_count": 0,
      "created_at": "2026-05-20T09:15:00Z"
    }
  ]
}

Channel object fields

FieldTypeDescription
idintegerChannel identifier
namestringDisplay name of the channel
typestringChannel type (see table below)
is_activebooleanWhether the channel is enabled
checks_countintegerNumber of checks using this channel
created_atstringISO 8601 timestamp

Channel types

TypeDescriptionAvailable on
emailEmail notificationsAll plans
webhookHTTP webhook (JSON payload)All plans
slackSlack incoming webhookStarter+
telegramTelegram bot messageStarter+
discordDiscord webhookStarter+
ms_teamsMicrosoft Teams connectorStarter+
smsSMS text messagePro+
voiceVoice phone callBusiness
pagerdutyPagerDuty incidentPro+
opsgenieOpsGenie alertPro+
pushoverPushover push notificationStarter+
google_chatGoogle Chat webhookStarter+
ntfyNtfy push notificationStarter+

Webhook payload

When a check flips status and a webhook channel is configured, WatchCron sends a POST request to your webhook URL with this JSON payload:

Webhook payload (POST to your URL)
{
  "event": "check.down",
  "check": {
    "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "name": "Nightly Backup",
    "status": "down",
    "last_ping_at": "2026-09-13T02:00:12Z"
  },
  "project": {
    "name": "Production"
  },
  "timestamp": "2026-09-14T02:15:00Z"
}