Skip to main content
TIKT signs every request the way the Standard Webhooks specification describes. Checking the signature proves two things: the request comes from TIKT, and its body is exactly what TIKT sent. Our IP addresses are not fixed: the signature is the way to know a request is ours.

What is signed

Three headers come with each request: The signature is an HMAC-SHA256 of {webhook-id}.{webhook-timestamp}.{body}, where body is the raw request body, byte for byte. The key is the destination’s signing secret without its whsec_ prefix, base64-decoded. Reject a request whose timestamp is more than 5 minutes away from your clock: it protects you from a replayed request. The libraries below do it for you.
Verify the raw body. A body parsed into JSON, then serialized again, no longer has the same bytes, and the signature won’t match.

Node

Python

Flask

Other languages

Standard Webhooks publishes libraries for other languages, all compatible with TIKT’s signature: see standardwebhooks.com. You can also compute the HMAC yourself from the description above.

Rotating the secret

In the destination, Rotate creates a new secret and shows it once. From that moment, each request is signed with both secrets for 24 hours: webhook-signature carries two signatures separated by a space, the new one first. Update your endpoint during those 24 hours; after them, only the new secret signs. The libraries accept a request when one of the signatures matches.

Without code

Tools like Zapier or Make can’t always compute a signature. Two simpler options, set in the destination under More options:
  • A header of your own, for example Authorization: Bearer <a long random value>, that your tool checks. TIKT stores its value encrypted and never shows it again.
  • Keep the address secret. The address your tool gives you is hard to guess; don’t share it.
A header proves less than a signature (it doesn’t protect the body), but it keeps strangers out.