The flick-signature header
Every delivery carries your webhook secret in a header:
Also restrict by transport
Because the header alone is replayable, pair it with at least one of:- a long, unguessable path on your webhook URL
- an allowlist of Flick’s egress addresses, if your infrastructure supports it
- mutual TLS, if you operate your own ingress
HMAC-signed events
Some newer event types are signed properly rather than carrying the secret:HMAC-SHA512(secret, timestamp + "." + rawBody), hex encoded.
Verify over the raw request body, before any JSON parsing or re-serialisation —
re-encoding changes the bytes and the signature will not match. Reject a timestamp
that is more than a few minutes old to stop replays.
If a delivery carries
x-flick-signature, prefer it — it is strictly stronger than
flick-signature. Accept either, and record which one you verified.