Skip to content

Stripe Webhook (Auto-Configured)

When you enable Stripe in Settings → Stripe, your store automatically configures the connection that lets Stripe notify us about payment events — successful payments, refunds, disputes, and failed attempts. You do not need to log into the Stripe Dashboard or copy any "webhook signing secret" — we do it for you.

TIP

You'll see a green box "✓ Webhook configured automatically" on the Stripe settings page once it's set up. If you see a blue "Webhook will be configured automatically when you save your Stripe keys" instead, just save your keys and refresh.


What is a webhook?

When a customer completes a payment, Stripe needs to tell your store "this payment succeeded." That message is called a webhook. Without a working webhook, refunds, disputes, and failed payment attempts won't sync into your order list.

Setting up a webhook manually used to require: logging into the Stripe Dashboard, navigating to Developers → Webhooks, adding a new endpoint, picking a list of events, copying a signing secret, and pasting it back into our admin. We've replaced all of that with one click of Save settings.


How it works

  1. You paste your Stripe Publishable Key and Stripe Secret Key into Settings → Stripe. (Find these in your Stripe Dashboard under Developers → API keys.)
  2. You click Save settings.
  3. We use your secret key to programmatically register a webhook endpoint with Stripe, pointing to your store's domain (e.g. https://yourstore.com/api/webhooks/stripe).
  4. Stripe returns a signing secret. We save it and use it to verify that incoming webhook calls really came from Stripe.

This happens in seconds. You never see the Stripe Dashboard's webhook configuration screen.


Common situations

"I just changed my domain from mystore.merzio.tech to mystore.com"

Your existing webhook still works — the merzio subdomain stays active and continues to resolve to your store, so Stripe's notifications still reach us. But the webhook URL points to your old domain, which is messy.

To clean it up:

  1. Make sure your new domain is fully active (DNS resolved, SSL certificate issued).
  2. Go to Settings → Stripe.
  3. Click Reconfigure next to the webhook status indicator.
  4. Confirm the dialog. We delete the old webhook in Stripe and create a fresh one at your new domain.

You can also just save your Stripe settings again — but Reconfigure is the cleanest path because it removes the old endpoint instead of leaving it dangling.

"I see a warning that the webhook couldn't be configured"

The most common causes:

  • "Invalid Stripe secret key" — the secret key you pasted is wrong, expired, or for a different Stripe account. Get a fresh secret key from Stripe Dashboard → Developers → API keys and paste it again.
  • "This store has no primary domain set yet" — you haven't activated a domain for this store yet. Add and verify a domain first under Domains, then re-save your Stripe settings.
  • "Webhook endpoint already exists in Stripe" — you previously created a webhook endpoint manually in the Stripe Dashboard. Either click Reconfigure to replace it (recommended), or click Advanced: paste secret manually at the bottom and paste the existing signing secret from the Stripe Dashboard.

WARNING

Even when you see a warning, your other Stripe settings are still saved. Card payments will still work — but features that depend on webhooks (refund status sync, failed payment notifications) won't update until the webhook is configured.

"I want to use a webhook I already created manually in Stripe"

Click Advanced: paste secret manually at the bottom of the webhook section. Paste the existing signing secret from the Stripe Dashboard. Save. We'll use that one instead of creating a new one.

"I want to rotate the signing secret"

Click Reconfigure. We'll delete the existing endpoint in Stripe and create a brand-new one with a fresh signing secret. The old secret stops working immediately.


What events we listen for

We subscribe to the events your store needs:

  • payment_intent.succeeded — payment completed successfully
  • payment_intent.payment_failed — card declined / 3DS failed
  • payment_intent.canceled — customer cancelled mid-payment
  • charge.refunded, charge.refund.updated, refund.created, refund.updated, refund.failed — refund lifecycle

You don't need to add or remove events manually. If new events become relevant in the future, they're added during a platform update.


How to verify it's working

The most reliable check:

  1. In Stripe Dashboard → Developers → Webhooks, click the endpoint pointing to your store's domain.
  2. Click Send test webhook.
  3. Pick payment_intent.succeeded and click Send.
  4. The response should be 200 OK. If you see "Invalid signature" instead, click Reconfigure in your store's admin to rotate the secret.