What are soft decline and hard decline?
When a bank declines a transaction, the refusal falls into one of two fundamentally different categories:
Soft decline โ a temporary, fixable decline. The cause is technical or situational: the issue can be resolved, and retrying the payment makes sense.
Hard decline โ a permanent, final refusal. The bank is explicitly prohibiting the transaction. Retrying with the same card credentials won't help and may actually make things worse (increasing the risk of a full block).
Examples of soft declines
- insufficient_funds โ not enough balance (top up and retry)
- card_velocity_exceeded โ velocity limit hit (wait for the limit to reset)
- authentication_required โ 3DS authentication needed (retry and complete the 3DS challenge)
- try_again_later โ temporary bank-side failure
- withdrawal_count_limit_exceeded โ withdrawal count limit reached
The key characteristic: the transaction can succeed later or under different conditions.
Examples of hard declines
- do_not_honor โ the bank explicitly refuses the transaction
- card_declined โ the card is blocked or revoked
- pickup_card โ the card must be confiscated (serious block)
- fraudulent โ the transaction is flagged as fraud
- lost_card / stolen_card โ the card has been reported lost or stolen
- generic_decline (in some cases) โ depends on the underlying bank-side reason
The key characteristic: retrying with the same card credentials will not help.
What to do for each type
For a soft decline:
- Address the cause: add funds, wait for a velocity limit to reset, complete the 3DS challenge.
- Retry โ but not immediately. Wait a few minutes to avoid triggering a new velocity limit.
- If the problem recurs, call your bank.
For a hard decline:
- Do not retry with the same card โ it won't work and may worsen the situation.
- Call your bank immediately. Only a bank representative knows the exact reason.
- Use a different payment instrument for any urgent payment.
FAQ
How does a merchant or Stripe know whether a decline is soft or hard?
Stripe categorizes decline codes into retriable and non-retriable groups. The Stripe documentation specifies which decline_code values are considered retriable.
Is do_not_honor always a hard decline?
Not necessarily. Sometimes do_not_honor is triggered by a temporary fraud-prevention flag, making it effectively a soft decline. Call your bank to find out the exact reason.
How can I avoid hard declines on international payments? Use a payment instrument optimized for cross-border transactions. Marix virtual cards are far less prone to the blocks that commonly affect cards from banks with strict international payment restrictions.
Understanding the difference between soft and hard declines helps you resolve problems faster. For reliable payments without unexpected blocks, try Marix virtual cards.

