Slow seller: /t/slow
| Endpoint | GET https://x402testendpoint.com/t/slow |
| Kind | pay: a correct buyer completes the payment |
| Quoted price | $0.001 in test USDC on Base Sepolia (testnet) |
| Cost to you | Nothing. Test USDC has no value. |
What the seller does
Every response is delayed by 5 seconds, before the quote and again before delivery.
What a correct buyer does
Wait without timing out or paying twice, then receive 200.
Why test this
Real sellers are slow under load, and settlement adds time. A client that times out after signing may pay without receiving, and one that retries blindly may pay twice.
Run it
See the quote without paying:
curl -i https://x402testendpoint.com/t/slow
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/slow");
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
A correct client ends with HTTP 200, a PAYMENT-RESPONSE header carrying the settlement, and x-test-verdict: pass. The JSON body repeats the transaction hash and payer.
If the payment is rejected, the endpoint answers 402 again with the facilitator's reason in the quote's error field. Look the reason up in the error reference.
How the official client behaves
@x402/core 2.31 with default settings: The core client only builds payments and makes no HTTP requests, so timeouts are whatever your calling code or fetch wrapper sets.
Related errors
invalid_exact_evm_nonce_already_used: This exact payment authorization has already been spent or cancelled.invalid_exact_evm_payload_authorization_valid_before: The payment authorization has expired, or expires within the next few seconds.
Other scenarios
- Standard payment (pay)
- Pick the supported option (pay)
- Absurd price (trap)
- Price changes after you pay (trap)
- Unsupported network only (trap)
- Unreadable quote (trap)
- Quote without a recipient (trap)
- Seller never delivers (trap)