Custom Webhook Integration — Pipe ZopNight Events Into Anything
What does the Custom Webhook integration do?
A custom webhook receives every ZopNight event as JSON at any HTTPS endpoint you control. It is the escape hatch for anything the 4 built-in channels do not cover (PagerDuty, ServiceNow, an internal bot, or your own queue), with the same per-channel event subscriptions.
If your team’s tooling isn’t on the standard channel list, the custom webhook gets you there. ZopNight will POST structured JSON to any HTTPS endpoint you control, for any event you subscribe to: scheduling, budgets, anomalies, remediation, platform alerts. The channel needs only a name and the endpoint URL.
A Slack-compatible JSON envelope, throttled and SSRF-checked
Payloads use a Slack-compatible envelope so many tools accept them unmodified: a top-level text plus an attachments array carrying color, title (‘ZopNight Alert’), body text, priority fields and timestamp, alongside explicit priority (0 = info, 1 = warning, 2 = critical) and priority_label fields. Requests are sent with User-Agent ZopNight-Notification-Service/1.0. The channel form has no custom-header or auth-token fields. Delivery is throttled to one message per second per channel with automatic retries. Endpoints are SSRF-validated: public HTTPS only.
From HTTPS endpoint to a test notification
- Stand up an HTTPS endpoint that accepts POST JSON.
- In ZopNight: Settings > Notifications > Add Channel > Custom Webhook.
- Give the channel a name and paste the URL.
- Pick the events and scopes to subscribe, then send a test notification.
Every event family in one JSON shape
Every ZopNight event family as structured JSON, in a Slack-compatible payload shape for drop-in reuse.
When to reach for it
Use a custom webhook when the destination is not Slack, Teams, Google Chat or email. That covers PagerDuty and ServiceNow, neither of which has a first-class channel today, as well as internal tooling and anything that just needs the raw event.
What you receive
The event as JSON in the Slack-compatible envelope described above: the message body plus a priority of 0 (info), 1 (warning) or 2 (critical), which is the shape the in-app setup guide shows. You decide how it renders on the far side.
The endpoint is yours to secure
ZopNight posts to the URL you provide over HTTPS. Anything reachable at that URL can receive events, so treat the URL as a secret and verify on your side rather than relying on obscurity.
Limits worth knowing before you connect
Private, loopback and internal network addresses are rejected by design. Plan for at-least-once delivery and idempotent handling.
Custom Webhook integration: common questions
Can I point a custom webhook at an internal URL?
No. Endpoints are validated against SSRF and must be public HTTPS. Private, loopback and internal network addresses are rejected by design.
Could the same event arrive twice?
Yes, so handle it idempotently. Delivery is at-least-once with automatic retries, throttled to one message per second per channel.
How do I get ZopNight events into PagerDuty or ServiceNow?
Through a custom webhook. Neither has a first-class channel today, so the raw JSON event is the route, and you decide how it renders on your side.