Guide

Webhook Signature Schemes

Most providers sign webhooks with HMAC, but the exact input is not universal. Some sign only the raw body, some include timestamps or ids, some sign the URL, and some use public-key verification instead of a shared secret.

79 source types6 scheme groupsGenerated from source docsProvider pages stay canonical

How to use this matrix

Use this page to identify the verification family. Then open the provider source page for the exact header names, FastHook field, setup challenge, and official provider documentation.

Raw body means exact body.Do not trim, reformat, or reserialize JSON before checking a digest.
Timestamped signatures include metadata.The separator and prefix matter as much as the algorithm.
URL-aware signatures are brittle by design.Changing query strings, hosts, or callback URLs can invalidate signatures.
Public-key schemes do not share a secret.Configure the public key, webhook id, certificate, or app public key instead.

32 source types

Raw-body HMAC

The provider signs the exact request body. Encoding, whitespace, key order, and line endings must match the bytes FastHook receives.raw body, usually HMAC-SHA256; some providers use SHA-1, SHA-512, hex, or base64 output
WEBHOOKCustom WebhookFastHook can verify a generic HMAC-SHA256 signature over the raw request body, or use Basic Auth/API key checks before queueing.Authorization, Configured API key header, Configured signature headerOptional Basic Auth, API key, or HMAC fields
GITHUBGitHubFastHook computes HMAC-SHA256 over the exact raw request body and compares it to x-hub-signature-256 with the sha256= prefix.x-hub-signature-256, x-github-event, x-github-deliveryWebhook Signing Secret
SHOPIFYShopifyFastHook computes a base64 HMAC-SHA256 digest over the raw request body and compares it to x-shopify-hmac-sha256.x-shopify-hmac-sha256, x-shopify-topic, x-shopify-webhook-idWebhook Signing Secret
METAMetaFastHook verifies POST deliveries with x-hub-signature-256 and answers GET hub.challenge checks only when hub.verify_token matches.x-hub-signature-256, hub.challenge, hub.verify_tokenApp Secret, Verify Token
LINELINEFastHook computes a base64 HMAC-SHA256 digest over the raw request body and compares it to x-line-signature.x-line-signatureChannel Secret
DOCUSIGNDocuSignFastHook computes base64 HMAC-SHA256 over the raw body and compares it with x-docusign-signature-1 through x-docusign-signature-100.x-docusign-signature-1, x-docusign-signature-NHMAC Key
DROPBOXDropboxFastHook echoes GET ?challenge=... and verifies POST x-dropbox-signature as HMAC-SHA256 hex over the raw body.challenge, x-dropbox-signatureWebhook Signing Secret
INTERCOMIntercomFastHook computes sha1= HMAC-SHA1 over the raw body and compares it with x-hub-signature.x-hub-signatureClient Secret
LINEARLinearFastHook computes HMAC-SHA256 hex over the raw body and compares it to linear-signature while preserving Linear provider headers for downstream routing.linear-signature, linear-delivery, linear-eventWebhook Signing Secret
TYPEFORMTypeformFastHook computes base64 HMAC-SHA256 over the raw body and compares it to typeform-signature with the sha256= prefix.typeform-signatureWebhook Signing Secret
COINBASE_COMMERCECoinbase CommerceFastHook verifies x-cc-webhook-signature as HMAC-SHA256 over the raw body, and also supports the timestamped x-hook0-signature form.x-cc-webhook-signature, x-hook0-signatureShared Secret
RAZORPAYRazorpayFastHook computes HMAC-SHA256 hex over the raw body and compares it with x-razorpay-signature.x-razorpay-signatureWebhook Signing Secret
LEMON_SQUEEZYLemon SqueezyFastHook computes HMAC-SHA256 hex over the raw body and compares it with x-signature.x-signatureWebhook Signing Secret
ASANAAsanaFastHook answers the x-hook-secret handshake and verifies later x-hook-signature HMAC-SHA256 values over the raw body.x-hook-secret, x-hook-signatureWebhook Signing Secret
NYLASNylasFastHook echoes GET ?challenge=... and verifies x-nylas-signature as HMAC-SHA256 hex over the raw body.challenge, x-nylas-signatureWebhook Secret
XEROXeroFastHook computes a base64 HMAC-SHA256 digest over the raw body and compares it to x-xero-signature.x-xero-signatureWebhook Signing Key
BITBUCKETBitbucketFastHook computes sha256= HMAC-SHA256 over the raw body and compares it with x-hub-signature.x-hub-signature, x-event-keyWebhook Signing Secret
WOO_COMMERCEWooCommerceFastHook computes base64 HMAC-SHA256 over the raw body and compares it with x-wc-webhook-signature.x-wc-webhook-signature, x-wc-webhook-topicWebhook Signing Secret
WEBEXWebexFastHook computes HMAC-SHA1 hex over the raw body and compares it with x-spark-signature.x-spark-signatureWebhook Secret
VERCELVercelFastHook computes HMAC-SHA1 hex over the raw body and compares it with x-vercel-signature.x-vercel-signatureOAuth2 Secret
HEROKUHerokuFastHook computes base64 HMAC-SHA256 over the raw body and compares it with heroku-webhook-hmac-sha256.heroku-webhook-hmac-sha256Signing Secret
CIRCLECICircleCIFastHook computes HMAC-SHA256 hex over the raw body and compares it with the v1 value in circleci-signature.circleci-signatureWebhook Signing Secret
LAUNCHDARKLYLaunchDarklyFastHook computes HMAC-SHA256 hex over the raw body and compares it with x-ld-signature.x-ld-signatureWebhook Signing Secret
CLICKUPClickUpFastHook computes HMAC-SHA256 hex over the raw body and compares it with x-signature.x-signatureWebhook Signing Secret
GRAFANAGrafanaFastHook verifies HMAC-SHA256 hex over raw body, or timestamp + ':' + raw body when a timestamp header is configured.x-grafana-alerting-signature, Configured timestamp headerWebhook Signing Secret, Optional signature_header and timestamp_header through API
SENTRYSentryFastHook computes HMAC-SHA256 hex over the raw body and compares it with sentry-hook-signature.sentry-hook-signatureWebhook Signing Secret
NOTIONNotionFastHook computes sha256= HMAC-SHA256 over the raw body with the Notion verification token and compares it with x-notion-signature.x-notion-signatureVerification Token
PAYSTACKPaystackFastHook computes HMAC-SHA512 over the raw request body using the configured secret key and compares it with x-paystack-signature.x-paystack-signatureSecret Key
GOCARDLESSGoCardlessFastHook computes HMAC-SHA256 hex over the raw body with the webhook endpoint secret and compares it with webhook-signature.webhook-signatureWebhook Endpoint Secret
PAGERDUTYPagerDutyFastHook parses x-pagerduty-signature, extracts v1 values, and accepts any HMAC-SHA256 hex digest that matches the raw body.x-pagerduty-signatureWebhook Signing Secret
CHARGEBEE_RETENTIONChargebee RetentionFastHook computes HMAC-SHA1 hex over the raw request body and accepts either the raw digest or sha1= digest form in x-hub-signature.x-hub-signatureShared Secret
CHECKOUT_COMCheckout.comFastHook computes HMAC-SHA256 hex over the raw request body with the configured secret key and compares it with cko-signature.cko-signatureSecret Key

16 source types

Timestamped HMAC

The provider includes a timestamp, message id, or version prefix in the signed value. FastHook verifies both the header shape and the provider-specific signing input.timestamp or message metadata plus raw body, joined with the provider's required separator
STRIPEStripeFastHook reads stripe-signature, validates the timestamp, and verifies the v1 HMAC-SHA256 signature over timestamp + '.' + raw body.stripe-signatureWebhook Signing Secret
SLACKSlackFastHook verifies x-slack-signature by signing v0:timestamp:raw-body and checks the timestamp tolerance.x-slack-signature, x-slack-request-timestampWebhook Signing Secret
GOTO_WEBINARGoTo WebinarFastHook verifies the base64 HMAC-SHA256 digest of timestamp:raw-body and rejects timestamps outside the configured tolerance.x-webhook-signature, x-webhook-signature-timestamp, x-webhook-secretkey-id, x-webhook-signature-versionWebhook Secret Key
ZOOMZoomFastHook verifies x-zm-signature over v0:timestamp:raw-body and returns encryptedToken for Zoom endpoint.url_validation payloads.x-zm-signature, x-zm-request-timestampSecret Token
MAILGUNMailgunFastHook computes HMAC-SHA256 over timestamp + token and compares it with the Mailgun signature field.signature.timestamp, signature.token, signature.signatureHTTP Signing Key
CALENDLYCalendlyFastHook verifies calendly-webhook-signature by signing timestamp + '.' + raw body with HMAC-SHA256.calendly-webhook-signatureWebhook Signing Secret
PADDLEPaddleFastHook verifies paddle-signature by signing timestamp + ':' + raw body with HMAC-SHA256.paddle-signatureEndpoint Secret Key
WORKOSWorkOSFastHook verifies workos-signature by signing timestamp + '.' + raw body with HMAC-SHA256 and millisecond timestamp validation.workos-signatureWebhook Secret
MUXMuxFastHook verifies mux-signature by signing timestamp + '.' + raw body with HMAC-SHA256.mux-signatureWebhook Signing Secret
BUILDKITEBuildkiteFastHook verifies x-buildkite-signature by signing timestamp + '.' + raw body with HMAC-SHA256.x-buildkite-signatureWebhook Token
KLAVIYOKlaviyoFastHook signs raw body + timestamp with HMAC-SHA256 and compares the hex digest to klaviyo-signature.klaviyo-signature, klaviyo-timestampHMAC Secret
CUSTOMER_IOCustomer.ioFastHook signs v0:timestamp:raw-body with HMAC-SHA256 and compares it to x-cio-signature.x-cio-signature, x-cio-timestampWebhook Signing Key
HYGRAPHHygraphFastHook parses gcms-signature, builds the Hygraph signed JSON envelope with body, environment, and timestamp, then verifies the base64 HMAC-SHA256 signature.gcms-signatureSecret Key
SANITYSanityFastHook signs timestamp + '.' + raw body with HMAC-SHA256, normalizes base64url, and compares it to the v1 signature.sanity-webhook-signatureWebhook Secret
TWITCHTwitchFastHook signs message id + timestamp + raw body with HMAC-SHA256, prefixes the digest with sha256=, and compares it with twitch-eventsub-message-signature.twitch-eventsub-message-id, twitch-eventsub-message-timestamp, twitch-eventsub-message-signature, twitch-eventsub-message-typeEventSub Secret
CLOUDINARYCloudinaryFastHook validates x-cld-timestamp, signs raw body + timestamp + API secret, and accepts Cloudinary SHA-1 or SHA-256 signature digests.x-cld-signature, x-cld-timestampAPI Secret

6 source types

Svix and Standard Webhooks

These providers use a message id, timestamp, and signature header pattern. FastHook handles the canonical message string and whsec-style secret formats.message id + timestamp + raw body
SVIXSvixFastHook verifies the Svix signature over message-id + '.' + timestamp + '.' + raw body using the configured whsec secret.svix-id, svix-timestamp, svix-signatureSigning Secret
GITLABGitLabFastHook uses Svix verification when webhook-signature is present; otherwise it compares x-gitlab-token with the configured token.x-gitlab-token, webhook-signature, webhook-id, webhook-timestampSigning or Secret Token
CLERKClerkFastHook uses Svix verification over message id, timestamp, and raw body with the configured whsec secret.svix-id, svix-timestamp, svix-signatureWebhook Signing Secret
RESENDResendFastHook uses Svix verification over message id, timestamp, and raw body with the configured whsec secret.svix-id, svix-timestamp, svix-signatureWebhook Signing Secret
OPENAIOpenAIFastHook verifies webhook-signature over webhook-id + '.' + webhook-timestamp + '.' + raw body using the configured Standard Webhooks secret.webhook-id, webhook-timestamp, webhook-signatureWebhook Signing Secret
BIGCOMMERCEBigCommerceFastHook verifies webhook-signature over webhook-id + '.' + webhook-timestamp + '.' + raw body using the configured Standard Webhooks secret.webhook-id, webhook-timestamp, webhook-signatureClient Secret

4 source types

URL-aware signatures

The callback URL, request URI, form parameters, or callback URL value is part of the signature input. Changing provider URLs or query strings can break verification.public URL or request URI plus body or form fields
TWILIOTwilioFastHook verifies x-twilio-signature using the public request URL, form parameters when applicable, and bodySHA256 when Twilio sends it.x-twilio-signatureAuth Token
HUBSPOTHubSpotFastHook signs method + request URI + raw body + timestamp with HMAC-SHA256 and compares the base64 digest.x-hubspot-signature-v3, x-hubspot-request-timestampClient Secret
SQUARESquareFastHook signs request URL + raw body with HMAC-SHA256 and compares the base64 digest to x-square-hmacsha256-signature.x-square-hmacsha256-signatureSignature Key
TRELLOTrelloFastHook answers HEAD validation with 200 and verifies x-trello-webhook as HMAC-SHA1 base64 over raw body + callback URL.x-trello-webhookApplication Secret

5 source types

Public-key and RSA verification

The provider signs with its private key. FastHook verifies with a public verification key, certificate, webhook id, or application public key.provider canonical string plus public-key verification
SENDGRIDSendGridFastHook verifies the ECDSA P-256 signature over timestamp + raw body using the configured public verification key.x-twilio-email-event-webhook-signature, x-twilio-email-event-webhook-timestampPublic Verification Key
DISCORDDiscord InteractionsFastHook verifies the Ed25519 signature over timestamp + raw body using the Discord application public key.x-signature-ed25519, x-signature-timestampApplication Public Key
DISCORD_EVENTSDiscord Event WebhooksFastHook verifies the Ed25519 signature over timestamp + raw body using the Discord application public key before acknowledging or queueing the request.x-signature-ed25519, x-signature-timestampApplication Public Key
AWS_SNSAWS SNSFastHook builds the canonical SNS string and verifies the RSA PKCS#1 signature using the SNS certificate or configured public key.Signature, SigningCertURL, SignatureVersion, SubscribeURLOptional Topic ARN, Optional certificate/public key through API
PAYPALPayPalFastHook verifies the PayPal RSA signature over transmission id, time, webhook id, and CRC32 of the raw body.paypal-transmission-id, paypal-transmission-time, paypal-transmission-sig, paypal-cert-url, paypal-auth-algoWebhook ID

7 source types

Token, Basic Auth, and challenge checks

Some providers prove identity with a static header, query secret, Basic Auth credentials, validation token, or one-time challenge instead of body hashing.configured header or query value, Basic Auth credentials, client state, or setup challenge token
MICROSOFT_GRAPHMicrosoft GraphMicrosoft Graph validation is challenge-based. FastHook echoes validationToken and optionally verifies notification clientState values.validationToken, clientStateOptional Client State
GETRESPONSEGetResponseGetResponse does not publish a payload-signature scheme. FastHook compares the configured secret with the secret query parameter before queueing the request.x-webhook-type, x-webhook-id, x-request-idWebhook URL Secret
TELEGRAMTelegramFastHook compares x-telegram-bot-api-secret-token with the configured secret token before queueing.x-telegram-bot-api-secret-tokenSecret Token
POSTMARKPostmarkFastHook verifies the Authorization Basic header against the configured username and password.AuthorizationUsername, Password
OKTAOktaFastHook returns Okta's verification challenge and compares the Authorization header with the configured secret for event deliveries.x-okta-verification-challenge, authorizationAuthorization Secret
REVENUECATRevenueCatFastHook compares the Authorization header with the configured value and does not need to read the raw body for this provider.authorizationAuthorization Header Value
AUTH0Auth0FastHook compares the Authorization header with the configured value and does not need to read the raw body for this provider.authorizationAuthorization Header Value

9 source types

Other source checks

Source types that are not yet classified into one of the main scheme groups.
CLICKFUNNELSClickFunnelsFastHook verifies HMAC-SHA256 over timestamp.raw-body and rejects timestamps outside ClickFunnels' ten-minute tolerance.x-webhook-clickfunnels-signature, x-webhook-clickfunnels-timestampWebhook Secret
CLOSEClose CRMFastHook decodes the hexadecimal signature key and verifies HMAC-SHA256 over timestamp + raw-body.close-sig-hash, close-sig-timestampSignature Key
DRIPDripDrip does not publish a payload-signature scheme. FastHook checks a secret query parameter and removes it from stored request metadata.Configured source authWebhook URL Secret
AUTOPILOTAutopilot JourneysFastHook compares the configured Authorization value before accepting the journey payload.AuthorizationAuthorization Secret
SHARPSPRINGSharpSpringFastHook checks a secret query parameter and removes it from stored request metadata before storing the postback.Configured source authWebhook URL Secret
EXACT_ONLINEExact OnlineExact does not publish a general payload-signature contract. FastHook checks the callback URL secret and removes it from stored request metadata.Configured source authWebhook URL Secret
RAMPRampFastHook computes HMAC-SHA256 over the raw request body and compares the hexadecimal result with X-Ramp-Signature.X-Ramp-SignatureWebhook Secret
ACTIVETRAILActiveTrailActiveTrail does not publish a standard webhook signature. FastHook checks the callback URL secret and removes it from stored request metadata.Configured source authWebhook URL Secret
AFTERSHIPAfterShipFastHook computes base64 HMAC-SHA256 over the raw body and compares it with aftership-hmac-sha256.aftership-hmac-sha256Webhook Secret

Debugging checklist

  • Match the provider source type before deciding which secret or public key to paste into FastHook.
  • Check the exact signature header and prefix on the provider page, not just the algorithm name.
  • For HMAC failures, compare the raw body FastHook received with the body your test command signed.
  • For timestamped schemes, confirm the timestamp header, separator, version prefix, and clock tolerance.
  • For URL-aware schemes, keep the provider callback URL stable after registration.
  • Use Requests to inspect rejected source auth records before debugging connection or destination delivery.