Appearance
Choose how to collect payments
You have two main ways to collect payments in WeWeb. Pick the one that fits how you want your app to look and how much you want to build.
Stripe Checkout (hosted page)
Best for: Getting payments live quickly with minimal setup.
- Your backend creates a Checkout Session (with line items, success/cancel URLs, and mode: payment or subscription).
- You send the customer to Stripe’s page (redirect to the session
url). - Stripe shows the payment form, collects the payment, and redirects the customer back to your success or cancel URL.
- You never see or handle card numbers in your app.
Use Checkout when: You’re fine with customers leaving your site for a Stripe-hosted page and you want the least amount of custom UI.
Learn more: Stripe Checkout
Payment Intents (custom form)
Best for: Keeping the user on your site with a payment form that matches your design.
- Your backend creates a Payment Intent and returns a
client_secret. - Your interface renders Stripe’s payment form with Stripe.js, so the form lives inside your app. This part is custom code.
- The customer pays without leaving your page; you control the layout and flow.
- Your backend drives the whole payment: create it, confirm it, capture it later for manual-capture flows, cancel it, and retrieve it again to read why a card was declined.
Use Payment Intents when: You want the payment form embedded in your own pages and a fully custom experience.
Learn more: Payment Intents and subscriptions
A MIDDLE GROUND
Checkout is not only a hosted page. Setting ui_mode to embedded_page shows the Stripe form inside your own page, while your backend stays a single Create Checkout Session action instead of the full Payment Intent lifecycle. See the ui_mode rules →
Quick comparison
| Stripe Checkout | Payment Intents | |
|---|---|---|
| Where does the user pay? | On Stripe’s hosted page | On your page (embedded form) |
| Setup effort | Low | Higher (backend, plus custom code for the form) |
| One-time payments | Yes (mode payment) | Yes |
| Subscriptions | Yes (mode subscription) | Via Create Subscription action (no Checkout) |
| Card data | Never touches your app | Never touches your app (Stripe.js collects it) |
| Backend control | Create, retrieve, list, and expire the session | Full lifecycle: create, confirm, capture, cancel, search |
Next: Stripe Checkout (step by step) or Payment Intents and subscriptions

