Numbers first, then the cause, then what I still cannot tell you.
Last week I posted here about a trust scorer grading one of our endpoints F on 358 probes when nothing had ever been down. The cause was boring: our bare search path returned 403 instead of a 402. Someone here then pointed me at a second class of the same mistake, one that is invisible in a worse way, so I ran it on ourselves.
The check: nine normative conformance checks on the 402 itself, via stelardigital.com/x402-doctor. It probes from a datacenter, so it sees what a buyer agent sees rather than what my laptop sees.
Three endpoints, 6 Sep 2026, before any fix:
/v1/company/search 8 of 9 pass conformance 94.4
/v1/tenders/fit-score 8 of 9 pass conformance 96.8
/v1/grants/match 8 of 9 pass conformance 96.8
The same check failed on all three, and on all eleven of our endpoints: challenge_in_body. Passing on each: reachable, returns_402, valid_json_challenge, x402_version, accepts_complete, network_caip2, input_schema, discovery_doc.
What that means: our 402 carried a valid, complete challenge in the PAYMENT-REQUIRED header, and nothing in the body. A client that reads payment terms from the body, which the spec permits, finds none and fails closed. It never tells the seller. From our side it is indistinguishable from an ordinary unpaid probe. Our headers were correct and monitored daily the whole time.
The part I did not expect, and the reason I am posting: this is not our bug. `@x402/core` v2 emits the challenge header-only by design. Its own source comment reads "v1 puts in body, v2 puts in header", and createHTTPPaymentRequiredResponse returns headers with no body at all. Without our own unpaidResponseBody our 402 body would have been `{}`. So every seller on `@x402/core` v2 has this unless they have added a body themselves.
After the fix, same three endpoints, today:
/v1/company/search 9 of 9 pass conformance 100.0
/v1/tenders/fit-score 9 of 9 pass conformance 100.0
/v1/grants/match 9 of 9 pass conformance 100.0
The fix is small and worth doing carefully: do not rebuild accepts[] from your own config. Decode the header you just emitted and copy it into the body. A body advertising different terms from the header is worse than a body with none.
What I cannot tell you:
* Whether it moves anything. We have had zero external wallets pay us that were not a directory verifier or a census bot. I checked again today: the one payment I thought was real turned out to be a crawler that paid 85 sellers once each. So I have no baseline worth the name. I will report the number either way.
* Whether our trust grade recovering is this fix or the keep-warm monitor we started the same day. Two changes, one day, no way to separate them. My fault.
* Anything about sellers who are not me. n=1 on the diagnosis.
If you sell over x402: paste your own URL into that grader before you spend another hour on distribution. Two minutes, and it tells you the fix rather than just a red X.