The headers
How the signature is made
- Take the secret after the
whsec_prefix and base64-decode it. Those bytes are the HMAC key. - Build the signed content:
{webhook-id}.{webhook-timestamp}.{raw body}. - Compute HMAC-SHA256 of that content and base64-encode it.
- The header value is
v1,followed by that string.
v1, entry in the header using a constant-time comparison. Also reject a webhook-timestamp more than five minutes away from your clock, so an old request can’t be replayed.
The four details that must be exact
Code
Use a library
Because Blujay follows the Standard Webhooks specification, the Standard Webhooks libraries verify Blujay signatures unchanged. For example, with thestandardwebhooks package for Node.js:
Troubleshooting
Limitations
- One signing scheme: symmetric HMAC-SHA256 as
v1. There is no public-key signature. - One secret per subscription, shown once. There is no endpoint to rotate it in place; create a new subscription to change it.
- No source IP range is published, so the signature is your only proof of origin.
Next steps
Events
Every event type and its payload.
Delivery and retries
What happens when your endpoint is down.