Skip to main content
Webhook URLs are public by default, which means anyone who discovers your endpoint URL could post arbitrary payloads to it. Signature verification solves this by checking a cryptographic signature that only your provider can produce. If the signature is missing or does not match, the actor rejects the request with a 401 response and records the failure in the captured event.

Supported providers

Configure signature verification

Signature verification is configured through the signatureVerification input object. The signing secret is stored separately in the signatureVerificationSecret field so it stays masked in the Apify UI.

Stripe

tolerance sets the maximum age in seconds of the request timestamp before the actor treats it as a replay attack. The default is 300 seconds (5 minutes). Accepted range is 603600.

Shopify

GitHub

Slack

Custom HMAC provider

Use provider: "custom" when your provider uses HMAC but is not one of the built-in presets. You must supply the header name, algorithm, and encoding. Optionally supply timestampKey for replay protection.

Signature result fields on captured events

Every captured event includes two fields that reflect the outcome of signature verification: You can filter the /logs endpoint by these fields:

What happens on failure

When signature verification fails, the actor:
  1. Returns a 401 response to the sender
  2. Records the event with signatureValid: false
  3. Optionally sends an alert to Slack or Discord if signature_invalid is in your alertOn list

Alert on signature failures

Add "signature_invalid" to alertOn to get notified immediately when a request fails verification: