402xAgent rules

How a check turns a live x402 payment request into pay, skip or recheck. Machine-readable: /rules.json (version 2026-10-15).

Verdicts

Reason codes

reason_codeverdictdefault confidencerule
price_okpayhighLive 402 offers canonical USDC on a supported mainnet, to the listed wallet and network, at the listed price (within 1%).
price_below_listingpayhighAs price_ok, but the live price is more than 1% below the listed price.
price_mismatchskiphighLive price is more than 1% above the listed or claimed price.
pay_to_mismatchskiphighThe 402 pays a different wallet than listed.
network_mismatchskiphighThe 402 asks for payment on a different network than listed.
asset_not_usdcskiphighThe 402 asks for a token other than canonical USDC.
network_unsupportedskiphighThe 402 only offers a testnet or a network we do not support.
ssrf_blockedskiphighPrivate, local or otherwise unsafe address; never fetched.
no_paywallskipmediumThe endpoint answered without an x402 payment request (one probe; a route may need another method or path).
bad_challengeskipmediumA 402 came back but its payment request has no readable USDC price.
ambiguousskipmediumThe payment request is unclear (several incompatible offers).
free_trial_activerechecklowThe seller says a free trial is active, so there is no price to check yet.
timeoutrechecklowThe endpoint did not answer in time.
unreachablerechecklowCould not connect (DNS, TLS or network error).
server_errorrechecklowThe endpoint returned a 5xx.

within 1% of the listed price counts as the listed price.

Confidence

Quality codes

Separate from reason_code; never changes a verdict. Folded into reputation.

codereputation valuerule
quality_ok1Reachable, answered HTTP 402 with a well-formed payment request (JSON body or PAYMENT-REQUIRED header), declares an output schema, and the response sample it publishes validates against that schema.
quality_unverified0.7Reachable, HTTP 402 with a well-formed content type, but there is nothing to validate: no output schema declared, or a schema without a sample. Not a fault; we never pay the seller to capture a real response.
quality_bad_content_type0.4HTTP 402 whose terms are only in the body, and the body is not JSON (content-type is not application/json or +json).
quality_schema_mismatch0.3The listing declares an output schema (bazaar extension or v1 outputSchema) and the sample it publishes does not validate against it.
quality_bad_status0.2Reachable, but the response is not an HTTP 402 payment request (e.g. 200 without a paywall, 404, 5xx).
quality_unreachable0No response: timeout, DNS/TLS/network error, or an address we refuse to fetch.

Seller reputation

score = round(100 * sum(w_i * c_i) / sum(w_i)), over the components c_i (each 0..1) that have data; a component with no data is left out and the remaining weights are renormalized. Cap: with at least 5 pay/skip checks in 30 days and pay_share under 0.2, score = min(score, 49).

componentweightdefinition
stability25per endpoint: time the current payment terms (price, network, asset, pay_to) have held / time we have observed the endpoint (endpoint_history, last 30 observations); mean over endpoints. Observations without terms (timeouts) do not reset it.
drift201 - min(1, 2 * penalty / transitions) over consecutive term-bearing observations of every endpoint; penalty per transition: pay_to change 1, network or asset change 1, price-only change 0.5. No transitions -> no data.
verdicts30last 30 days of checks: pay_share * (0.5 + 0.5 * consistency). pay_share = pay / (pay + skip); consistency = share of checks that agree with their endpoint's latest verdict. Recheck verdicts (timeouts, 5xx) are left out.
freshness101 if the newest check is under 24 h old, then linear down to 0 at 14 days.
quality15mean over endpoints of the latest quality code's value: quality_ok=1, quality_unverified=0.7, quality_bad_content_type=0.4, quality_schema_mismatch=0.3, quality_bad_status=0.2, quality_unreachable=0. No quality data -> no data.

Limits

Fields

402xAgent