Decline Code Analysis: How to Read Decline Codes and Timings as an X-ray

Good Carder

Professional
Messages
904
Reaction score
520
Points
93
From a carder to carders. You've selected a BIN, set up a proxy, warmed up your profile, and hit the card. The system rejects it. You look at the error code and can't figure out: is the card dead or is there a problem with the environment? Is the BIN blacklisted or are there simply insufficient funds? The answer lies in the details — in the decline code and the response time.

In this article, I'll teach you how to read decline codes like an X-ray. You'll learn the meaning of each popular decline code, how to distinguish between an issuer's decline and an antifraud block, how to interpret timings, and how to adjust your strategy based on this information. This isn't theory — it's practice that will save you thousands of dollars in wasted cards.


Part 1. Why a refusal code is a diagnosis, not a death sentence​

When a payment is declined, you see the message "Your card was declined" or "Transaction not approved." But behind the scenes, the payment gateway returns a much more precise code — a decline code. Stripe, Adyen, and Braintree each use their own code sets, but they are standardized across payment systems (Visa, Mastercard, Amex).

The response time (TTFB — Time To First Byte) is your second key tool. It tells you at what stage the decline occurred:
  • <1 second - failure at the format validation level or BIN blacklist (the card didn't even reach the bank).
  • 1–3 seconds — the request has reached the issuing bank, refusal due to a card-related reason (stop list, balance).
  • 3–7 seconds — merchant or gateway anti-fraud is activated (the problem is in the environment, not the card).
  • >7 seconds - network problem, proxy or timeout.

By combining code and timing, you can make an accurate diagnosis and decide what to change: the card, the proxy, the behavior, or all of them.

Part 2. Decoding Stripe's Decline Codes (2026)​

Stripe is the most popular gateway, and its codes are worth knowing by heart.

2.1. Card-Related Failures (Timing 1–3 sec)​

Decline codeMeaningAction
insufficient_fundsInsufficient fundsThe card is active, but the balance is less than the amount. Reduce the receipt or check with a micro-receipt.
do_not_honorThe card is on the bank's stop list (stolen, blocked, expired)The card is dead. Don't waste your time.
lost_card / stolen_cardThe card was reported as lost or stolen.Similar to do_not_honor.
expired_cardExpiredThe card is dead.
invalid_numberInvalid number (Luhn does not work)The seller is a scam. Demand a replacement.
invalid_cvcIncorrect CVV/CVCEither the CVV doesn't match, or the card doesn't have a CVV. Check the details.
transaction_not_allowedThe card is not allowed for this type of transaction (e.g. ATM withdrawals only)Useless for online carding.
withdrawal_limit_exceededDaily limit exceededSet the card aside for 24 hours.
pick_up_cardThe bank requires the card to be confiscated the next time it is used.The card is compromised. Do not use.

2.2. Antifraud-related failures (timing <1 sec or 3–7 sec)​

Decline codeMeaningAction
fraudulentStripe Radar blocked the transaction.The problem is in the environment: proxy, fingerprint, behavior. Change everything.
blockedThe card or BIN is blacklisted by the store.The BIN has expired. Buy cards in a different range.
generic_declineGeneralized refusal (often from antifraud)Check the timing. If it's >2 seconds, the problem is with the card. If it's <1 second, the problem is with the environment.
authentication_required3DS requiredThe card is not suitable for non-3DS purposes. It's useless.

2.3. Technical errors (rare, but they happen)​

Decline codeMeaningAction
processing_errorError on the gateway sideTry again in a minute. If it happens again, the problem isn't you.
api_errorAPI errorLikewise.

Part 3. Timing as an Indicator: Learning to Read Response Time​

Stripe and other gateways return a request-duration header, or you can measure the time from sending the request to receiving the response.

Practical examples:
SituationTimingDecline codeDiagnosis
We hit the card and received a response in 0.8 seconds.<1 secgeneric_declineBlocked by BIN or fingerprint. Change your proxy and profile.
After 2.5 sec came do_not_honor1–3 secdo_not_honorThe card is on the stop list. Throw it away.
Insufficient_funds arrived in 4 seconds.3–7 secinsufficient_fundsThe card is active but empty. Reduce the amount to $1 and check.
After 5 sec came fraudulent3–7 secfraudulentAntifraud merchant. Change proxy and fingerprint.
In 0.5 seconds invalid_number<1 secinvalid_numberCrap from the seller.

Measurement tool: in the browser console (F12) → Network → find the request to the payment API → Time column.

Part 4. Adyen and Braintree Codes: Key Differences​

4.1. Adyen​

Adyen returns resultCode and refusalReason.
resultCoderefusalReasonMeaning
RefusedNOT_ENOUGH_BALANCEInsufficient funds
RefusedDO_NOT_HONORThe card is on the stop list
RefusedFRAUDAdyen Antifraud
Refused3D_SECURE_REQUIRED3DS required
ErrorTIMEOUTNetwork or proxy problem

4.2. Braintree​

Braintree returns processor_response_code and processor_response_text.
CodeTextMeaning
2004Insufficient FundsInsufficient funds
2005Do Not HonorThe card is on the stop list
2016FraudAntifraud Braintree (Kount)
2003Expired CardThe deadline has expired
2000Generic DeclineGeneralized refusal (often by BIN)

Part 5. Practical algorithm for failure diagnostics​

Step 1. Record the response time.
If <1 second, there's a problem with the environment or BIN (the card didn't even reach the bank). If >1 second, the card did reach the bank, but the problem is with the card or balance.

Step 2. Check the decline code.
  • insufficient_funds → The card is active, but the balance is low. Reduce the amount or check with a micro-check.
  • do_not_honor / lost_card / stolen_card → the card is dead. Throw it away.
  • Fraudulent / blocked → problem with the environment. Change the proxy, profile, and anti-detection.
  • authentication_required → The card requires a 3DS. Useless for non-3DS purposes.
  • generic_decline + timing <1 sec → blocking by BIN. Change the BIN.
  • generic_decline + timing 2–5 seconds → the card may be valid, but something is wrong with the data (CVV, address). Double-check.

Step 3. Test the card elsewhere.
Do a micro-check ($1) through Wikipedia or Red Cross. If it passes, the card is still valid, and the issue is with the merchant or the environment. If not, the card is dead.

Step 4. Log the results.
Write down the BIN, proxy, decline code, and timing. After 20-30 attempts, you'll see patterns.

Part 6. Errors in code interpretation​

Mistake 1. Relying solely on the code, ignoring timing.
Generic_decline at 0.5 seconds and at 3 seconds are different stories. Always look at the timing.

Mistake 2. Immediately blaming the card seller.
Even if the card failed with do_not_honor, it could be because you used a bad proxy or didn't warm up the profile. Check the environment.

Mistake 3. Not logging the results.
If you don't record which BINs fail with which codes and on which gateways, you won't be able to improve your strategy.

Mistake 4. Ignoring fraudulent.
If you receive a fraudulent, don't try again with the same profile and proxy — it's pointless. Change everything.

Summary​

Decline codes and timing are your primary diagnostic tools. They transform the chaos of refusals into a manageable process. Memorize the basic codes, learn to measure response time, and always check your logs. This will allow you to distinguish dead cards from environment issues and save tens of thousands of dollars.

A quick one-line cheat sheet:
“<1 sec — BIN or environment; 1–3 sec — card dead; 3–7 sec — antifraud. insufficient_funds — alive but empty; do_not_honor — discard; fraudulent — change proxy and profile. Log every refusal, analyze patterns. Timing + code = an X-ray of your problem.”
 
Top