Signature header
| Header | Algorithm | Signed over |
|---|---|---|
X-Webhook-Signature | HMAC-SHA256, lowercase hex | The raw JSON request body, byte-for-byte |
sha256= prefix, no timestamps.
Secret
The signing secret is a shared value between Xobito and your endpoint.Xobito issues a unique signing secret per workspace. If you do not yet have your secret, contact Xobito support to have one issued and rotated.
Verifying a request
You must verify using the raw body bytes, not a re-serialised JSON string. Many frameworks parse JSON before your handler runs — use the framework’s raw-body hook.Retry-aware handlers
Xobito retries up to 3 total attempts — the first attempt fires immediately, then there’s a1s wait before retry 2 and a 2s wait before retry 3 (exponential backoff). If your endpoint is slow or flaps, you may receive the same event more than once.
Deduplicate by
(model, data.id, event, timestamp) — that tuple is stable across retries.Return
2xx as soon as you have persisted (or enqueued) the event. Heavy work belongs in a background job.Return the same
2xx on a duplicate so Xobito stops retrying.Optional hardening
- HTTPS only. Reject
http://at the load balancer — signatures are not a substitute for transport encryption. - Narrow scope. Only listen for the events you actually handle (
contacts_actions,status_actions,source_actionsin Settings → Webhook Settings). - Logs. Keep at least 30 days of request logs on your side — Xobito’s
webhook_logsare purged after 30 days.
Troubleshooting
My signatures never match
My signatures never match
Double-check you are hashing the raw request body, not a pretty-printed or re-serialised JSON string. Even whitespace differences will break HMAC.
I receive events but no `X-Webhook-Signature` header
I receive events but no `X-Webhook-Signature` header
Some proxies strip non-standard headers. Configure your ingress (Nginx, Cloudflare, etc.) to pass the header through unchanged.
Same event arrives twice
Same event arrives twice
That is expected on retries after a slow or failed first attempt. Deduplicate on
(model, data.id, event, timestamp).How do I rotate the secret?
How do I rotate the secret?
Contact Xobito support. There is no self-service rotation in the current version.