Docs / Developers
Webhooks
Receive signed events when locations and leads change.
Outgoing webhooks are available on the Premium plan.
An endpoint URL must use https and point to a public internet address. Redirects are not followed, so give the final URL.
Events
| Event | When |
|---|---|
location.created |
A location is added |
location.updated |
A location changes |
location.deleted |
A location is removed |
lead.created |
A lead or application arrives |
lead.updated |
A lead is approved, rejected or changed |
Subscribe to a list of events, or to * for all of them.
Payload
{
"event": "lead.created",
"created_at": "2026-10-11T09:30:00Z",
"data": { "...": "the lead or location" }
}
Headers
| Header | Value |
|---|---|
X-Stockist-Event |
The event name |
X-Stockist-Delivery |
A unique delivery id |
X-Stockist-Signature |
sha256= followed by the hex HMAC-SHA256 of the body |
Verifying the signature
Compute the HMAC-SHA256 of the raw request body with your endpoint secret and compare it with the header:
import crypto from 'node:crypto';
function verify(rawBody, header, secret) {
const expected = 'sha256=' + crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
const a = Buffer.from(expected), b = Buffer.from(header ?? '');
return a.length === b.length && crypto.timingSafeEqual(a, b);
}
Retries
Any response other than 2xx (including a redirect), or no response within 20 seconds, is retried with exponential backoff (1 minute, 2 minutes, 4 minutes and so on, up to 6 hours apart), for up to 8 attempts in total. Every attempt is listed under the endpoint’s deliveries.