Notification Channels
ShipPulse can send real-time alerts to Slack, Discord, Telegram, and any webhook URL when monitors go down, incidents are created, or changelog entries are published. Configure channels in project Settings → Notifications.
Events that trigger notifications
| Event | Channels | Description |
|---|---|---|
| monitor.down | All | A monitor fails its health check |
| monitor.recovered | All | A previously down monitor recovers |
| incident.created | All | A new incident is opened |
| incident.updated | All | An update is posted to an incident |
| incident.resolved | All | An incident is marked resolved |
| changelog.published | All | A new changelog entry is published |
| testimonial.submitted | Slack, Webhook | A new testimonial is submitted |
| feedback.submitted | Slack, Webhook | A new feedback request is submitted |
Slack
ShipPulse uses Slack Incoming Webhooks to post formatted messages to a channel of your choice.
Message format
ShipPulse posts rich Slack blocks. Example for a monitor down event:
{
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "🔴 *Monitor down* — api.yourapp.com
HTTP 503 · 2 consecutive failures"
}
},
{
"type": "actions",
"elements": [
{
"type": "button",
"text": { "type": "plain_text", "text": "View incident" },
"url": "https://shippulse.dev/dashboard/..."
}
]
}
]
}Discord
ShipPulse posts to Discord via channel webhooks with rich embed formatting.
Embed format
{
"embeds": [{
"title": "🔴 Monitor down — api.yourapp.com",
"description": "HTTP 503 · 2 consecutive failures",
"color": 16711680,
"fields": [
{ "name": "Project", "value": "My App", "inline": true },
{ "name": "Impact", "value": "Major", "inline": true }
],
"timestamp": "2026-04-07T12:34:56Z"
}]
}Telegram
ShipPulse sends messages to a Telegram chat via the Bot API. You need a bot token and a chat ID.
SMS / Phone
ShipPulse can send SMS alerts via Twilio when monitors go down, incidents are created, or other critical events occur. Useful for on-call engineers who need to be paged immediately.
Cost: ~$0.0085/SMS in the US. Messages are capped at 320 characters (2 SMS segments) to minimise cost. You can add multiple SMS channels for different on-call phone numbers.
Generic webhook
Send ShipPulse events to any HTTP endpoint — useful for custom alerting, PagerDuty, OpsGenie, or your own backend. The payload format is identical to the Webhooks reference.
Setup
Settings → Notifications → Add channel → Webhook. Enter your endpoint URL and choose events. ShipPulse will POST JSON to your URL for each event.
HMAC verification
Each request includes a X-ShipPulse-Signature header — an HMAC-SHA256 hash of the raw body using your webhook secret. Verify it to reject forged requests:
import { createHmac } from "crypto";
export function verifySignature(
rawBody: string,
signature: string,
secret: string,
): boolean {
const expected = createHmac("sha256", secret)
.update(rawBody)
.digest("hex");
return `sha256=${expected}` === signature;
}
// In your webhook handler
app.post("/webhooks/shippulse", (req, res) => {
const sig = req.headers["x-shippulse-signature"] as string;
const valid = verifySignature(req.rawBody, sig, process.env.WEBHOOK_SECRET!);
if (!valid) return res.status(401).send("Invalid signature");
const { event, data } = req.body;
// Handle event...
res.status(200).send("ok");
});Email notifications
Email notifications are sent for the following events:
Managing subscribers
All public-facing subscriptions (changelog, status, roadmap) are double-opt-in. Subscribers can unsubscribe via a link in every email. You can view and manage subscribers in the module settings of your project dashboard.
Custom sender domain
By default, emails are sent from [email protected]. On Agency plan, you can send from your own domain by adding SPF/DKIM records and verifying your domain in Settings → Email → Custom sender.