Setting up Stripe webhook

Make sure you already have: - Stripe enabled in Booknetic SaaS - your Stripe Publishable key and Secret key added in Booknetic SaaS settings - access to your...

Version:
Categories

Why you need a Stripe webhook

Stripe Checkout confirms the first payment when a tenant subscribes to a plan. But subscription billing does not stop after the first payment.

A Stripe webhook lets Stripe notify your Booknetic SaaS site when important subscription events happen later, such as:

  • a subscription renewal is paid successfully
  • a subscription is cancelled in Stripe

Without a working webhook, Stripe may have the correct subscription status, but Booknetic SaaS may not update in real time. For example, a tenant may pay a renewal in Stripe, but the subscription period in Booknetic SaaS may not extend until the webhook is configured correctly.

In short: Stripe is where the subscription payment happens; the webhook is how Booknetic SaaS hears about the result.

Before you start

Make sure you already have:

  • Stripe enabled in Booknetic SaaS
  • your Stripe Publishable key and Secret key added in Booknetic SaaS settings
  • access to your Stripe Dashboard
  • your live website domain using HTTPS

Your Stripe API version should be compatible with Booknetic SaaS. The current Booknetic SaaS Stripe integration sets the Stripe API version to:

2025-07-30.basil

If you use a very old Stripe account/API configuration and webhook events arrive but subscription renewals are still not updating in Booknetic SaaS, contact support for review.

Copy your Booknetic SaaS webhook URL

Your webhook URL uses your own website domain plus this Booknetic SaaS webhook action:

https://your-domain.com/?booknetic_saas_action=stripe_webhook

Replace https://your-domain.com with your real SaaS platform domain.

For example:

https://example.com/?booknetic_saas_action=stripe_webhook

Important: Use ?booknetic_saas_action=stripe_webhook. Do not use older or different-looking webhook URLs such as ?bkntcsaas_stripe_webhook=1.

Add the webhook endpoint in Stripe

For all Stripe Dashboard steps below, refer to Stripe's official documentation for current UI screenshots: https://docs.stripe.com/webhooks.

In your Stripe Dashboard:

  1. Open Developers.
  2. Go to Webhooks.
  3. Click Add endpoint or Create an event destination. Stripe may show either wording depending on your Dashboard version.
  4. Choose your own Stripe account as the event source. Do not choose connected accounts unless you are intentionally configuring a Stripe Connect application.
  5. Paste your Booknetic SaaS webhook URL into the endpoint URL field:
https://your-domain.com/?booknetic_saas_action=stripe_webhook
  1. Add a clear description, for example:
Booknetic SaaS billing webhook
  1. Select the events listed in the next section.
  2. Save the endpoint.

Select the required Stripe events

Booknetic SaaS listens for these Stripe webhook events:

Stripe event What it updates in Booknetic SaaS
invoice.paid Confirms paid renewals and extends the tenant subscription period
customer.subscription.deleted Marks the subscription as cancelled/unsubscribed in Booknetic SaaS

Add both events to the endpoint:

invoice.paid
customer.subscription.deleted

Other Stripe events are not required for the current Booknetic SaaS subscription sync.

Copy the webhook signing secret from Stripe

After you create the endpoint, open it in Stripe and reveal the Signing secret.

It usually starts with:

whsec_

Copy this value. You will paste it into Booknetic SaaS in the next step.

Keep this secret private. Do not send it in public chat, screenshots, or emails.

Add the webhook secret in Booknetic SaaS

In your WordPress admin area:

  1. Open Booknetic SaaS.
  2. Go to Settings.
  3. Open the Payment Gateways or Stripe section.
  4. Find the Webhook secret field.
  5. Paste the whsec_... signing secret from Stripe.
  6. Save the settings.

Booknetic SaaS uses this secret to check that webhook requests really came from Stripe. If the secret is missing or wrong, the webhook request is rejected.

Test the webhook

After saving the endpoint and webhook secret, test the setup from Stripe.

In Stripe:

  1. Open Developers → Webhooks.
  2. Open the Booknetic SaaS webhook endpoint you created.
  3. Use Stripe's test/send option for the endpoint.
  4. Send a test event for one of the subscribed events, such as invoice.paid.
  5. Check the delivery result.

A successful delivery should return an HTTP 200 response.

A Stripe test event is useful for checking that Stripe can reach your site and that the signing secret is accepted. To confirm the full subscription sync, also run a real test subscription flow in Stripe test mode and confirm that the tenant subscription updates in Booknetic SaaS.

How to confirm it is working

After setup, you can verify the webhook in two places:

  1. Stripe Dashboard → Webhooks

    • Open the endpoint.
    • Check recent deliveries.
    • Successful deliveries should show a 2xx response, usually 200.
  2. Booknetic SaaS tenant billing/subscription state

    • Complete a test subscription payment.
    • Confirm the tenant subscription becomes active.
    • Cancel the test subscription in Stripe.
    • Confirm Booknetic SaaS updates the subscription state after the webhook is delivered.

Troubleshooting

Stripe shows 400 instead of 200

A 400 response usually means Booknetic SaaS could not verify the webhook request.

Most common causes:

  • the webhook secret in Booknetic SaaS is empty
  • the wrong whsec_... secret was pasted
  • the secret belongs to a different Stripe webhook endpoint
  • the endpoint was recreated in Stripe, but the new secret was not copied into Booknetic SaaS

Fix:

  1. Open the webhook endpoint in Stripe.
  2. Reveal/copy the current signing secret.
  3. Paste it again into Booknetic SaaS → Settings → Stripe → Webhook secret.
  4. Save settings.
  5. Send another test event from Stripe.

A subscription was cancelled in Stripe, but it is still active in Booknetic SaaS

This usually means Booknetic SaaS did not receive or accept the customer.subscription.deleted webhook event.

Check:

  • the webhook endpoint URL is correct
  • the endpoint is subscribed to customer.subscription.deleted
  • recent Stripe deliveries show HTTP 200
  • the webhook secret in Booknetic SaaS matches the endpoint's current signing secret

A renewal was paid in Stripe, but the tenant expiry date did not update

Renewals are updated through the invoice.paid webhook event.

Check:

  • the endpoint is subscribed to invoice.paid
  • Stripe shows a successful delivery for the invoice event
  • the delivery response is 200
  • the webhook secret is correct

If Stripe shows the event was delivered successfully but Booknetic SaaS still did not update, contact support with the Stripe event ID and the affected tenant.

I changed the webhook endpoint in Stripe and now it stopped working

When you create a new endpoint, Stripe generates a new signing secret. Copy the new whsec_... value into Booknetic SaaS and save settings again.

My tenant asks: "Where can I update my card?"

Booknetic SaaS does not currently include a Stripe Customer Portal button for tenants to update their card themselves.

Recommended options:

  • Ask the tenant to cancel the current subscription and subscribe to the same plan again. The new checkout lets them enter a new card.
  • If the tenant needs help without cancelling/re-subscribing, the platform owner must help from the Stripe Dashboard or contact support for manual assistance.

Do not tell tenants that they can update their card from a Booknetic SaaS Stripe Customer Portal link, because that self-service portal is not currently wired into Booknetic SaaS.

Where to find Stripe Dashboard screenshots

This page intentionally does not embed Stripe Dashboard screenshots. Stripe regularly updates its Dashboard UI, and stale screenshots create more confusion than they prevent.

For current, official screenshots of the Webhooks endpoint setup screens, see Stripe's own documentation: https://docs.stripe.com/webhooks.