One-time payments
The payer completes one purchase. Continue to the one-time choices below.
Start with the Stripe flow your product already uses. Proxy does not require a new payment UI, and the technical path ID is only needed after you choose.
One-time payments
The payer completes one purchase. Continue to the one-time choices below.
Subscriptions
Stripe creates or updates a recurring Subscription. Continue to the subscription choices below.
Both
Choose one path for each purchase type. You can share one Stripe configuration, but implement and validate the one-time and subscription guides separately.
This is the most important distinction.
Choose this branch when your server creates a Checkout Session and Stripe Checkout creates the PaymentIntent or Subscription behind it.
If your code calls openCheckout, you are in this branch. An Elements UI does
not automatically mean a direct PaymentIntent.
Choose this branch when your code creates the PaymentIntent, SetupIntent, or Subscription without a Checkout Session.
Only answer this when you chose Stripe Checkout.
| Choice | Best when | Tradeoff |
|---|---|---|
| Hosted redirect — recommended | You want the fastest and simplest start. | The payer briefly leaves your page for Stripe. |
| Embedded Checkout | You want Stripe’s Checkout UI inside your page. | More client integration and newer SDK requirements. |
| Custom Checkout with Elements | Your page needs a custom Elements layout while Checkout still creates the payment or subscription. | Most presentation control and the highest compatibility floor. |
Every result below assumes the same Stripe connection, Proxy API keys, SDK
installation, hosted handoff configuration, and durable handoff endpoint.
Complete Before You Code,
Install SDKs, and
Create the Handoff Link
once, then return to the selected terminal guide. The rest of that quickstart
implements the recommended hosted one-time path; do not copy its hosted
presentation or Stripe client into an embedded, custom, direct, or subscription
result. Create the Stripe client in the selected terminal guide with the request
API version reported by that path’s stripe doctor output.
Hosted Checkout — recommended
Stripe Checkout creates the PaymentIntent and redirects the payer.
Technical ID after selection: OT-CO-H
Embedded Checkout
Stripe Checkout creates the PaymentIntent in an embedded Checkout surface.
Technical ID after selection: OT-CO-E
Custom Checkout with Elements
A Checkout Session backs your custom Elements-based payment UI.
Technical ID after selection: OT-CO-C
Direct PaymentIntent
Your server creates the PaymentIntent and your existing UI confirms it.
Implement direct PaymentIntent →
Technical ID after selection: OT-PI
Hosted Checkout — recommended
Stripe Checkout collects the initial payment method and creates the Subscription.
Implement hosted subscription Checkout →
Technical ID after selection: SUB-CO-H
Embedded Checkout
Embedded Checkout collects the initial payment method and creates the Subscription.
Implement embedded subscription Checkout →
Technical ID after selection: SUB-CO-E
Custom Checkout with Elements
A Checkout Session creates the Subscription while your page renders the payment UI with Elements.
Implement custom subscription Checkout →
Technical ID after selection: SUB-CO-C
Direct after SetupIntent
Your existing UI collects a payment method, then your server creates the Subscription.
Implement a direct subscription →
Technical ID after selection: SUB-SI
Direct with saved payment method
An authorized shared billing account has already selected the payment method; your server creates the Subscription.
Implement a saved-method subscription →
Technical ID after selection: SUB-SAVED
proxy stripe doctor --path … --format json command for
canonical versions, permissions, events, and unsupported options.The matrix below is for agents and experienced implementers who already chose a flow. Human labels remain first; internal IDs are secondary routing details.
| Human path | Technical ID | Stripe object creation | Presentation | Guide |
|---|---|---|---|---|
| One-time payment with hosted Checkout Recommended default | OT-CO-H | Stripe Checkout creates the PaymentIntent | Hosted redirect | Open guide |
| One-time payment with embedded Checkout | OT-CO-E | Stripe Checkout creates the PaymentIntent | Checkout embedded in your page | Open guide |
| One-time payment with custom Checkout | OT-CO-C | Stripe Checkout creates the PaymentIntent | Your Elements-based payment UI | Open guide |
| One-time payment with your PaymentIntent | OT-PI | Your server creates the PaymentIntent directly | Your existing Elements or native UI | Open guide |
| Subscription with hosted Checkout Recommended default | SUB-CO-H | Stripe Checkout creates the Subscription | Hosted redirect | Open guide |
| Subscription with embedded Checkout | SUB-CO-E | Stripe Checkout creates the Subscription | Checkout embedded in your page | Open guide |
| Subscription with custom Checkout | SUB-CO-C | Stripe Checkout creates the Subscription | Your Elements-based payment UI | Open guide |
| Subscription after collecting a payment method | SUB-SI | Your server creates a SetupIntent, then the Subscription | Your existing Elements or native UI | Open guide |
| Subscription with an authorized saved payment method | SUB-SAVED | Your server creates the Subscription directly | No new payment UI unless Stripe requires customer action | Open guide |
Availability, minimum package/API versions, permissions, events, and unsupported options are generated from the canonical Stripe capability manifest. Run proxy stripe doctor --path <technical-id> --format json after selecting a path.
For exact read permissions and webhook events, continue to Stripe events and permissions. For package/API version floors, use Stripe compatibility.