Webhooks
Oct 15, 2026
A webhook tells another system the moment something happens in WHBMP.
Create one
- Open Settings > API & Webhooks.
- Add a webhook with a name, the URL that should receive the events and the events you want.
- WHBMP gives you a secret used to sign each request.
Events
| Event | When |
|---|---|
client.created |
A client account is created |
order.created |
An order is placed |
invoice.created |
An invoice is created |
invoice.paid |
An invoice goes from unpaid to paid |
service.suspended |
A service is suspended |
service.terminated |
A service is terminated |
ticket.opened |
A support ticket is opened |
ticket.replied |
A reply is added to a ticket |
domain.registered |
A domain is registered |
The request
Each event is a POST with a JSON body and two headers:
X-WHBMP-Event: the event name, for exampleinvoice.paidX-WHBMP-Signature: the HMAC-SHA256 of the raw request body, using your webhook secret
Verify the signature
Always check it before trusting the data. In PHP:
$body = file_get_contents('php://input');
$expected = hash_hmac('sha256', $body, $secret);
if (! hash_equals($expected, $_SERVER['HTTP_X_WHBMP_SIGNATURE'] ?? '')) {
http_response_code(401);
exit;
}
Compute the hash over the raw body, not over re-encoded JSON.
Delivery log
Every attempt, successful or not, is recorded under the webhook's deliveries with the response status, so you can see why a delivery failed. Answer with a 2xx status quickly and do heavy work afterwards.
Tips
- Use HTTPS endpoints only.
- Make your handler idempotent: the same event can arrive more than once.
- Webhooks are sent at the moment the action happens, one attempt each. A failed delivery is logged but not retried, so combine webhooks with a periodic read through the REST API if you cannot miss an event.