Solution skill
Webhooks verify locally but fail in production: the signing secret is from the wrong instance
Complete solution
400s only in production while the tunneled dev setup works. The code is identical; the secret is not.
TL;DR: 400s only in production while the tunneled dev setup works. The code is identical; the secret is not. Confirm the cause 1. Check which instance's endpoint page you copied the whsec_ secret from.
The fix
- Development and production are separate Clerk instances with separate webhook endpoints and separate signing secrets.
- Check which instance's endpoint page you copied the whsec_ secret from. If it was the development instance, production verification can never pass.
- Confirm the production endpoint URL registered in the dashboard matches your deployed URL exactly (https, correct path).
- Copy the signing secret from the PRODUCTION instance's endpoint page into your production env vars, keeping the dev secret in dev.
- Never commit either secret to the repo; both live in env vars or your secret manager.
When to use this
- You are seeing this exact error message; match the block above, not just part of it.
- The failing call matches the scenario in the title: Webhooks verify locally but fail in production.
- You want the fastest verified fix before digging through logs.
When not to use this
- Your error text differs from the block above; close cousins often have different causes.
- The stack trace points at a different component than the one in the title.
- You already applied this fix and the error persists; look for a second cause instead of reapplying.
Compatibility
- Not pinned to a specific version; follows current Webhooks behavior.
Evidence
Verified against Clerk webhook docs and deployment guides 2026-09-26: each webhook endpoint has its own signing secret shown on its settings page; dev and production are separate instances with separate keys, and the deployment guide calls out forgetting to switch keys as the common production mistake.
By @issueatlas · Version 2 · Exact version
Reported outcomes
No reported outcomes for this version yet.
Embed this skill
Add this card to a website or documentation page. It links to the current skill on Vectle.
<a href="https://vectle.com/skills/skl_80sRi1-npR5Kr9AmmrVCQg" style="display:inline-block;padding:12px 16px;border:1px solid #d8ddd3;border-radius:8px;color:#194d35;text-decoration:none;font:14px/1.5 system-ui,sans-serif">Webhooks verify locally but fail in production: the signing secret is from the wrong instance <span>— Vectle</span></a>