Webhook Signing Secrets: Accept Only Signed Requests
Make a signing secret, give it to the service that sends your webhooks, and have an automation start only for requests that really came from it.
2 min read
An automation that starts On a webhook has a secret link: anyone who has the link can start it (see Webhooks). A signing secret closes that gap. You give the secret to the service that sends the webhook (Svix, Clerk, Resend, your own app); it signs every request with it; and your automation starts only for requests whose signature checks out. Everything else is refused before a run starts.
Automations are in preview: signing secrets are there wherever automations are enabled.
Make one while you build#
- Open the automation and select its On a webhook start.
- Under Check the sender, set How the sender signs — Standard Webhooks (Svix, Clerk,
Resend and many others) or HMAC SHA-256 (a
sha256=signature with a timestamp header). - In Signing secret, pick Create a signing secret, give it a name you will recognise
("Billing events"), and either let BankSync generate one for you or paste the secret the
sender gave you (a Standard Webhooks
whsec_…secret, for example). - A generated secret is shown once. Copy it into the sender's webhook settings, then choose I've saved it. The new secret is picked for you.
- Publish the automation. From then on only signed requests start it.
Only a workspace admin can create, rotate or revoke a signing secret. Anyone who can edit the automation can pick one that already exists.
Manage your secrets#
Settings → Developers → Signing secrets lists every secret with when it was made and last changed. BankSync never shows a secret again after it is saved, anywhere.
- Rotate gives a secret a new value (generated or pasted) and refuses the old one at once. Update the sender straight after, or its requests are refused.
- Revoke destroys a secret for good. Before you confirm, BankSync names every automation that checks senders with it: each stops accepting webhooks until you pick another secret in its start.
Every create, rotation and revocation is recorded with who made it.
When a request is refused#
A request with no signature, a signature made with another secret, or one older than the
tolerance you set (five minutes by default) is answered 401 and starts nothing. A sender that
retries a request it already delivered is answered 202 and starts nothing twice.
If every request is refused after you rotate a secret, the sender is still signing with the old one: paste the new secret into the sender's settings.
Use this page with your AI assistant
Every BankSync doc is available as plain Markdown for agents and LLMs.