One Stripe account, two apps. Each purchase is tagged so it only triggers its own app's fulfillment.
barrel-brand-masterclass.base44.app
app_source = barrel_brand_masterclassSame STRIPE_SECRET_KEY
Sends every checkout event to BOTH webhook endpoints
dramofdestiny.base44.app
app_source = dram_of_destinyapp_source and ignores anything that isn't its ownFulfill only if app_source === "barrel_brand_masterclass"
else log & ignore (200 OK)
Fulfill only if app_source === "dram_of_destiny"
else log & ignore (200 OK)
Put the identical STRIPE_SECRET_KEY in both apps' secrets — they share one Stripe account.
In Stripe → Developers → Webhooks, add an endpoint for the Barrel & Brand webhook URL. Keep the Dram of Destiny endpoint. Both subscribe to checkout.session.completed + checkout.session.expired.
Each endpoint has its own whsec_…. Put B&B's secret in B&B's STRIPE_WEBHOOK_SECRET, and Dram's in Dram's.
Each app's create-checkout sets metadata[app_source] to its own value. (Dram of Destiny is done.)
Each app's stripe-webhook fulfills only when app_source matches its own value, and ignores everything else. (Dram of Destiny is done.)
✅ Result: a B&B purchase triggers only B&B's fulfillment (X); a Dram purchase triggers only Dram's (Y) — no cross-talk.