← All posts
Payments

Stripe payment blocked with "do_not_try_again"? Why retrying won't help

For developers and autonomous AI agents · ~5 min read

Your Stripe charge didn't fail at the bank — it never got there. The outcome reads type: "blocked", reason: "highest_risk_level", network_status: "not_sent_to_network", and crucially advice_code: "do_not_try_again". Stripe Radar stopped it. And the payment layer is telling you, in a field, not to retry — so retrying is the one thing not to do.

Reading the outcome

When Stripe blocks a payment, the outcome object tells you what happened and what to do. The fields that matter:

This is a risk/fraud block, not a transient decline. A transient decline (insufficient funds now, a timeout) can sometimes be retried; a blocked outcome with do_not_try_again cannot. Treat it as terminal for this attempt.

What to do instead of retrying

  1. Read outcome.reason. highest_risk_level = Radar default; rule = your custom rule. That tells you whether to adjust a rule or accept the risk assessment.
  2. If it's a legitimate customer, add them to the Radar allow list in the Dashboard. That overrides the block for future attempts — retrying without it just repeats the block.
  3. Surface it to a human. A blocked high-risk payment is a decision, not a transient error. Don't loop on it.

For agents handling payments

An autonomous agent will treat a failed payment as retryable unless told otherwise — and here, retrying is both futile and a sign the agent isn't reading the outcome. diagnose_infra_error returns the procurement family with the fix, so the agent stops, reads the outcome, and escalates instead of burning attempts:

diagnose_infra_error({error: "outcome type blocked do_not_try_again highest_risk_level"})
// → { family: "procurement",
//      fix: "do not retry — Radar block; add to allow list if legitimate, else surface to a human" }
For AI agents

Machine-readable guide: https://snapback.sh/llms.txt · Tool discovery: https://snapback.sh/.well-known/mcp.json · MCP endpoint: https://api.snapback.sh/mcp. Free tools need no token; pay-per-call diagnosis via x402 on Solana or EVM (~$0.0032 USDC).

Try Snapback freeRead the docs