BLUF: a raw x402 client moves money and stops there. No ceiling, no memory, no retry protection. tryx402 is the payment layer those clients never had: pre-authorized budget caps, idempotent calls that never pay twice, a per-call cost ledger, and multi-currency fiat billing for your own users. Standard protocol underneath — production discipline built in.
| Criterion | Raw x402 client | tryx402 |
|---|---|---|
| Payment execution | x402 / EIP-3009 on Base | Native x402 execution with policy enforcement at the same point |
| Hard budget cap before paying | None | Pre-auth against remaining session budget |
| Retry protection | Retried calls pay twice | Idempotency keys; auto-retries off by default |
| Spend reporting | Wallet history only | Ledger by call, origin, account, project |
| End-user fiat billing (EUR/GBP/JPY) | USDC only | Stripe Checkout + margin engine |
| Zero-decimal currencies (JPY…) | N/A | Integer minor-unit math |
| Interfaces | CLI, low-level libraries | Python lib, CLI, MCP server |
| Governance | Your problem | Built into every call |
The 402 response announces maxAmountRequired before you sign. tryx402 reads it, checks it against the session budget, and only then authorizes. Checking after the fact means you already paid.
Stablecoin transfers are final and instant. A timeout after settlement is not a pending charge — it is spent money with a lost receipt. Retrying is what every sane engineer does; without idempotency keys, it is also how you pay twice. The $0.83 double-charge that motivated this feature is documented in the project README.
One-off scripts, personal experiments, single-call utilities with a human watching. No loop, no team, no customer — then a full payment layer is overhead. The moment an agent runs unattended or a client gets billed, budgets and the ledger stop being optional.