Notifications
Configure where alerts are delivered and manage browser push subscriptions. All endpoints are authenticated with a Bearer JWT (see Authentication).
Endpoints
| Method | Path | Description |
|---|---|---|
GET | /api/v1/notification-channels | List notification channels |
POST | /api/v1/notification-channels | Create a channel |
PUT | /api/v1/notification-channels/{channel_id} | Update a channel |
DELETE | /api/v1/notification-channels/{channel_id} | Delete a channel |
POST | /api/v1/notification-channels/{channel_id}/test | Send a test notification |
GET | /api/v1/push/vapid-public-key | Get the public key for web-push |
POST | /api/v1/push/subscribe | Register a web-push subscription |
DELETE | /api/v1/push/subscribe | Remove a web-push subscription |
Notification channels
A channel describes one delivery destination. Channel-specific settings go in the config object; secret values are masked in responses. Webhook and chat destinations must use HTTPS and a public host.
Supported channel_type values: email, slack, webhook, sms, msteams, telegram, pagerduty, opsgenie, servicenow, jira.
Create a channel
POST /api/v1/notification-channels
Email:
{
"name": "Maintenance Team Email",
"channel_type": "email",
"config": { "to_email": "maintenance@example.com" },
"is_active": true,
"notify_on_alert": true
}
Slack:
{
"name": "Alerts Slack",
"channel_type": "slack",
"config": { "webhook_url": "https://hooks.slack.com/services/T00/B00/XXXX" },
"is_active": true,
"notify_on_alert": true
}
Generic webhook:
{
"name": "Custom Integration",
"channel_type": "webhook",
"config": {
"url": "https://example.com/webhook",
"headers": { "X-Custom-Header": "value" }
},
"is_active": true,
"notify_on_alert": true
}
Response:
{
"id": "...",
"tenant_id": "...",
"channel_type": "slack",
"name": "Alerts Slack",
"config": { "webhook_url": "***" },
"is_active": true,
"notify_on_alert": true,
"created_by": "USER_UUID",
"created_at": "2026-08-05T10:00:00Z"
}
Test a channel
POST /api/v1/notification-channels/{channel_id}/test
Sends a test message to the channel and reports whether it succeeded.
{ "success": true }
Web push
Deliver alerts as browser push notifications. See the Webhook & delivery setup guide for end-to-end wiring.
Get the public key
GET /api/v1/push/vapid-public-key
{ "public_key": "BMod…", "enabled": true }
When enabled is false, web push is not available and subscribe calls return 503.
Subscribe
POST /api/v1/push/subscribe
Register the browser PushSubscription for the current user's device.
{
"endpoint": "https://push.example.com/subscription/abc123",
"keys": { "p256dh": "BEl…", "auth": "k9X…" },
"user_agent": "Mozilla/5.0 …"
}
{ "subscribed": true }
Unsubscribe
DELETE /api/v1/push/subscribe
Send the same endpoint to remove the subscription. Returns 404 if no matching subscription exists.