Run reports
Each test endpoint judges one request. A run report joins them up: tag every request in a test session with the same run id, and the site gives one result per scenario, including things a single response cannot show, such as how many times your client retried a seller that never delivers.
Use it
Get a run id, or make up any string of 16 to 64 letters, digits, hyphens or underscores:
curl -X POST https://x402testendpoint.com/api/runs
Add it to every scenario request, on the first request and on the paid retry alike:
curl -i 'https://x402testendpoint.com/t/ok?run=YOUR_RUN_ID'
curl -i 'https://x402testendpoint.com/t/overpriced?run=YOUR_RUN_ID'
Then read the report at https://x402testendpoint.com/runs/YOUR_RUN_ID, or as JSON at https://x402testendpoint.com/api/runs/YOUR_RUN_ID. Each tagged response also carries the report address in an x-test-run header.
How each scenario is judged
| Scenario kind | Pass | Fail |
|---|---|---|
| Pay scenarios | A paid request ended with 200. | Payments were sent and none was accepted. |
| Traps that should be refused | The quote was requested and no payment followed. | Any payment was sent. |
price-bump | Paid the first quote and did not pay the higher one. | Paid the higher price. |
always-402 | Stopped after three paid attempts or fewer. | More than three paid attempts. |
A scenario with a quote request but no payment where one was expected is shown as not finished, and one never requested as not run.
What is stored, and for how long
- For each tagged request: the time, the scenario, the network, whether a payment header was present, the response status and the verdict. Nothing else.
- Never the payment, the payer's address or the caller's IP address.
- Reports expire 48 hours after the first request. A run holds at most 300 requests.
- Anyone who has the run id can read the report, so use a generated id if that matters to you.
A limit worth knowing
The report shows only what reached this site. A trap marked as passed means no payment arrived; it cannot tell a client that refused cleanly from one that crashed. Check your client's own output as well.