Understanding the Stripe payment APIs
There are three ways to accept payments on Stripe today:
- Stripe Checkout
- Charges API
- Payment Intents API
Stripe Checkout is a prebuilt payment page that you can redirect your customer to for simple purchases and subscriptions. It provides many features, such as Apple Pay, Google Pay, internationalization, and form validation.
The Payment Intents API is the unifying API for all Stripe products and payment methods. While we are not deprecating Charges, new features are only available with the Payment Intents API.
For a full feature comparison, see the table below:
|Charges API||Payment Intents API|
|Used by businesses with customers primarily in the U.S. / Canada who want a simple way to accept cards.||Required for businesses that accept multiple payment methods and cards requiring authentication (e.g., due to Strong Customer Authentication in Europe).|
|Works on Web, iOS, and Android.||Works on Web, iOS, and Android. Can also be used to accept in-store payments with Terminal.|
|Supports cards and all payment methods on the Sources API.||Supports cards, cards requiring 3DS, iDEAL, SEPA, and many other payment methods.|
|Is not SCA ready||Is SCA ready|
Migrating code that reads from charges
If you have an application with multiple payment flows and incrementally migrating each one from the Charges API to the Payment Intents API, you should first update any code that reads from the Charge object. To help with this, the charge object has two additional properties, payment_method_details and billing_details, which provide a consistent interface for reading the details of the payment method used for the charge.
These fields are available on all API versions and on charge objects created with both the Charges API and the Payment Intents API.
The following table shows commonly used properties on a charge and how the same information can be accessed using the additional properties: