Skip to main content
Your webhook URL is reachable by anyone who learns it. The signature is what tells you a call came from Reclack and that the body was not altered on the way.
The Reclack-Signature header split into its timestamp and its HMAC, above the string that gets signed.The Reclack-Signature header split into its timestamp and its HMAC, above the string that gets signed.

The header carries the time and the signature over it

The header

The timestamp is inside the signed string on purpose. Without it, a captured call could be replayed forever, and a receiver checking the age would have no way to know the age itself had not been tampered with.

Verifying it

Verify against the raw request body, exactly as it arrived. Parsing the JSON and re-serialising it changes whitespace and key order, and the signature will not match.
In Express, that means reading the body as a buffer for this route:

Deduplicating

The same event can arrive twice. A retry after a timeout is the common case: your handler did the work, your reply never made it back. Use the event id, which is also in the Reclack-Event header:

A complete handler