Notification Service
Not yet available on FTStatus
The FTStatus SDKs aren't available yet. Talk to support if you need programmatic access for your account.
Manage notification channels for monitor alerts. The Notification Service provides 7 RPC methods.
Create Notification
import {
createFTStatusClient,
NotificationProvider,
} from "@openstatus/sdk-node";
const client = createFTStatusClient({
apiKey: process.env.OPENSTATUS_API_KEY,
});
const { notification } = await client.notification.v1.NotificationService
.createNotification({
name: "Slack Alerts",
provider: NotificationProvider.SLACK,
data: {
data: {
case: "slack",
value: { webhookUrl: "https://hooks.slack.com/services/..." },
},
},
monitorIds: ["mon_123", "mon_456"],
});
console.log(`Notification created: ${notification?.id}`);
The data field uses a nested oneof pattern: the outer data is the NotificationData message, and data.data is the oneof that selects the provider-specific configuration. The case must match the provider type in lowercase.
Provider Configurations
Each provider shown as a complete createNotification call.
Slack
const { notification } = await client.notification.v1.NotificationService
.createNotification({
name: "Slack Alerts",
provider: NotificationProvider.SLACK,
data: {
data: {
case: "slack",
value: { webhookUrl: "https://hooks.slack.com/services/..." },
},
},
monitorIds: ["mon_123"],
});
Discord
const { notification } = await client.notification.v1.NotificationService
.createNotification({
name: "Discord Alerts",
provider: NotificationProvider.DISCORD,
data: {
data: {
case: "discord",
value: { webhookUrl: "https://discord.com/api/webhooks/..." },
},
},
monitorIds: ["mon_123"],
});
const { notification } = await client.notification.v1.NotificationService
.createNotification({
name: "Email Alerts",
provider: NotificationProvider.EMAIL,
data: {
data: {
case: "email",
value: { email: "alerts@example.com" },
},
},
monitorIds: ["mon_123"],
});
Opsgenie
import { NotificationProvider, OpsgenieRegion } from "@openstatus/sdk-node";
const { notification } = await client.notification.v1.NotificationService
.createNotification({
name: "Opsgenie Alerts",
provider: NotificationProvider.OPSGENIE,
data: {
data: {
case: "opsgenie",
value: { apiKey: "your-api-key", region: OpsgenieRegion.US },
},
},
monitorIds: ["mon_123"],
});
Telegram
const { notification } = await client.notification.v1.NotificationService
.createNotification({
name: "Telegram Alerts",
provider: NotificationProvider.TELEGRAM,
data: {
data: {
case: "telegram",
value: { chatId: "123456789" },
},
},
monitorIds: ["mon_123"],
});
Google Chat
const { notification } = await client.notification.v1.NotificationService
.createNotification({
name: "Google Chat Alerts",
provider: NotificationProvider.GOOGLE_CHAT,
data: {
data: {
case: "googleChat",
value: { webhookUrl: "https://chat.googleapis.com/v1/spaces/..." },
},
},
monitorIds: ["mon_123"],
});
Grafana OnCall
const { notification } = await client.notification.v1.NotificationService
.createNotification({
name: "Grafana OnCall",
provider: NotificationProvider.GRAFANA_ONCALL,
data: {
data: {
case: "grafanaOncall",
value: { webhookUrl: "https://oncall.example.com/..." },
},
},
monitorIds: ["mon_123"],
});
Ntfy
const { notification } = await client.notification.v1.NotificationService
.createNotification({
name: "Ntfy Alerts",
provider: NotificationProvider.NTFY,
data: {
data: {
case: "ntfy",
value: {
topic: "my-alerts",
serverUrl: "https://ntfy.sh",
token: "tk_...",
},
},
},
monitorIds: ["mon_123"],
});
SMS
const { notification } = await client.notification.v1.NotificationService
.createNotification({
name: "SMS Alerts",
provider: NotificationProvider.SMS,
data: {
data: {
case: "sms",
value: { phoneNumber: "+1234567890" },
},
},
monitorIds: ["mon_123"],
});
const { notification } = await client.notification.v1.NotificationService
.createNotification({
name: "WhatsApp Alerts",
provider: NotificationProvider.WHATSAPP,
data: {
data: {
case: "whatsapp",
value: { phoneNumber: "+1234567890" },
},
},
monitorIds: ["mon_123"],
});
Custom Webhook
const { notification } = await client.notification.v1.NotificationService
.createNotification({
name: "Custom Webhook",
provider: NotificationProvider.WEBHOOK,
data: {
data: {
case: "webhook",
value: {
endpoint: "https://api.example.com/webhook",
headers: [
{ key: "Authorization", value: "Bearer token" },
{ key: "X-Custom-Header", value: "value" },
],
},
},
},
monitorIds: ["mon_123"],
});
See the webhook payload reference for the exact JSON your endpoint receives, the optional fields, and how to authenticate requests.
Send Test Notification
Verify a notification configuration without creating a channel.
import { NotificationProvider } from "@openstatus/sdk-node";
const { success, errorMessage } = await client.notification.v1
.NotificationService.sendTestNotification({
provider: NotificationProvider.SLACK,
data: {
data: {
case: "slack",
value: { webhookUrl: "https://hooks.slack.com/services/..." },
},
},
});
if (success) {
console.log("Test notification sent successfully");
} else {
console.log(`Test failed: ${errorMessage}`);
}
Check Notification Limits
Check if the workspace has reached its notification channel limit.
const { limitReached, currentCount, maxCount } = await client.notification.v1
.NotificationService.checkNotificationLimit({});
console.log(`${currentCount}/${maxCount} notification channels used`);
if (limitReached) {
console.log("Notification limit reached — upgrade your plan");
}
List / Get / Update / Delete Notifications
List Notifications
const { notifications, totalSize } = await client.notification.v1
.NotificationService.listNotifications({ limit: 10, offset: 0 });
console.log(`Found ${totalSize} notification channels`);
Get Notification
import { NotificationProvider } from "@openstatus/sdk-node";
const { notification } = await client.notification.v1.NotificationService
.getNotification({ id: "notif_123" });
console.log(`Name: ${notification?.name}`);
console.log(`Provider: ${NotificationProvider[notification?.provider ?? 0]}`);
Update Notification
const { notification } = await client.notification.v1.NotificationService
.updateNotification({
id: "notif_123",
name: "Updated Slack Alerts",
monitorIds: ["mon_123", "mon_456", "mon_789"],
});
Delete Notification
const { success } = await client.notification.v1.NotificationService
.deleteNotification({ id: "notif_123" });
