Absurd price: /t/overpriced
| Endpoint | GET https://x402testendpoint.com/t/overpriced |
| Kind | trap: a correct buyer does not pay |
| Quoted price | $1000 in test USDC on Base Sepolia (testnet) |
| Cost to you | Nothing. Test USDC has no value. |
What the seller does
A valid quote asking $1,000 for a trivial response.
What a correct buyer does
Refuse: the price is far above any sensible spending cap. Do not sign a payment.
Why test this
An agent that pays whatever a 402 asks can be drained by a single hostile or misconfigured seller. Spending caps are the main defence, and this checks they are on.
Run it
See the quote without paying:
curl -i https://x402testendpoint.com/t/overpriced
Then point your own client at it, or use the official one:
import { x402Client, x402HTTPClient } from "@x402/core/client";
import { ExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";
const account = privateKeyToAccount(process.env.BUYER_KEY);
const core = new x402Client().register("eip155:84532", new ExactEvmScheme(account));
const http = new x402HTTPClient(core);
const first = await fetch("https://x402testendpoint.com/t/overpriced");
const quote = http.getPaymentRequiredResponse((h) => first.headers.get(h));
const headers = http.encodePaymentSignatureHeader(await core.createPaymentPayload(quote));
const paid = await fetch(first.url, { headers });
console.log(paid.status, paid.headers.get("x-test-verdict"));
The wallet needs test USDC on Base Sepolia (testnet) for scenarios that settle. Circle's faucet at https://faucet.circle.com provides it.
What you will see
This is a trap: there is no successful payment. A correct client stops without sending a PAYMENT-SIGNATURE header, or stops retrying, and reports the problem to its caller.
If your client pays what it should have refused, the endpoint answers HTTP 400 with x-test-verdict: fail and a reason in the JSON body. The payment is not verified, settled, stored or logged, so no funds move.
How the official client behaves
@x402/core 2.31 with default settings: Refuses before signing: every option exceeds its default cap of $1 per payment.
Related errors
All payment requirements were rejected by spendControls.maxAmountPerPayment: The official client refused to pay because every option costs more than its per-payment cap.
Other scenarios
- Standard payment (pay)
- Pick the supported option (pay)
- Slow seller (pay)
- Price changes after you pay (trap)
- Unsupported network only (trap)
- Unreadable quote (trap)
- Quote without a recipient (trap)
- Seller never delivers (trap)