Docs Webhook alerts

Webhook alerts

A webhook is the escape hatch for anything PingArk does not speak natively. PingArk sends a JSON POST to your endpoint every time a check goes down or recovers, and you do whatever you like with it: open a ticket, notify an internal system, or fan out to another tool.

Prerequisites

An HTTP endpoint you control that can accept a JSON POST and return a 2xx status.

Setup

  1. Stand up an endpoint that accepts a JSON POST and returns a 2xx status. https is strongly recommended.
  2. In PingArk, open Channels, click Add channel, and pick Webhook.
  3. Enter your endpoint in the Endpoint URL field.
  4. Click Send test in the add-channel modal, confirm a request arrives at your endpoint, then save.

Config fields

FieldWhat to enter
Endpoint URLThe URL PingArk POSTs to. Both http and https are accepted, though https is strongly recommended.

The payload

Each POST has this shape. The event is check.down when a check fails and check.up when it recovers. The project block names the project the check belongs to, so a receiver watching many projects can route the event:

{
  "event": "check.down",
  "project": {
    "id": "9b1f2c34-5d6e-4a7b-8c9d-0e1f2a3b4c5d",
    "name": "Production"
  },
  "check": {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "name": "Nightly backup",
    "slug": "nightly-backup",
    "status": "down"
  },
  "flip": {
    "from": "up",
    "to": "down",
    "reason": "missed",
    "at": "2026-07-02T02:15:00+00:00"
  }
}

Delivery and retries

Your endpoint should return a 2xx status. A non-2xx response is treated as a failed delivery, retried with backoff, and surfaced in the dashboard, so a broken receiver never passes unnoticed.

Troubleshooting

Send a test from the channel menu and watch for the request. If it never arrives, confirm your endpoint is reachable from the public internet and is not blocking unknown senders. If deliveries start failing, the channel is flagged in the dashboard with the last failure.

Which plans include which channels is on the pricing page.