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.

69 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 fieldsGITHUBGitHubFastHook 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 SecretSHOPIFYShopifyFastHook 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 SecretMETAMetaFastHook 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 TokenLINELINEFastHook computes a base64 HMAC-SHA256 digest over the raw request body and compares it to x-line-signature.x-line-signatureChannel SecretDOCUSIGNDocuSignFastHook 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 KeyDROPBOXDropboxFastHook echoes GET ?challenge=... and verifies POST x-dropbox-signature as HMAC-SHA256 hex over the raw body.challenge, x-dropbox-signatureWebhook Signing SecretINTERCOMIntercomFastHook computes sha1= HMAC-SHA1 over the raw body and compares it with x-hub-signature.x-hub-signatureClient SecretLINEARLinearFastHook 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 SecretTYPEFORMTypeformFastHook computes base64 HMAC-SHA256 over the raw body and compares it to typeform-signature with the sha256= prefix.typeform-signatureWebhook Signing SecretCOINBASE_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 SecretRAZORPAYRazorpayFastHook computes HMAC-SHA256 hex over the raw body and compares it with x-razorpay-signature.x-razorpay-signatureWebhook Signing SecretLEMON_SQUEEZYLemon SqueezyFastHook computes HMAC-SHA256 hex over the raw body and compares it with x-signature.x-signatureWebhook Signing SecretASANAAsanaFastHook 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 SecretNYLASNylasFastHook echoes GET ?challenge=... and verifies x-nylas-signature as HMAC-SHA256 hex over the raw body.challenge, x-nylas-signatureWebhook SecretXEROXeroFastHook computes a base64 HMAC-SHA256 digest over the raw body and compares it to x-xero-signature.x-xero-signatureWebhook Signing KeyBITBUCKETBitbucketFastHook computes sha256= HMAC-SHA256 over the raw body and compares it with x-hub-signature.x-hub-signature, x-event-keyWebhook Signing SecretWOO_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 SecretWEBEXWebexFastHook computes HMAC-SHA1 hex over the raw body and compares it with x-spark-signature.x-spark-signatureWebhook SecretVERCELVercelFastHook computes HMAC-SHA1 hex over the raw body and compares it with x-vercel-signature.x-vercel-signatureOAuth2 SecretHEROKUHerokuFastHook computes base64 HMAC-SHA256 over the raw body and compares it with heroku-webhook-hmac-sha256.heroku-webhook-hmac-sha256Signing SecretCIRCLECICircleCIFastHook computes HMAC-SHA256 hex over the raw body and compares it with the v1 value in circleci-signature.circleci-signatureWebhook Signing SecretLAUNCHDARKLYLaunchDarklyFastHook computes HMAC-SHA256 hex over the raw body and compares it with x-ld-signature.x-ld-signatureWebhook Signing SecretCLICKUPClickUpFastHook computes HMAC-SHA256 hex over the raw body and compares it with x-signature.x-signatureWebhook Signing SecretGRAFANAGrafanaFastHook 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 APISENTRYSentryFastHook computes HMAC-SHA256 hex over the raw body and compares it with sentry-hook-signature.sentry-hook-signatureWebhook Signing SecretNOTIONNotionFastHook computes sha256= HMAC-SHA256 over the raw body with the Notion verification token and compares it with x-notion-signature.x-notion-signatureVerification TokenPAYSTACKPaystackFastHook computes HMAC-SHA512 over the raw request body using the configured secret key and compares it with x-paystack-signature.x-paystack-signatureSecret KeyGOCARDLESSGoCardlessFastHook computes HMAC-SHA256 hex over the raw body with the webhook endpoint secret and compares it with webhook-signature.webhook-signatureWebhook Endpoint SecretPAGERDUTYPagerDutyFastHook parses x-pagerduty-signature, extracts v1 values, and accepts any HMAC-SHA256 hex digest that matches the raw body.x-pagerduty-signatureWebhook Signing SecretCHARGEBEE_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 SecretCHECKOUT_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 SecretSLACKSlackFastHook verifies x-slack-signature by signing v0:timestamp:raw-body and checks the timestamp tolerance.x-slack-signature, x-slack-request-timestampWebhook Signing SecretZOOMZoomFastHook 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 TokenMAILGUNMailgunFastHook computes HMAC-SHA256 over timestamp + token and compares it with the Mailgun signature field.signature.timestamp, signature.token, signature.signatureHTTP Signing KeyCALENDLYCalendlyFastHook verifies calendly-webhook-signature by signing timestamp + '.' + raw body with HMAC-SHA256.calendly-webhook-signatureWebhook Signing SecretPADDLEPaddleFastHook verifies paddle-signature by signing timestamp + ':' + raw body with HMAC-SHA256.paddle-signatureEndpoint Secret KeyZENDESKZendeskFastHook signs timestamp + raw body with HMAC-SHA256 and compares the base64 digest to x-zendesk-webhook-signature.x-zendesk-webhook-signature, x-zendesk-webhook-signature-timestampWebhook Signing SecretWORKOSWorkOSFastHook verifies workos-signature by signing timestamp + '.' + raw body with HMAC-SHA256 and millisecond timestamp validation.workos-signatureWebhook SecretMUXMuxFastHook verifies mux-signature by signing timestamp + '.' + raw body with HMAC-SHA256.mux-signatureWebhook Signing SecretBUILDKITEBuildkiteFastHook verifies x-buildkite-signature by signing timestamp + '.' + raw body with HMAC-SHA256.x-buildkite-signatureWebhook TokenKLAVIYOKlaviyoFastHook signs raw body + timestamp with HMAC-SHA256 and compares the hex digest to klaviyo-signature.klaviyo-signature, klaviyo-timestampHMAC SecretCUSTOMER_IOCustomer.ioFastHook signs v0:timestamp:raw-body with HMAC-SHA256 and compares it to x-cio-signature.x-cio-signature, x-cio-timestampWebhook Signing KeyHYGRAPHHygraphFastHook parses gcms-signature, builds the Hygraph signed JSON envelope with body, environment, and timestamp, then verifies the base64 HMAC-SHA256 signature.gcms-signatureSecret KeySANITYSanityFastHook signs timestamp + '.' + raw body with HMAC-SHA256, normalizes base64url, and compares it to the v1 signature.sanity-webhook-signatureWebhook SecretTWITCHTwitchFastHook 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 SecretCLOUDINARYCloudinaryFastHook 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

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

4 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

6 source types

Token, Basic Auth, and challenge checks

Some providers prove identity with a static header, Basic Auth credentials, validation token, or one-time challenge instead of body hashing.configured header value, Basic Auth credentials, client state, or setup challenge token

1 source types

Other source checks

Source types that are not yet classified into one of the main scheme groups.

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.