Where is the Stripe webhook URL? (And every other Stripe page you keep losing.)
Direct answer: dashboard.stripe.com/webhooks for live mode, /test/webhooks for test. Then the 12 other Stripe pages you re-Google every week — with real URLs and the gotchas that bite everyone exactly once.
Short answer: https://dashboard.stripe.com/webhooks for live mode, https://dashboard.stripe.com/test/webhooks for test mode. Click "Add endpoint", paste your URL, pick the events, copy the signing secret. Done.
Now the long answer, because if you Googled this you probably also need the API keys page in 90 seconds, and the events log five minutes after that.
The Stripe dashboard isn't badly designed. It's just deep.
Stripe has been adding products faster than it's been redesigning navigation. The sidebar grew from like seven items to twenty-three. There's a "Workbench" now. There's "Payments", "Billing", "Connect", "Tax", "Radar", "Climate", "Capital", "Atlas" — and every one of those has its own settings, logs, and developer pages buried in slightly different places.
The webhook URL is the canonical example. It used to be one click from anywhere. Now you either know the URL or you click through Developers → Webhooks → Endpoints, and pray you're in the right mode.
So: bookmark the URLs. Or, you know, press ⌘K.
The 12 Stripe pages I open every week
These are the deep links. Real URLs from the real dashboard. Test-mode equivalents just add /test after the domain.
API keys — dashboard.stripe.com/apikeys
The publishable key and the secret key. If you're staring at pk_live_... and sk_live_... you're in live mode. If they start with pk_test_, you're not. Sounds obvious until it isn't.
Webhooks — dashboard.stripe.com/webhooks
The thing you came here for. Add endpoint, paste URL, pick events, grab signing secret (whsec_...). Stripe quietly moved a bunch of webhook UX into Workbench last year, but the canonical /webhooks URL still works and still gives you the no-frills list.
Events log — dashboard.stripe.com/events
Every event your account has emitted. Searchable by event type. When a webhook fails, this is where you go to confirm Stripe actually sent the thing before you blame your code.
Logs (API requests) — dashboard.stripe.com/logs
Different page. Events are the things Stripe sent out. Logs are the API requests your code made to Stripe. Use logs when you're debugging "why did this 400."
Test mode dashboard — dashboard.stripe.com/test/dashboard
You can also flip the toggle in the sidebar but I always end up flipping it back and forth and creating real customers in test mode by accident. Just navigate directly.
Customers — dashboard.stripe.com/customers
Find a customer by email faster than your own app's admin panel can do it. Honestly underrated debugging surface.
Products — dashboard.stripe.com/products
Where your price IDs live. The thing you'll need when your checkout session is silently failing because you copied a price ID from test mode into your live code.
The four Stripe pages no one tells you about
Workbench — dashboard.stripe.com/workbench
Stripe's newer all-in-one developer UI. It's nicer than the classic pages for some tasks (especially poking at webhook payloads) but it isn't a replacement — half the time you still want the old URLs. Worth knowing it exists.
Billing → Subscriptions — dashboard.stripe.com/subscriptions
If you're shipping a SaaS, this is the only page that tells you whether anyone is actually paying you.
Connect accounts — dashboard.stripe.com/connect/accounts/overview
Only relevant if you're doing marketplace stuff. But if you are, you'll open this page eight times a day.
Status — status.stripe.com
For the times you're 90% sure it's not you.
The webhook setup loop, condensed
If you're setting up Stripe webhooks for the first time:
- Open dashboard.stripe.com/test/webhooks. Use test mode first. Always.
- Click "Add endpoint".
- Paste your URL —
https://yourapp.com/api/webhooks/stripeor wherever you're handling them. Locally? Use the Stripe CLI to forward events:stripe listen --forward-to localhost:3000/api/webhooks/stripe. - Pick events. Start narrow —
checkout.session.completed,customer.subscription.updated,invoice.paid. You can always add more. - Copy the signing secret (
whsec_...) into your env vars. This is the one most people forget. Without it, you cannot verify the webhook signature, and without verification you should not trust the payload.
When you're ready to go live, do exactly the same thing on dashboard.stripe.com/webhooks (no /test). You'll get a different signing secret for live mode. Don't reuse the test one. I have personally watched a friend ship that bug to production at 11pm on a Friday.
The thing nobody mentions about webhook signatures
Stripe signatures expire. The default tolerance is 5 minutes. If your webhook handler is slow, or if your machine clock is drifting, or if you're using a local tunnel with retries, signatures can fail for what looks like no reason. Read the Stripe webhook signing docs before you start blaming your tunnel.
Also: Stripe will retry failed webhooks for up to 3 days. So if your handler returned a 500 and you fixed the bug, the event will come back. Build your code idempotent. Use the event ID (evt_...) as a dedupe key.
Bookmarks are the wrong abstraction for this
I had a Notion page called "stripe urls" for two years. It had 14 links. Half of them rotted because Stripe moves URLs around. The other half I couldn't find when I needed them because I was in a hurry and Notion's search felt slow.
The reason ⌘K works in Linear and Vercel and Notion is that typing four letters is faster than clicking a menu, every single time. The reason that doesn't help you with Stripe is that Stripe's ⌘K only works inside Stripe. The moment you're in Linear and need a Stripe webhook URL, you're back to bookmarks and tabs.
That's the gap devlinkspad fills — a ⌘K palette across every dashboard, not inside any single one. Type "stripe webhook", hit enter, you're there.
If you keep losing Stripe pages, that's literally what devlinkspad is for. ⌘K → devlinkspad.com.
Related:
Press ⌘K. Every dashboard, one keystroke away.
Try devlinkspad — free