Skip to content

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).


  1. Open the dashboard and click the webhook icon on any monitor card.
  2. Click “Add webhook”.
  3. Choose an integration type: Slack, Discord, PagerDuty, or Generic POST.
  4. Enter a name and the destination URL.
  5. 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).


Paste a Slack Incoming Webhook URL. PingRoot sends a formatted message with the monitor URL, status, and timestamp.

Paste a Discord webhook URL. PingRoot sends an embed with the monitor status and error details.

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.

Any HTTP endpoint that accepts a JSON body. PingRoot sends a signed POST request with the payload below.


{
"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.


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.


  • 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 2xx status code.
  • After 6 failed attempts, the event is marked as failed and no further retries occur.

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.