Hard Decline vs Soft Decline in Stripe: Key Differences

hard decline vs soft decline stripe

Hard Decline vs Soft Decline in Stripe: Key Differences

4 min readApril 5, 2026

Definition

A hard decline is a permanent payment failure where the issuing bank has definitively rejected the transaction and retry attempts will not succeed, while a soft decline is a temporary failure where the transaction may succeed if retried with corrected information, different timing, or after the customer resolves the issue with their bank.

Hard Declines: Permanent Failures

Hard declines represent irreversible payment rejections. According to Stripe's documentation, these failures occur when the issuing bank has determined the payment cannot be processed under any circumstances for that specific card or attempt.

Common hard decline codes in Stripe include:

  • card_declined (generic decline with no specific reason provided)
  • insufficient_funds when accompanied by certain issuer responses
  • fraudulent (card reported as fraudulent or stolen)
  • lost_card or stolen_card
  • pickup_card (card must be physically retained)
  • restricted_card (card cannot be used for this transaction type)
  • invalid_account (card account is closed or invalid)

Hard declines should never be automatically retried. Attempting to charge the same card again wastes processing resources and can trigger fraud detection systems or increased interchange fees. The appropriate response is to request a different payment method from the customer.

Soft Declines: Temporary Failures

Soft declines indicate temporary issues that may resolve with time, updated information, or customer intervention. These represent approximately 20-40% of all declines according to industry payment data.

Common soft decline codes include:

  • insufficient_funds (temporary balance issues)
  • card_velocity_exceeded (too many transactions in short period)
  • do_not_honor (generic temporary decline)
  • try_again_later (issuer system temporarily unavailable)
  • approve_with_id (requires additional authentication)
  • call_issuer (customer needs to contact their bank)
  • incorrect_cvc or incorrect_zip (fixable data errors)
  • expired_card (needs updated expiration date)

Soft declines warrant different handling strategies. Retrying after 24-72 hours can achieve success rates of 15-30% for subscription payments. Requesting updated card details or prompting customers to contact their bank can resolve many soft decline scenarios.

Distinguishing Between Types in Stripe

Stripe's API returns a decline_code parameter in the error response that indicates the specific reason for failure. The decline_code combined with the general code field (like card_declined) provides the granular information needed to classify the decline type.

Developers should implement logic that checks these codes and routes them appropriately:

if decline_code in ['fraudulent', 'lost_card', 'stolen_card', 'pickup_card']:
    # Hard decline - request new payment method
elif decline_code in ['insufficient_funds', 'try_again_later']:
    # Soft decline - retry logic or customer outreach

Stripe's documentation categorizes decline codes but does not always explicitly label them as "hard" or "soft." Merchants must interpret based on the decline reason's nature.

Impact on Retry Logic

Retry strategies must respect decline types to optimize authorization rates without damaging customer relationships or incurring unnecessary fees. Industry best practices suggest:

  • Hard declines: No automatic retries. Immediate customer notification requesting alternative payment method.
  • Soft declines: Strategic retries using exponential backoff (24 hours, 72 hours, 7 days) combined with customer communication.
  • Authentication-required declines: Immediate customer action request for 3D Secure or issuer contact.

Stripe's Smart Retries feature, available for subscription billing, automatically handles optimal retry timing for soft declines while respecting hard decline boundaries. This machine learning system analyzes historical success patterns to determine when retries are most likely to succeed.

Financial and Operational Considerations

Mishandling decline types creates measurable business impact. Retrying hard declines generates additional processing fees (typically $0.10-0.30 per attempt) with zero success probability. Failing to retry soft declines abandons 15-30% of recoverable revenue.

Stripe charges a standard fee for declined payments only in certain pricing models, but repeated failed attempts can impact your account's risk assessment. More critically, excessive retry attempts on hard declines may cause issuing banks to flag future legitimate transactions from your business as suspicious.

The distinction between hard and soft declines ultimately determines whether a failed payment represents a permanent customer loss or a solvable technical issue requiring appropriate intervention timing and communication.

Free diagnostic

See exactly what's happening in your Stripe account

Connect your Stripe account and get a breakdown of every failed payment — which ones can be retried, which ones need customer outreach, and how much is recoverable. Takes 5 minutes. No credit card required until we recover $49.

Run free diagnostic