Every webhook delivery from Essal includes an X-Essal-Signature header. You must verify this signature before processing the payload to protect against spoofed requests.
The header value is a hex-encoded HMAC-SHA256 hash of the raw request body, prefixed with sha256=:
Verification
The HMAC is computed using the webhook secret returned when you created the webhook subscription.
Node.js
Python
Always use a constant-time comparison function (timingSafeEqual, hmac.compare_digest) to prevent timing attacks. A standard string equality check is not safe.
Idempotency
Essal may deliver the same event more than once (at-least-once delivery). Use the event id field to deduplicate events in your handler — store processed event IDs and skip events you have already handled.