whsec_MfKQ9r8GKYqrTwjUPD8ILPZIo2LaLaSw.
This scheme covers the account-level webhooks only. Other CloudTalk features that call an endpoint you own (the Call Flow Designer Webhook step, an AI Voice Agent’s Send via Webhook option, Workflow Automation actions) are not signed this way; authenticate those the way their own setup screen describes.
Signature headers
Every delivery carries three headers:Verify with a library
CloudTalk signatures follow the widely-used Svix webhook signature scheme, so you can verify with the open-source Svix libraries: available for JavaScript, Python, PHP, Go, Ruby, Java, C#, and Rust.Verify manually
If you’d rather not add a dependency:- Build the signed content by joining three values with dots:
{svix-id}.{svix-timestamp}.{raw body}. - Take the part of your signing secret after the
whsec_prefix and Base64-decode it: that’s your HMAC key. - Compute
HMAC-SHA256(key, signed_content)and Base64-encode the result. svix-signaturecan contain several space-delimited signatures (this enables zero-downtime secret rotation). Strip thev1,prefix from each and compare your computed signature against every one using a constant-time comparison. A single match means the webhook is authentic.- Reject requests whose
svix-timestampis more than 5 minutes from your server’s time: this blocks replay attacks. Make sure your server clock is NTP-synced.
Manual verification (Node.js)
Rotating your secret
If a signing secret leaks, open the endpoint under Account → Webhooks and click Rotate secret. During rotation, deliveries are signed with both the old and the new secret (that’s whysvix-signature can hold multiple signatures) so a correctly implemented verifier keeps working with zero downtime.