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.
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.
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.
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.
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 →