Sign in
An image of the Stripe logo
Create account
Sign in
Home
Payments
Business operations
Financial services
Developer tools
All products
Home
Payments
Business operations
Home
Payments
Business operations
Financial services
Developer tools
Support
Overview
Payment Intents
How intents work
Payment status updates
Compare to Charges
Setup Intents
Payment Methods
Older APIs
Testing
No-code options
HomePaymentsPayment Intents

How intents work

Learn about the status and lifecycle of PaymentIntents and SetupIntents.

Asynchronous payment flows are complex to manage because they depend on customer interactions that happen outside of your application. PaymentIntents and SetupIntents simplify this by keeping track of the status of the payment or setup flow. The PaymentIntent and SetupIntent objects act as the single source of truth in the lifecycle of the flow.

requires_payment_method

When the PaymentIntent is created, it has a status of requires_payment_method 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_action.

processing

Once required actions are handled, the PaymentIntent moves to processing. While for some payment methods (for example, cards) processing can be quick, other types of payment methods can take up to a few days to process.

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.

canceled

You may cancel a PaymentIntent at any point before it is processing or succeeded. This invalidates the PaymentIntent for future payment attempts, and cannot be undone. If any funds have been held, cancellation returns those funds.

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

If you’re separately authorizing and capturing funds, your PaymentIntent may also move to requires_capture.

Was this page helpful?
Questions? Contact us.
View developer tutorials on YouTube.
Check out our product changelog.
Powered by Markdoc
You can unsubscribe at any time. Read our privacy policy.
Stripe Shell
Test mode
▗▄ ▄▟█ █▀▀ ▗▟████▙▖ ██████ ███▗▟█ ███ ███▗▟██▙▖ ▗▟█████▙▖ ███▖ ▀▀ ███ ███▀▀▀ ███ ███▀ ███ ███ ███ ▝▜████▙▖ ███ ███ ███ ███ ███ █████████ ▄▄ ▝███ ███ ▄ ███ ███ ███▄ ███ ███ ▄▄ ▝▜████▛▘ ▝▜███▛ ███ ███ ███▝▜██▛▘ ▝▜█████▛▘ ███ ▀▘
Welcome to the Stripe Shell! Stripe Shell is a browser-based shell with the Stripe CLI pre-installed. Login to Stripe docs and press Control + Backtick on your keyboard to start managing your Stripe resources in test mode. - View supported 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.
$