Webhook Notifications
PingRoot can send a POST request to one or more URLs when a monitor goes down or recovers. Webhooks are available on Pro and Team plans.
Supported integrations: Slack, Discord, PagerDuty, and any custom HTTP endpoint (Generic POST).
Adding a Webhook
Section titled “Adding a Webhook”- Open the dashboard and click the webhook icon on any monitor card.
- Click “Add webhook”.
- Choose an integration type: Slack, Discord, PagerDuty, or Generic POST.
- Enter a name and the destination URL.
- Save. PingRoot stores the endpoint and begins delivering events immediately.
You can add multiple webhooks per monitor, up to the limit for your plan (Pro: 5, Team: unlimited).
Integration Types
Section titled “Integration Types”Paste a Slack Incoming Webhook URL. PingRoot sends a formatted message with the monitor URL, status, and timestamp.
Discord
Section titled “Discord”Paste a Discord webhook URL. PingRoot sends an embed with the monitor status and error details.
PagerDuty
Section titled “PagerDuty”In PagerDuty, go to your service, add an Events API v2 integration, and copy the Integration URL (format: https://events.pagerduty.com/v2/enqueue?routing_key=...). Paste it here. PingRoot triggers and resolves incidents automatically on DOWN / UP transitions.
Generic POST
Section titled “Generic POST”Any HTTP endpoint that accepts a JSON body. PingRoot sends a signed POST request with the payload below.
Generic POST Payload
Section titled “Generic POST Payload”{ "event": "monitor.down", "monitor": { "id": "mon_abc123", "url": "https://api.example.com/health", "name": "Production API" }, "status": "down", "error": "Expected 200, got 503", "timestamp": "2024-01-15T14:32:07.000Z"}For recovery events, "event" is "monitor.up" and "error" is null.
Signature Verification
Section titled “Signature Verification”Every Generic POST request includes an X-PingRoot-Signature header containing an HMAC-SHA256 signature of the raw request body, signed with your webhook’s secret key.
The header value is prefixed with sha256= — for example: sha256=abc123...
To verify the signature, use the raw request body string before any JSON parsing:
import { createHmac, timingSafeEqual } from "crypto";
function verifySignature(rawBody, signatureHeader, secret) { const expected = "sha256=" + createHmac("sha256", secret) .update(rawBody) .digest("hex"); return timingSafeEqual(Buffer.from(signatureHeader), Buffer.from(expected));}You can view or rotate the secret key for each webhook endpoint from the webhook panel in the dashboard.
Delivery & Retries
Section titled “Delivery & Retries”- Webhooks are delivered asynchronously — there is no in-line delay to your monitors.
- PingRoot retries up to 6 times per event with exponential backoff: Attempt 1 → wait 1s → Attempt 2 → wait 2s → Attempt 3 → wait 4s → Attempt 4 → wait 8s → Attempt 5 → wait 16s → Attempt 6 (final)
- A delivery is considered successful when the destination returns any
2xxstatus code. - After 6 failed attempts, the event is marked as failed and no further retries occur.
Delivery Logs
Section titled “Delivery Logs”Click the logs icon next to any webhook endpoint to view the delivery log for that endpoint.
Each log entry shows:
- Event type (down / up)
- HTTP status code returned by your endpoint
- Delivery timestamp
- Error message if the delivery failed
Use delivery logs to debug connection issues or verify that events are being received correctly.