Recovery States
The full lifecycle of a payment recovery attempt, from initial failure to resolution.
Every failed payment in LostChurn progresses through a series of states that represent where it is in the recovery process. Understanding these states helps you track recoveries in the dashboard and configure your recovery workflow.
State Diagram
State Reference
New
The initial state assigned when a failed payment webhook is received. The system has recorded the failure but has not yet analyzed the decline code.
| Property | Value |
|---|---|
| Duration | Milliseconds (transitions immediately) |
| Next states | Classifying |
| Dashboard indicator | Gray dot |
Classifying
The decline code is being mapped to a category and the recovery strategy is being determined. The ML model scores the retry probability and the orchestration engine decides the next step.
| Property | Value |
|---|---|
| Duration | Milliseconds (transitions immediately) |
| Next states | Silent Retry Pending, Communication Pending, Terminal |
| Dashboard indicator | Blue dot |
During classification, the system:
- Looks up the raw decline code in the
decline_code_maptable - Determines the category (Soft Retry, Hard Customer, Terminal, Unknown)
- Runs the ML scoring model to get a retry probability
- Calls the orchestration decision tree to determine the next state
Silent Retry Pending
A silent retry has been scheduled but has not yet executed. The payment is waiting for the optimal retry time determined by the retry strategy.
| Property | Value |
|---|---|
| Duration | Hours to days (based on cooldown and ML timing) |
| Next states | Silent Retry In Progress |
| Dashboard indicator | Yellow dot, with countdown timer |
You can see all pending retries in the dashboard under Recovery > Pending Retries. Each entry shows the scheduled time and the ML confidence score.
Silent Retry In Progress
The retry is actively being submitted to the payment processor. This state is brief -- it lasts only as long as the API call takes to complete.
| Property | Value |
|---|---|
| Duration | Seconds (API call latency) |
| Next states | Recovered, Silent Retry Pending (if retries remain), Communication Pending (if exhausted) |
| Dashboard indicator | Yellow dot, pulsing |
After the retry completes:
- Success: State moves to Recovered and attribution is recorded
- Failure with retries remaining: State moves back to Silent Retry Pending with the next retry scheduled
- Failure with no retries remaining: State moves to Communication Pending to begin dunning
- Failure with ML score below 0.10: State moves to Communication Pending (early escalation)
Communication Pending
The system has determined that customer communication is needed. The customer is about to be enrolled in a dunning campaign.
| Property | Value |
|---|---|
| Duration | Seconds to minutes (campaign enrollment) |
| Next states | Communication Active |
| Dashboard indicator | Orange dot |
This state is reached when:
- Silent retries have been exhausted
- The decline category is Hard Customer or Unknown
- The ML model recommends early escalation
Communication Active
Dunning messages are being sent to the customer through the configured campaign channels (email, SMS, push, WhatsApp). The campaign step sequence is in progress.
| Property | Value |
|---|---|
| Duration | Hours to days (depends on campaign step delays) |
| Next states | Awaiting Customer |
| Dashboard indicator | Orange dot, with campaign step indicator |
During this state:
- Campaign steps execute on their configured schedule
- Each message delivery is tracked (sent, delivered, opened, clicked)
- If the customer updates their payment method and a retry succeeds, state moves directly to Recovered
Awaiting Customer
All scheduled dunning messages have been sent. The system is waiting for the customer to update their payment method or take the requested action.
| Property | Value |
|---|---|
| Duration | Days (until customer acts or timeout) |
| Next states | Recovered, Terminal |
| Dashboard indicator | Red dot |
Payments that remain in the Awaiting Customer state past your configured timeout period will automatically transition to Terminal. Configure this timeout in your merchant settings to match your subscription grace period.
Recovered (Final)
The payment has been successfully collected. This is a terminal state -- no further action is taken.
| Property | Value |
|---|---|
| Duration | Final state |
| Trigger | Successful retry or customer payment update |
| Dashboard indicator | Green checkmark |
When a payment is recovered, LostChurn records:
- The recovery type (Silent Retry, Dunning Email, Dunning SMS, Self-Service, Backup Method)
- The attribution confidence score (how confident we are this recovery is attributable to LostChurn)
- The amount recovered in cents
- The time to recovery from initial failure
Terminal (Final)
The payment cannot be recovered. This is a terminal state -- all recovery activity stops.
| Property | Value |
|---|---|
| Duration | Final state |
| Trigger | Terminal decline, timeout, or manual marking |
| Dashboard indicator | Red X |
A payment reaches Terminal when:
- The decline category is Terminal (fraud, stolen card, closed account)
- The customer does not respond within the configured timeout
- A team member manually marks the recovery as terminal
- All recovery strategies have been exhausted
The terminal reason is recorded for reporting (e.g., "Terminal decline: fraudulent" or "Silent retries exhausted, dunning timeout").
State History
Every state transition is recorded in the recovery state's history array. Each entry includes:
- The previous state and new state
- A timestamp of when the transition occurred
- A reason explaining why the transition happened
This history is visible in the dashboard when you click into a specific recovery, providing a full audit trail of every decision the system made.
Tracking State in the Dashboard
The LostChurn dashboard provides several views for monitoring recovery states:
| View | What It Shows |
|---|---|
| Recovery Overview | Aggregate counts by state, with trend charts |
| Active Recoveries | All payments currently in non-terminal states |
| Pending Retries | Payments in Silent Retry Pending, with scheduled times |
| Awaiting Customer | Payments waiting for customer action, sorted by age |
| Recently Recovered | Payments recovered in the last 24/48/72 hours |
| Terminal | Payments that could not be recovered, with reasons |
You can filter any view by date range, decline category, recovery type, or amount.
Timeouts and Automatic Transitions
LostChurn enforces timeouts to prevent payments from sitting indefinitely in non-terminal states:
| State | Default Timeout | Transition |
|---|---|---|
| Silent Retry Pending | 30 days | Terminal (retries expired) |
| Communication Active | 14 days | Awaiting Customer |
| Awaiting Customer | 21 days | Terminal (customer unresponsive) |
These timeouts are configurable in your merchant settings. Set them to match your subscription platform's grace period and dunning window.
Next Steps
- How Recovery Works -- overview of the full recovery pipeline
- Decline Categories -- understand how classification drives state transitions
- Retry Strategies -- learn about retry timing and escalation
- Key Concepts -- foundational concepts for using LostChurn