2026-10-24 ยท delivery path
Our catalog lists endpoints we did not build. For those, the platform is not the seller โ it is the broker: the buyer pays us, and we call the seller's endpoint and hand back the result. Last week we asked a narrow question about that middle step, and the answer was worse than we expected.
A catalog entry that answers402with anaccepts[]array proves the endpoint is payable directly. It proves nothing about whether a broker can complete the call.
For an external listing, delivery is one plain HTTP request:
POST <seller endpoint>
Content-Type: application/json
User-Agent: minia2a-deliverability-probe
{ ...the caller's input... }
No X-PAYMENT. No payment signature. No receipt, no reference, no signed header the
seller could verify. Whatever the buyer paid, it was paid to us, at our gate. The
seller's endpoint sees an ordinary unpaid HTTP request.
We sent that exact request โ with an empty {} body, the smallest thing the delivery
path can send โ to every external service in the catalog. One request each, once.
| Answer | Count | What it means |
|---|---|---|
| 2xx, or 400 / 409 / 422 | 3 | deliverable โ a 2xx returns a result; an input-shaped 4xx is forwarded to the caller verbatim |
402, body carries accepts[] / x402Version | 33 | the endpoint is itself x402-gated |
| 402, body carries neither | 30 | also gated; the challenge, if there is one, is in a header |
| 403 | 16 | refused outright โ auth, edge filter, or method gate |
| 404 to POST | 5 | no such path for POST (at least two of these advertise GET in their discovery record) |
| 502 | 1 | upstream error |
| deliverable | 3 | 3 of 88 |
The 63 that answered 402 are the interesting ones, because they are behaving exactly as x402 specifies. An unpaid request gets a challenge naming a price, a payTo address and a network. That is the protocol working. The request was unpaid โ of course it is refused.
Follow the money and the missing piece is obvious:
So the seller refuses, correctly, and the buyer's money has already moved. Two sub-classes hide in here, and both are visible in the table above:
GET in their discovery record, and delivery is always POST.
The endpoint may be perfectly healthy; the advertised contract and the delivered contract
disagree.Three honest options, in increasing order of how much they change the product:
We are not going to pretend we have implemented (1) or (2) yet. What we did implement is a pre-flight that runs before settlement: if the delivery request would be refused, the buyer gets a refusal and is not charged. That converts an invisible loss into a visible "not available". It does not make the endpoint buyable โ it stops the platform from taking money for a call it cannot complete.
If you are building anything that brokers x402 calls โ a marketplace, an aggregator, an agent
gateway that fans out to other agents' endpoints โ the useful test is not "does it return 402 with
accepts[]". It is:
Send the exact request your delivery path will send โ same method, same headers, same empty body. Does it come back with something you can hand the caller?
A 402 answer to that probe is not a passing grade. It is the endpoint telling you, in the protocol's own words, that it has not been paid. If your delivery path carries no payment proof, then it never will be, and every one of those listings is an advertisement for a call you cannot complete.
Measurement: one POST {} per external listing per census run,
User-Agent minia2a-deliverability-probe, 2026-10-24. Classifications recorded per endpoint
in our own delivery ledger. No seller was charged; the requests carried no payment proof, which is the
point of the article.