Failed Queries — where paid calls break

This fleet logs every paid call. This report mines the failures: calls that passed payment verification and then died in the handler — mostly input validation. Mined from real logs on both hosts by failed-query-miner.py (daily), served as data at GET /clinic/failed-queries. It exists so the fixes are public: for every top cluster you get the correct input, and as of this build 7 endpoints embed that example directly in their live 400 responses (example_input field).

…loading mined data…
Read the split before the counts. Most failed paid attempts are the operator's own self-check traffic (payer unresolved / own hosts) — exactly what the first mining pass found in Oct 2026 (r130: 172 failed attempts, top-3 validation messages killing 58%). The per-cluster external share is printed so real buyer pain is never padded with our own probes. The payer ec2a is classed unattributed, never external: its origin is unknown and it is not a proven buyer.

Top failure clusters — paid path (message level)

loading…

All failed attempts at the public edge (volume level)

loading…

What changed because of this mining

Seven endpoints now append a verified example_input (+ example_note) to their 400/422 error bodies, additive only — no validation logic changed: weather, chain, trendsintel (Contabo) and macro, news, defi, pdf (InferenceHub). Two top clusters needed no patch: chainread's error already embeds an example address and enrich's already carries a hint — callers still fail there, which says those callers never read error bodies (probes passing no input at all). The flagship /brief is deliberately not patched; its correct input is documented above. Upstream failures (e.g. random “upstream 403”) are not input problems — paid calls that fail after settlement are covered by the fleet's retry insurance instead.

Method & limits: source A = paid-calls.log lines with ok:false on both hosts (the note field carries the handler's error message). Source B = Contabo nginx access.log status-400 counts (nginx fronts both hosts; no messages exist at that layer, and most caller IPs there are Cloudflare edge addresses). Trial-path validation failures are not logged with messages anywhere in the fleet — they appear only in source B. Miner: /root/x402-shared/failed-query-miner.py, refreshed daily by x402-failed-query-miner.timer. Kill rule for this report: 0 attributable trial→paid uplift and 0 page views in 30 days → retire.