Skip to main content

Signature Verification

HopNow signs every webhook delivery using HMAC-SHA256. The signing input is the timestamp, a period, and the exact raw request body:
The result is sent in the X-Webhook-Signature header:
Verify the signature against the raw request bytes before parsing JSON. Re-serializing the body can change its bytes and invalidate the signature.
The examples below also reject timestamps older than five minutes to reduce replay risk.

Python

JavaScript

Endpoint Requirements

  • HTTPS only — HTTP URLs are rejected when an endpoint is created or updated.
  • Respond within 10 seconds — return a 2xx response quickly and process the event asynchronously when possible.
  • Return 2xx — connection errors, timeouts, and non-2xx responses trigger a retry.
  • Keep the secret private — it is returned only when the webhook endpoint is created.

Testing Signatures

Use a timestamp and raw payload when testing the signing calculation: