🧩 Stripe Webhook Not Triggering Backend Workflow in Bubble – No Data Captured Unless Using /initialize

Hi everyone,

I’m currently integrating Stripe into my Bubble app (using the API Connector and backend workflows) to handle payments and webhook confirmations. However, I’m stuck on an issue where the Stripe webhook doesn’t trigger my Bubble backend workflow unless I add /initialize at the end of the webhook URL.

I’ve set up a backend workflow in Bubble like this:

  • Endpoint name: stripe_webhook
  • Expose as public API workflow: :white_check_mark:
  • Can be run without authentication: :white_check_mark:
  • Method: POST
  • Parameter definition: Manual definition
  • Response type: JSON

When I send test webhooks from Stripe to:
https://myapp.bubbleapps.io/version-test/api/1.1/wf/stripe_webhook
I consistently get:

{
  "statusCode": 404,
  "body": {
    "status": "NOT_FOUND",
    "message": "Workflow stripe_webhook not in initialization mode"
  }
}

BUT, when I change the URL to:
https://myapp.bubbleapps.io/version-test/api/1.1/wf/stripe_webhook/initialize
…the request is captured, Bubble lets me see the data structure, and I can save it.


:construction: What I’ve Tried

  • Added required parameters like id, object, type, data, etc.
  • Tried setting Parameter Definition to both manual and detected modes
  • Recreated the endpoint from scratch
  • Tested with real and test webhook events from Stripe
  • Confirmed headers are Content-Type: application/json
  • Ensured I’m using the correct Stripe API version (2024-06-20)

:red_question_mark: What I Need Help With

  1. Why does Bubble only capture webhook data via /initialize?
    Is that expected behavior — or is my setup flawed?
  2. After structure is saved, the webhook URL (without /initialize) still fails to trigger the workflow. It returns 404 and doesn’t show anything in the Logs.
  3. How do I properly set up the backend workflow to listen for Stripe events like payment_intent.succeeded and update my database?

:magnifying_glass_tilted_left: Notes

  • Stripe confirms the events are being sent (I can see them in the Dashboard logs).
  • In Bubble, no workflow logs appear unless /initialize is used.
  • My goal is to update a Purchased record’s status once a payment succeeds.

Any insight or fixes would be really appreciated! Happy to share screenshots or logs if needed.

Thanks :folded_hands:

Mike

Your Stripe webhook is sending events to /api/1.1/wf/stripe_webhook/initialize, you need to update the URL after initialising successfully so that it sends the webhook to the standard non-initialisation endpoint.

Hi @georgecollier thanks for your response however I have tried this already but the issue is, when I have changed the link back without the Initialize it does not fire the web hook. it only does it when I listen for data on the /Initialize link then when I save it and change the link back nothing happens and web hook dont fire when it should

You need to detect request data, trigger the webhook from stripe to the initialization endpoint, save the initialization data, and update the Stripe webhook URL to no longer include /initialize.

Hi Mike,

I’m experiencing the exact same issue. Were you able to resolve it?

@annesophie Yes - its just a case of doing what @georgecollier said multiple times until it decides to work. It may be an issue with bubble.

many thanks ! Indeed, seems not very stable on my side. I decided to go with a get call instead of webhooks.