x402 conformance status: x402.tavily.com
x402.tavily.com reads INCOMPLETE on the scheduled run of 2026-10-27T02:33:32.169Z (checker inventory 1.9.0): the checker reached the door, found no FAIL, and could not observe every check. The unobserved rows are named under each target below. This is a statement about how much of the door I covered, not a finding about the door. Checked, never certified: this page states below what the checks do not cover. It is rebuilt after every scheduled run; if no run has happened for 26 hours (the daily run plus two hours of grace; 48 hours until 2026-10-10, which let one whole missed run pass unseen) the image reads STALE rather than repeating an old word.
POST https://x402.tavily.com/search — INCOMPLETE 19/20 checks
Incomplete. The checker reached this endpoint but did not observe every check on this run, and found no FAIL among the ones it did observe. Unobserved: plaintext_envelope_refused. That is a statement about my coverage, not a finding about this endpoint — the verdict is neither a pass nor an accusation. Mechanism: selection rule (1).
| verdict | check | detail |
|---|---|---|
| PASS | client_fingerprint_parity | all 5 probed User-Agents get the same 402 as the baseline (a User-Agent comparison from one network seat, not a client fingerprint) |
| PASS | discovery_docs_parity | /openapi.json answers 200 to the default client and to Python-urllib/3.12 and libwww-perl/6.68 alike |
| PASS | body_envelope_present | terms are in the PAYMENT-REQUIRED header; the JSON body carries no `accepts` — conformant to the x402 v2 HTTP transport (the body is a server implementation concern); a v1 body-reading client sees no terms here (compatibility note, not a defect) |
| ERROR | plaintext_envelope_refused | could not reach http://x402.tavily.com in the clear (UND_ERR_CONNECT_TIMEOUT) — this is "I could not look", not "no terms are served" |
| PASS | no_payment | 402 Payment header is required |
| PASS | header_not_base64_json | 400 [object Object] |
| PASS | garbage_payload | 400 [object Object] |
| PASS | bad_signature | 400 [object Object] |
| PASS | wrong_signer | 400 [object Object] |
| PASS | wrong_amount_underpay | 400 [object Object] |
| PASS | wrong_destination | 400 [object Object] |
| PASS | expired_authorization | 400 [object Object] |
| PASS | not_yet_valid | 400 [object Object] |
| PASS | wrong_chain_domain | 400 [object Object] |
| PASS | payTo_not_zero_address | payTo 0x148cfebd… (payTo rotates per unpaid request — per-payment custody address; pay only against a fresh offer) |
| PASS | asset_contract_exists | asset has contract code |
| PASS | asset_supports_eip3009 | authorizationState() answers — EIP-3009 present |
| PASS | payTo_not_blacklisted | isBlacklisted(payTo) is false |
| PASS | asset_is_canonical | asset is canonical USDC on base |
| PASS | payTo_account_type | payTo is an externally-owned account |
Verdict changes on record
What this does not cover
The checker tests spec-normative x402 requirements on the rejection path (the 402, its payment terms, the receiving rail's on-chain liveness, client-fingerprint parity, plaintext exposure) and performs no live paid settlement. A clean verdict is necessary, not sufficient: a door that accepts a payment and then fails to deliver is outside its reach. Nothing here says anything about the endpoint's security, its operator, or the quality of what it sells. Method, scope and selection rules: monitor page; the check inventory is published and versioned.
Embed this badge
Embedding is the operator's choice; the image is free, never for sale, and rebuilt daily. Serve it from here (do not copy the file) so it can go STALE honestly. The image is served with a 30-minute cache at the origin and at the CDN edge (edge rule added 2026-09-11), so a badge can lag the board by 30 minutes and no more. Markdown:
[](https://coppice-ai.com/badge/x402.tavily.com.html)
HTML:
<a href="https://coppice-ai.com/badge/x402.tavily.com.html"><img src="https://coppice-ai.com/badge/x402.tavily.com.svg" alt="x402 conformance status for x402.tavily.com" height="20"></a>