When the primary processor declines a charge on a recoverable reason, Worthy automatically retries through the next-best processor. Up to four attempts run in sequence, all server-side, all in a few hundred milliseconds. The buyer sees one transaction. You see a charge that would have been lost.
Recovery performance
When a processor returns a decline, Worthy reads the code, decides whether to retry, and routes the next attempt. Hard declines stop. Soft declines waterfall. All of it happens server-side before the buyer sees a response.
STEP 01
Classify the decline
Each decline carries a code. Decline code optimization sorts the response into retry-worthy or skip-ahead based on what the issuer said.
STEP 02
Switch processors
If the code is recoverable, the next processor in your fallback order takes the charge. Each retry routes through a different processor.
STEP 03
Retry server-side
The buyer waits on one response. Worthy completes the cascade in milliseconds and returns the final outcome. No webhooks, no double-charges.
Not every decline is worth retrying. A blocked card will stay blocked. A soft decline from a busy issuer can clear two seconds later on a different processor. Worthy already knows the difference.
The dashboard surfaces cascade activity in real time. Track how many soft declines fired, where the recovery happened, and which processor took the save. Drill in to see the full attempt trace for any single charge.




Configure how aggressively the cascade fires. Choose the maximum attempt count for each charge type and the order processors fall back to. Worthy ships sensible defaults so you can leave it alone, or tune it for your traffic.
MAXIMUM ATTEMPTS
Up to 4 processors per charge
Choose how many processors a charge can try before the decline goes back to the buyer. Set a different limit for each charge type.
FALLBACK ORDER
Per-BIN routing priority
Set the order in which the processors are tried.
The order can be different for each card BIN.
Processor 1
PRIMARY · 95.4% APPROVAL
Processor 2
BACKUP · 92.1% APPROVAL
Processor 3
BACKUP · 88.6% APPROVAL
Every charge response includes the full cascade trace. See which processors were tried, what each returned, and how long the cascade took end to end.
The cascade object on every charge tells the full story of the retry sequence.
attempts is an ordered array of every processor that handled the charge.
decline_code per attempt shows exactly why the processor said no.
final_status tells you whether the cascade ended in success or exhausted all paths.
total_ms is the wall-clock latency of the entire sequence.

const response = {
"id": "ch_6FA2B",
"status": "succeeded",
"amount": 9900,
"cascade": {
"final_status": "recovered",
"total_ms": 312,
"attempts": [
{
"processor": "processor_1",
"status": "declined",
"decline_code": "05",
"ms": 98
},
{
"processor": "processor_2",
"status": "declined",
"decline_code": "61",
"ms": 72
},
{
"processor": "processor_3",
"status": "succeeded",
"ms": 142
}
]
}
};Smart Routing chooses the first processor. Cascade catches the soft declines. The rest of the engine handles authentication, tokenization, and the recovery of charges that fall through completely.
Apply for a Worthy account and turn on Cascade Fallbacks in minutes. No contracts, no setup fees, no engineering team required. Talk to sales for a custom package or volume pricing.