Recovery cases

A recovery case is RecoverIQ's unit of work: one failed payment, tracked from the moment it fails until we either recover it or give up. Here's how each case moves.

Case lifecycle

Every case goes through one of five terminal states.

active

The default starting state. At least one retry is scheduled or in flight, and email sequences are queued. This is the only state where we're actively working on the payment.

recovered

Stripe confirmed the invoice was paid. We record the recovered amount and the timestamp, and the case rolls into your monthly recovery counters.

lost

All configured retries failed and the recovery window expired. The reason is logged (e.g. 'card declined 4x', 'customer unreachable').

cancelled

You manually closed the case from the dashboard — typically because you know the customer is gone or you want to handle it outside of RecoverIQ.

expired

The 14-day recovery window passed without either a recovery or an explicit loss reason. Treated the same as 'lost' in metrics.

Decline categories

Every Stripe decline code maps into one of four categories. The category decides whether we retry automatically or wait for the customer, and which email template we use.

A

Soft declines

Auto-retry on a decline-specific schedule

Stripe codes: insufficient_funds, generic_decline, processing_error, try_again_later, do_not_honor, issuer_not_available, reenter_transaction, approval_not_code

These are transient. The card works, the issuer just said 'not right now.' Retries on a delay usually succeed.

B

Card problems

Email customer, no retry

Stripe codes: expired_card, incorrect_cvc, incorrect_number, invalid_expiry_year, invalid_expiry_month, card_not_supported, invalid_account

Retrying the same card won't help — the data is wrong or the card is dead. Customer needs to update their payment method.

C

Hard declines

Email customer, no retry

Stripe codes: stolen_card, lost_card, card_velocity_exceeded, pickup_card, restricted_card, security_violation, service_not_allowed, transaction_not_allowed

The issuer has explicitly said don't try this card again. Retrying can trigger fraud flags.

D

Fraud flags

No retry, no customer email by default

Stripe codes: fraudulent, merchant_blacklist

These need human review. RecoverIQ logs the case and waits for you to take action.

What RecoverIQ retries vs. closes

The short version:

  • Category A — we retry on a schedule. See retry strategies.
  • Category B/C — we email the customer and wait. If they update their card within the recovery window, Stripe auto-retries and the case closes as recovered.
  • Category D — we sit tight. Fraud cases require human judgment.

The recovery window is 14 days by default. Any case still active at that point rolls to expired — we don't hold cases open forever.

Reading a case

Click any row on your dashboard to open the detail drawer. You'll see:

  • Customer name, email, card last-four.
  • The failed invoice (amount, Stripe ID, the original decline code and category).
  • Retry attempts so far — each with timestamp, outcome, and Stripe's response.
  • Email timeline — scheduled, sent, opened (via Resend events), clicked.
  • Current state and, if closed, why.

Still have questions?

Get in touch with support — we reply within 4 hours.

Contact us →