Payments for existing customers
Learn how to charge an existing payment method while a customer is on-session.
A Checkout Session allows buyers to enter their payment details. If the buyer is an existing customer, you can configure the Checkout Session to prefill the details with one of the customer’s saved cards.

Create a Checkout SessionServer-side
Checkout supports reusing existing Customer objects with the customer
parameter. When reusing existing customers, all objects created by Checkout, such as Payment Intents and Subscriptions, are associated with that Customer object.
From your server, create a Checkout Session and set the ui_mode to embedded
.
To return customers to a custom page that you host on your website, specify that page’s URL in the return_url parameter. Include the {CHECKOUT_
template variable in the URL to retrieve the session’s status on the return page. Checkout automatically substitutes the variable with the Checkout Session ID before redirecting.
Read more about configuring the return page and other options for customizing redirect behavior.
After you create the Checkout Session, use the client_
returned in the response to mount Checkout.
Mount CheckoutClient-side
Checkout renders in an iframe that securely sends payment information to Stripe over an HTTPS connection.
Common mistake
Avoid placing Checkout within another iframe because some payment methods require redirecting to another page for payment confirmation.
Customize appearance
Customize Checkout to match the design of your site by setting the background color, button color, border radius, and fonts in your account’s branding settings.
By default, Checkout renders with no external padding or margin. We recommend using a container element such as a div to apply your desired margin (for example, 16px on all sides).
Prefill fields on payment page
If all the following conditions are true, Checkout prefills the email, name, card, and billing address fields on the payment page using details from the customer’s saved card:
- Checkout is in
payment
orsubscription
mode;setup
mode doesn’t support prefilling fields. - The customer has a saved card. Checkout only supports prefilling card payment methods.
- The saved card has
allow_
set toredisplay always
or you adjusted the default display setting. - The payment method includes
billing_
required by the Checkout Session’sdetails billing_
value:address_ collection auto
requires values foremail
,name
, andaddress[country]
. US, CA, and GB billing addresses also requireaddress[postal_
.code] required
requires values foremail
,name
, and alladdress
fields.
If your customer has multiple saved cards, Checkout prefills details from the card matching the following prioritization:
- In
payment
mode, Stripe prefills the fields using the customer’s the newest saved card. - In
subscription
mode, Stripe prefills the customer’s default payment method if it’s a card. Otherwise Stripe prefills the newest saved card.
When Checkout is collecting a shipping address, Checkout prefills shipping address fields if the customer’s shipping.address meets the Checkout Session’s supported countries.
Prefill timeout
The prefilled payment method displays for 30 minutes following Checkout Session creation. After it expires, loading the same Checkout Session doesn’t prefill the payment method anymore for security reasons.
Handle post-payment eventsServer-side
Stripe sends a checkout.session.completed event when a customer completes a Checkout Session payment. Use the Dashboard webhook tool or follow the webhook guide to receive and handle these events, which might trigger you to:
- Send an order confirmation email to your customer.
- Log the sale in a database.
- Start a shipping workflow.
Listen for these events rather than waiting for your customer to be redirected back to your website. Triggering fulfillment only from your Checkout landing page is unreliable. Setting up your integration to listen for asynchronous events allows you to accept different types of payment methods with a single integration.
Learn more in our fulfillment guide for Checkout.
Handle the following events when collecting payments with the Checkout:
Event | Description | Action |
---|---|---|
checkout.session.completed | Sent when a customer successfully completes a Checkout Session. | Send the customer an order confirmation and fulfill their order. |
checkout.session.async_payment_succeeded | Sent when a payment made with a delayed payment method, such as ACH direct debt, succeeds. | Send the customer an order confirmation and fulfill their order. |
checkout.session.async_payment_failed | Sent when a payment made with a delayed payment method, such as ACH direct debt, fails. | Notify the customer of the failure and bring them back on-session to attempt payment again. |