Skip to content
Create account
or
Sign in
The Stripe Docs logo
/
Ask AI
Create account
Sign in
Get started
Payments
Finance automation
Platforms and marketplaces
Money management
Developer tools
Get started
Payments
Finance automation
Get started
Payments
Finance automation
Platforms and marketplaces
Money management
OverviewExplore all products
Start building
Start developing
Sample projects
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
    Release phases
Building with LLMs
Use Stripe without code
Set up Stripe
Create an account
Products and prices
Web Dashboard
Mobile Dashboard
Migrate to Stripe
Migrate customer data
Migrate payment data
Migrate subscriptions
Manage fraud risk
Understand fraud
Radar fraud protection
Manage disputes
Verify identities
Regulatory support
HomeGet startedAbout the APIsPayment Intents API

How PaymentIntents work

Learn how PaymentIntents work within the payment flow.

Copy page

Payments involving asynchronous processes can be complex to manage. For example, a user might be required to confirm a payment using 3D Secure. Asynchronous payment flows are hard to manage because they depend on customer interactions that happen outside your application. PaymentIntents and SetupIntents simplify management by tracking the status of the flow in a state machine.

requires_payment_method

When the PaymentIntent is created, it has a status of requires_payment_method1 until a payment method is attached.

We recommend creating the PaymentIntent as soon as you know how much you want to charge, so that Stripe can record all the attempted payments.

requires_confirmation
Optional

After the customer provides their payment information, the PaymentIntent is ready to be confirmed.

In most integrations, this state is skipped because payment method information is submitted at the same time that the payment is confirmed.

requires_action

If the payment requires additional actions, such as authenticating with 3D Secure, the PaymentIntent has a status of requires_action1.

processing

After required actions are handled, the PaymentIntent moves to processing for asynchronous payment methods, such as bank debits. These types of payment methods can take up to a few days to process. Other payment methods, such as cards, are processed more quickly and don’t go into the processing status.

If you’re separately authorising and capturing funds, your PaymentIntent can instead move to requires_capture. In that case, attempting to capture the funds moves it to processing.

succeeded

A PaymentIntent with a status of succeeded means that the payment flow it is driving is complete.

The funds are now in your account and you can confidently fulfill the order. If you need to refund the customer, you can use the Refunds API.

requires_payment_method

If the payment attempt fails (for example due to a decline), the PaymentIntent’s status returns to requires_payment_method so that the payment can be retried.

canceled

You can cancel a PaymentIntent at any point before it’s in a processing2 or succeeded state. Cancelling it invalidates the PaymentIntent for future payment attempts, and can’t be undone. If any funds have been held, cancellation releases them.

PaymentIntents might also be automatically transitioned to the canceled state after they have been confirmed too many times.

1 Versions of the API before 2019-02-11 show requires_source instead of requires_payment_method and requires_source_action instead of requires_action.

2 You can cancel a PaymentIntent in the processing state when the associated Payment Method is US Bank Account. However, it might fail due to a limited and varying cancellation time window.

Was this page helpful?
YesNo
Need help? Contact Support.
Join our early access programme.
Check out our changelog.
Questions? Contact Sales.
LLM? Read llms.txt.
Powered by Markdoc