Skip to main content

Soft vs. Hard Payment Declines: Retry, Recover or Ask the Customer

By Gruv Editorial Team
Contributor
Updated on
•
7 min read
Soft vs. Hard Payment Declines: Retry, Recover or Ask the Customer - hero image

Quick Answer

Use the actual provider’s decline code and retry advice. A confirmed temporary refusal may permit a later authorization attempt; an authentication requirement needs the customer’s authentication flow; invalid or stopped credentials require action. A timeout or indeterminate server error is not a confirmed decline: recover the original payment before creating another attempt.

Use the code to decide what happens next#

A customer’s payment fails at checkout. Calling it soft or hard is useful only if the label leads to the right action. Authentication required, a mistyped CVC and a reported-lost card are all refusals, but they do not share one recovery path.

In common operational use, soft suggests a potentially recoverable refusal and hard suggests that retrying the same conditions will not help. Providers can use these terms differently. Keep the raw response code, payment state and any advice code, and map them under the selected product’s documentation instead of letting the label itself authorize a retry.

This guide concerns inbound collections from customers. Bank rejection of an outbound seller or contractor payout is a separate workflow with its own codes, funding and beneficiary evidence.

Separate confirmed refusal from unknown execution#

OutcomeWhat you knowAction
Confirmed authorization refusalThe selected attempt was refusedApply the provider’s code-specific next step
Authentication requiredCustomer action is neededRun or resume the supported authentication flow
Authorized or completedAn external financial action existsContinue capture/fulfilment under its state; do not create a replacement
Timeout or indeterminate errorThe financial outcome is incompleteRecover the original resource/request before another attempt

An HTTP error is not enough to establish a declined card. Stripe’s advanced error guidance warns that a server error can have side effects. Treat the result as unresolved until the original request, resource or reconciliation evidence establishes what happened.

A code-specific example using Stripe#

Stripe card codeInterpretation in this productReader action
authentication_requiredAuthentication such as 3DS is neededUse the supported authentication flow; off-session recovery may require bringing the customer on-session
incorrect_cvcEntered CVC is incorrectAsk for correct details through the secure payment UI
issuer_not_availableIssuer could not be reachedApply permitted retry guidance after confirming the attempt’s state
insufficient_fundsCard lacks funds for this purchaseOffer another method or obtain customer action; do not assume one universal automatic-retry allowance
expired_cardCard has expiredRequest an updated payment method
lost_card or stolen_cardCard is reported lost or stolenStop same-credential retry; use generic customer-facing wording
duplicate_transactionA similar transaction was recently submittedCheck for an existing payment before creating another

These actions are scoped to Stripe’s card decline codes, checked October 3, 2026. They do not define bank-payout recovery or every alternative payment method. Where advice codes or network restrictions provide a more specific instruction, apply that instruction to the actual account and product.

Distinguish replay from a new authorization#

A transport replay repeats the same supported request to recover its result. A new authorization asks the payment system to attempt collection again. The business invoice can stay the same, but the financial attempt is different. Keep both IDs so support can see whether it is recovering an existing result or trying another collection.

For a supported network-error replay, keep the original provider key and parameters. If you change payment details after a confirmed refusal, follow the resource’s update/reconfirmation rules and record the new attempt. Do not change a still-unknown request or create a fresh key solely to escape a cached response.

Stripe’s PaymentIntent guidance recommends reusing the intent when a checkout resumes. Treat the intent’s current state as the starting point for recovery. A page refresh should retrieve the existing payment, not create another independent collection for the same purchase.

Work through a missing response#

Suppose an invoice is for 120 and the collection call times out. The invoice remains unpaid locally, but that does not establish an issuer refusal. The service records the attempt as outcome unknown and recovers the original resource using supported lookup or same-request replay.

If the original succeeded, attach that result to the invoice and stop replacement collection. If it is conclusively refused, apply its code-specific next step and permit a new attempt only under the applicable rules. If it remains unresolved, show the customer a payment-being-checked state rather than a button that blindly starts another charge. These are illustrative design choices, not a promise that every provider exposes identical recovery APIs.

Put retry policy beside the payment product#

Define which codes permit an automated new attempt, its timing and applicable maximums from the provider/network rules for that flow. Separate one-time checkout from recurring off-session billing. The customer’s consent and a valid mandate do not override a do-not-retry instruction or permit repeated attempts without the required authentication.

Use backoff for transient transport failures under the same-request contract. Use a billing recovery schedule for genuinely failed recurring collections where permitted. Do not copy a transport retry count into an issuer reauthorization schedule, or invent a global rule that insufficient funds always allows exactly one retry.

An alternative provider should not bypass a blocked card, risk decision or network restriction. Before a new route, establish the original outcome and the rules that permit a new attempt. A shared platform operation ID helps control business duplication; provider keys do not protect across providers.

Make events update the same payment history#

Authenticate incoming events, commit durable intake, then acknowledge before complex downstream work. Process the local financial effect and its marker atomically. Separate event IDs may refer to the same successful collection, so also guard the invoice’s remaining amount and business effect.

Check out-of-order events against the current resource and permitted transitions. A late failure message for an earlier attempt must not overwrite a later success. Preserve the attempt history so the customer’s next action is based on the current payment state.

Give the customer a useful next action#

CaseUseful messageAvoid
AuthenticationComplete the bank’s authentication stepRepeated background retries with no customer prompt
Correctable detailsCheck and re-enter the requested details securelyAsking support to collect full card data in chat
Issuer questionContact your issuer or choose another methodClaiming you know the issuer’s undisclosed reason
Stopped or risk-blocked paymentPayment could not be completed; use a permitted alternativeRevealing sensitive fraud/lost-card indicators
Unknown outcomeWe are checking this payment; preserve the existing referenceDeclaring failure and inviting an immediate duplicate

Measure recovery without rewarding retry volume#

Track eventual paid invoices, customer actions completed, unnecessary reattempts, unresolved-outcome age and duplicate-collection incidents. Keep provider code, attempt count and product scope in the analysis. More successful HTTP responses or more attempts do not by themselves establish better collection recovery.

The practical goal is a controlled next step for each result. Use the issuer/provider’s instructions for a confirmed refusal and the original operation’s evidence for uncertainty. That distinction keeps checkout useful while preventing a retry loop from turning into duplicate money movement.

Frequently Asked Questions

Does every issuer decline count as hard?

No. Some refusals require authentication, corrected data or a provider-permitted later attempt. Use the actual code and advice rather than classifying every issuer refusal as nonretryable.

Should insufficient funds always receive one retry?

No universal rule applies. Follow the selected payment product’s guidance, network restrictions and customer context. Stripe’s card-code guidance recommends another payment method.

Is a timeout a soft decline?

No. It is an unknown outcome unless provider evidence establishes a refusal. Recover the original payment before permitting another financial attempt.

Can a new key fix an indeterminate error?

A fresh key can create a new financial operation. Do not use it to bypass uncertainty; resolve the original result and use the provider’s supported recovery contract.

What is the difference between replay and retrying a declined card?

Replay recovers the same supported request. Reauthorization is a new financial attempt after a confirmed result, with its own product, network and consent requirements.

When should payment events be acknowledged?

After authentication and durable intake, before complex processing. Commit local effects and processing markers atomically, and check the current payment state before applying delayed events.

Gruv Editorial Team

Researched and edited by the Gruv editorial team. Gruv builds cross-border billing, payouts, and finance-operations software for global businesses.

Sources

  1. docs.stripe.com/declines/codestrusted
  2. docs.stripe.com/declines/cardtrusted

Educational content only. Not legal, tax, or financial advice.

Related Posts

The Freelance Payment Penalty: A Modeled Audit of Platform Fees, FX Spreads, and Payout Delays
Research Reports19 min read

The Freelance Payment Penalty: A Modeled Audit of Platform Fees, FX Spreads, and Payout Delays

The money rarely disappears through a single, easy-to-spot fee. The real loss is stacked. A marketplace takes its commission, a processor adds a charge for international cards, a bank or payment company converts the currency at a spread, a platform holds the funds before release, and a wire sheds a little to intermediaries on the way in. Each layer looks defensible on its own, but the worker feels the combined result as a smaller deposit and a later payday.

freelance payment feescross-border paymentsplatform fees
Read
How to Respond to a Subpoena for Business Records
Legal Action26 min read

How to Respond to a Subpoena for Business Records

Move fast, but do not produce records on instinct. If you need to **respond to a subpoena for business records**, your immediate job is to control deadlines, preserve records, and make any later production defensible.

subpoena responselegal documente-discovery
Read
A US Expat's Guide to Investing in UCITS ETFs to Avoid PFIC Issues
Professional Deep Dives15 min read

A US Expat's Guide to Investing in UCITS ETFs to Avoid PFIC Issues

The real problem is a two-system conflict. U.S. tax treatment can punish the wrong fund choice, while local product-access constraints can block the funds you want to buy in the first place. For **us expat ucits etfs**, the practical question is not "Which product is best?" It is "What can I access, report, and keep doing every year without guessing?" Use this four-part filter before any trade:

ucits etfspficus expat investing
Read