Skip to content
Sign in
An image of the Stripe logo
/
Create account
Sign in
Home
Payments
Finance automation
Banking as a service
Developer tools
No-code
All products
Home
Payments
Finance automation
Home
Payments
Finance automation
Banking as a service
Developer tools
Overview
Get started
About Stripe payments
Start an integration
Payment Links
Checkout
Web Elements
Mobile Elements
Payment scenarios
During the payment
After the payment
Add payment methods
More payment scenarios
Faster checkout with Link
Other Stripe products
Connect
Terminal
Radar
Financial Connections
Crypto
Identity
Climate
Resources
About the APIs
    API tour
    Payment Intents API
      How PaymentIntents work
      Payment status updates
      Asynchronous Capture
      Compare to Charges
    Setup Intents API
    Payment Methods
    Older APIs
Implementation guides
Regulation support
Testing
HomePaymentsPayment Intents API

Charges versus Payment Intents APIs

Learn about the differences between Stripe's two core payment APIs and when to use them.

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 Charges and Payment Intents APIs let you build custom payment flows and experiences.

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 APIPayment Intents API
Used by businesses with customers primarily in the US / Canada who want a simple way to accept cards.Required for businesses that accept multiple payment methods and cards requiring authentication (for example, 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 readyIs 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:

Description BeforeAfter
Details about the payment method used to create a chargecharge.sourcecharge.payment_method_details
ID of the payment method used for the chargecharge.source.idcharge.payment_method
Type of payment method usedcharge.source.object (for example, card or bank_account)charge.payment_method_details.type
Billing information for the charge (for example, billing postal code)charge.source.address_zipcharge.billing_details.address.postal_code
Name of the cardholdercharge.source.namecharge.billing_details.name
Last 4 digits of the card usedcharge.source.last4charge.payment_method_details.card.last4
Fingerprint of the cardcharge.source.fingerprintcharge.payment_method_details.card.fingerprint
CVC verification status for the chargecharge.source.cvc_checkcharge.payment_method_details.card.checks.cvc_check
Card brand valuescharge.source.brand can be one of: American Express, Diners Club, Discover, JCB, MasterCard, UnionPay, Visacharge.payment_method_details.card.brand can be one of: amex, diners, discover, jcb, mastercard, unionpay, visa
Google Pay enum valuecharge.source.tokenization_method is android_paycard.wallet.type within charge.payment_method_details is google_pay

See also

  • Migrate to Payment Intents
Was this page helpful?
Need help? Contact Support.
Watch our developer tutorials.
Check out our product changelog.
Questions? Contact Sales.
Powered by Markdoc
You can unsubscribe at any time. Read our privacy policy.
On this page
Understanding the Stripe payment APIs
Migrating code that reads from charges
See also
Products Used
Payments
Checkout
Stripe Shell
Test mode
Welcome to the Stripe Shell! Stripe Shell is a browser-based shell with the Stripe CLI pre-installed. Log in to your Stripe account and press Control + Backtick (`) on your keyboard to start managing your Stripe resources in test mode. - View supported Stripe commands: - Find webhook events: - Listen for webhook events: - Call Stripe APIs: stripe [api resource] [operation] (e.g., )
The Stripe Shell is best experienced on desktop.
$