Free tools / Webhook tester
Webhook tester
Preview a Slack, Discord, or PagerDuty message, edit the JSON, and copy a curl command that sends it. Formatting and signing stay in your browser.
Payload
not uploadedhttps://hooks.slack.com/services/…
Run npm run webhook-catcher, then send to http://127.0.0.1:8787/hook.
HMAC-SHA256 of the exact body bytes. A ScaledPapers example sets the header to X-ScaledPapers-Signature.
Preview
rendered locallySlack, Discord, and PagerDuty block a browser POST. Copy curl and run it to deliver the message.
Payload comparison
| Destination | Endpoint | Body | Auth | On resolve |
|---|---|---|---|---|
| Slack | https://hooks.slack.com/services/… | {"text"} | URL only | A second message |
| Discord | https://discord.com/api/webhooks/{id}/{token} | {"content"} | URL only | A second message |
| PagerDuty | https://events.pagerduty.com/v2/enqueue | Events API v2 | Routing key in the body | event_action: resolve with the same dedup_key. Updates are not sent. |
| Pushover | https://api.pushover.net/1/messages.json | Form fields | App token and user key | Priority 0, no retry |
| Webhook | Your public https URL, or http://127.0.0.1:8787/hook | Event JSON | Optional X-ScaledPapers-Signature | Same shape with event: resolved |
Frequently asked questions
- Why does Send test webhook fail for Slack, Discord, or PagerDuty?
- Those hosts do not return
Access-Control-Allow-Originfor a page on another site, so the browser blocks the response. The curl command is the same POST without that restriction. Paste it into a terminal to deliver the test. - How does PagerDuty dedup_key close an incident?
- The open alert uses
event_actiontriggerand adedup_keyof the outage id or the incident id. Recovery sendsresolvewith that same key, which PagerDuty matches to the open alert. A different key opens a second incident. - Is this the same as Slack /feed subscribe?
- No.
/feed subscribeis how a visitor follows a public status page's RSS feed inside Slack. The Slack destination here is an incoming webhook for the workspace, the same one ScaledPapers alerts use when a check or incident fires. - Which URLs can I send to?
- Slack, Discord, and public webhooks must be https and must not include a username or password. Private addresses are rejected. The request does not follow redirects. ScaledPapers sends
User-Agent: ScaledPapersAlerts/1.0. A browser cannot set that header, so only the copied curl command includes it. - How do I test a payload on localhost?
- Run
npm run webhook-catcher. On the Webhook tab, choose Use local catcher and send. The catcher listens on127.0.0.1:8787, answers the browser preflight, and prints the body andX-ScaledPapers-Signaturein that terminal. Other private addresses stay rejected. - Does the JSON formatter upload my payload?
- No. Parsing, formatting, the preview, and the HMAC all run in the page. A test send is a request from your browser to the URL you typed. Leave the URL empty and nothing is sent.
Send these when a check actually fails
ScaledPapers confirms failures before it alerts, then posts this payload to Slack, Discord, PagerDuty, Pushover, or a signed webhook. Email alerts and 5 checks are free. Slack, Discord, PagerDuty, and webhooks are on Pro.