Understanding declines and failed payments (2023)

Payments can fail for a variety of reasons and it's frustrating when they result in the loss of legitimate business. Many payments fail for a good reason and do so to minimize the chance of a fraudulent payment.

We continually work to reduce rejection rates for cards processed on Stripe through machine learning and experimentation, working with issuers and network contacts to optimize acceptance rates for all Stripe businesses, often without requiring changes in its integration.

There are three possible reasons why a credit card payment may fail:

  • Payments were declined by card issuers
  • blocked payments
  • Invalid API calls

Each type of error is handled differently. The reason why a payment failed is reported in the payment details on the dashboard and via the API as part of the charge object.result. This parameter contains the type of payment error and additional information about the reason for the error.

Payments were declined by card issuers

When a charge is sent to your customer's card issuer, they have automated systems and models that determine whether or not to authorize it. These systems analyze various signals, e.g. B. your customers' spending behavior, account balance, and card information such as expiration date, address information, and CVC.

If your customer's card issuer declines a payment, Stripe will provide as much information as possible to explain the decline, both within theboardand through the API. In some cases, card issuers also provide helpful explanations, e.g. B. that the card number or expiration date is incorrect or that the client does not have sufficient funds to make the payment. Your card issuer may provide one of these more specific reasons to Stripe through arejection code.

Understanding declines and failed payments (1)

Unfortunately, most declines are classified by your card issuer as "general," so it's not always possible to know exactly why a payment was declined. If all the information on the card appears correct, the best thing to do is for your customer to contact their card issuer and request more information. For privacy and security reasons, card issuers can only discuss the details of a declined payment with their cardholders; they cannot discuss this with the merchant or even Stripe.

Through the API, the result of a declined payment includes the type of payment error that occurred and the reason the decline code received from the card issuer was used. In some cases, the reason given may consider factors other than the sender's response code, such as:RadarEvaluation of the rule that led to the blocking of the debit.

...Result: {network status: "rejected_by_network",Reason: "Expired Card",risk level: "normal",seller_message: "Bank returned rejection code `expired_card`.",type: "Exhibitor_rejected"},...

Reduce declines from card issuers

Card issuer declines due to incorrect card information (eg incorrect card number or expiration date) are best handled by guiding your customer to correct the error or even use a card or method different payment. For example,Cash registerYou can provide feedback to the customer if the card they are trying to use is declined so they can try again or use an alternative payment method.

Suspicions of fraudulent activity by card issuers are more difficult to handle, but having customers provide their CVC and zip code when paying can significantly reduce the number of declines you experience. The impact of other data you collect, such as B. Full billing address, varies by card brand and country. If you're still seeing a higher number of declined payments than you expected, consider collecting this additional data. additionally use3D safeto authenticate payments can reduce the rate of rejection in countries where it is supported.

When investigating blanket or unrecognized declines, the attachment can provide a better idea of ​​why the card may have declined. For example, if the CVC or AVS checks failed when adding the card, fixing those issues and attempting the charge again may result in a successful authorization. However, if you discover that a card was issued in a different country than the one corresponding to the customer's IP address, this may indicate a legitimate denial due to possible unauthorized use of the card.

card restrictions

Some customers find that their card has limitations on the types of purchases they can make.FSA/HSAThe cards are often restricted to certain types of businesses (for example, health care providers), so any other type of purchase would be rejected. Additionally, some card issuers may not allow purchases from certain countries or outside of your own country. In both cases, your customer will need to contact their card issuer to find out about the existing restrictions.

Geographic location

If your customers use cards issued in a country other than the country where your Stripe account is registered, you may experience a higher decline rate. The fastest way to resolve this is for your customers to contact their issuing bank to authorize the charge. If you have customers that are concentrated in different parts of the world, you may also consider setting up Stripe accounts in your largest markets or those where you experience higher bounce rates to process those fees locally.

Analyze your rejection rate over time

Tracking your disapproval rate over time is a great way to proactively identify fraud issues or potential integration errors. We recommend looking at unique denials and excluding failed retries, rather than the absolute number of denials, as this can provide a clearer picture of your overall authorization rates.

Raya-Sigma, our interactive SQL reporting environment, includes prebuilt queries to help you analyze your bounce rate. If you are investigating rejects outside of Sigma, you can rule out retries by looking at the mapfingerprintsinstead of lot ID.

blocked payments

Stripe's suite of automated fraud prevention tools,Radar, blocks high-risk payments, e.g. B. Payments with mismatched CVC or ZIP code values, even if you are not a Radar subscriber. see oursFraud Prevention DocumentLearn more about how Radar can help you define rules to combat and prevent fraud and disputes.

Understanding declines and failed payments (2)

Payment declined

Using the API thatresultof a blocked payment reflects the nature of the non-payment and the reason for it, as well as the level of risk assessed.

...Result: {network status: "not_sent_to_the_network",Reason: "highest_risk_level",risk level: "higher",seller_message: "Stripe has blocked this charge as too risky.",type: "blocked"},...

A blocked payment is first authorized by the card issuer and processed successfully. Instead, Stripe does not charge the card as the payment is likely to be fraudulent and could lead to a dispute.

Depending on the type of card used, some customers may see the card issuer's authorization for the payment amount on their statement. This amount has not been debited and no funds have been debited. The card issuer will remove the authorization from your statement within a few days.

If Stripe Radar ever blocks a payment that you know is legitimate, you can remove the block from the dashboard. To do this, look at the payment on the dashboard and click onAdd to allow listButton. Adding a payment to the allow list doesn't retry it, but it prevents Stripe Radar from blocking future payment attempts with that card or email address.

don't see themAdd to allow list¿Gusto?contact stripesto add this feature to your Radar account.

Invalid API calls

As you develop your Stripe integration, a good test should identify potential errors that could result in invalid API calls. Consequently, these production failures should be rare. Invalid API calls generally do not result in a payment appearing on your dashboard. However, in some borderline cases, payment may appear.

...Result: {network status: "not_sent_to_the_network",type: "invalid"},...

Manage payment errors programmatically

There are several ways to deal with defaults:

  • recover thelast_payment_error.decline_codeproperty of the PaymentIntent object to determine why the payment attempt was declined by the card issuer.
  • Iterate over the PaymentIntentsimpeachment attemptsand inspect theError message.
  • Use webhooksto monitor the status updates of the PaymentIntent. For example, himDestined to pay. payment_failedThe event is triggered when a payment attempt fails.

You may also need to handle additional payment default scenarios, e.g. B. when your customer is present at their checkout (in session) or when they are not at their checkout (out of session).

denials in session

If your customer is present at the checkout on your website or app, ask them to try their payment method again or request a new payment method.

Out-of-session rejections

If your customer is not available to make a payment or update a payment method, notify them (for example, by email or in-app notification) so they can visit your website or app to do so. If your company is subject to regulations such asStrong client authentication, Payment attempts may also require authentication and fail with aauthentication requiredrejection code. For more information on how to handle these scenarios, seeOff-session payments with saved cards.

When developing your integration, we recommend writing code that correctly handles all possible API exceptions, including unexpected ones.error.

stripe billinghandles many of these payment default scenarios with features likeautomatic paymentyHosted invoices. See if Stripe Billing works for your business so you don't have to create these flows yourself.

The card issuer refuses to try again

If your integration has retry logic to retry declined charges, be aware that card networks have rules about how many times you can retry a single charge. We recommend not repeating the charge more than four times. Issuers may view the creation of additional retries as potential cheating and may result in legitimate charges being declined more frequently.

stripe billingusers can benefitsmart reps, a machine learning tool that repeats card loads at the optimal time to increase the probability of a successful load.

See also

  • reject codes
  • Disputes Overview
Top Articles
Latest Posts
Article information

Author: Mr. See Jast

Last Updated: 01/24/2023

Views: 5786

Rating: 4.4 / 5 (55 voted)

Reviews: 94% of readers found this page helpful

Author information

Name: Mr. See Jast

Birthday: 1999-07-30

Address: 8409 Megan Mountain, New Mathew, MT 44997-8193

Phone: +5023589614038

Job: Chief Executive

Hobby: Leather crafting, Flag Football, Candle making, Flying, Poi, Gunsmithing, Swimming

Introduction: My name is Mr. See Jast, I am a open, jolly, gorgeous, courageous, inexpensive, friendly, homely person who loves writing and wants to share my knowledge and understanding with you.