{
  "rules_version": "2026-10-13",
  "page": "https://402xagent.com/rules",
  "verdicts": {
    "pay": "safe to pay these exact terms now",
    "skip": "do not pay (we saw a concrete problem)",
    "recheck": "no decision yet: try again later"
  },
  "reason_codes": [
    {
      "code": "price_ok",
      "verdict": "pay",
      "confidence": "high",
      "rule": "Live 402 offers canonical USDC on a supported mainnet, to the listed wallet and network, at the listed price (within 1%).",
      "text": "payment request matches the listed price"
    },
    {
      "code": "price_below_listing",
      "verdict": "pay",
      "confidence": "high",
      "rule": "As price_ok, but the live price is more than 1% below the listed price.",
      "text": "live price lower than listed"
    },
    {
      "code": "price_mismatch",
      "verdict": "skip",
      "confidence": "high",
      "rule": "Live price is more than 1% above the listed or claimed price.",
      "text": "asks a different price than listed"
    },
    {
      "code": "pay_to_mismatch",
      "verdict": "skip",
      "confidence": "high",
      "rule": "The 402 pays a different wallet than listed.",
      "text": "pays a different wallet than listed"
    },
    {
      "code": "network_mismatch",
      "verdict": "skip",
      "confidence": "high",
      "rule": "The 402 asks for payment on a different network than listed.",
      "text": "asks for payment on a different network than listed"
    },
    {
      "code": "asset_not_usdc",
      "verdict": "skip",
      "confidence": "high",
      "rule": "The 402 asks for a token other than canonical USDC.",
      "text": "asks for a token other than USDC"
    },
    {
      "code": "network_unsupported",
      "verdict": "skip",
      "confidence": "high",
      "rule": "The 402 only offers a testnet or a network we do not support.",
      "text": "wants payment on a testnet or a network we don't support"
    },
    {
      "code": "ssrf_blocked",
      "verdict": "skip",
      "confidence": "high",
      "rule": "Private, local or otherwise unsafe address; never fetched.",
      "text": "private or local address, not checked"
    },
    {
      "code": "no_paywall",
      "verdict": "skip",
      "confidence": "medium",
      "rule": "The endpoint answered without an x402 payment request (one probe; a route may need another method or path).",
      "text": "no x402 payment request at this URL"
    },
    {
      "code": "bad_challenge",
      "verdict": "skip",
      "confidence": "medium",
      "rule": "A 402 came back but its payment request has no readable USDC price.",
      "text": "payment request has no readable USDC price"
    },
    {
      "code": "ambiguous",
      "verdict": "skip",
      "confidence": "medium",
      "rule": "The payment request is unclear (several incompatible offers).",
      "text": "payment request is unclear"
    },
    {
      "code": "free_trial_active",
      "verdict": "recheck",
      "confidence": "low",
      "rule": "The seller says a free trial is active, so there is no price to check yet.",
      "text": "seller says a free trial is active, so there is no price to check yet, try again later"
    },
    {
      "code": "timeout",
      "verdict": "recheck",
      "confidence": "low",
      "rule": "The endpoint did not answer in time.",
      "text": "endpoint did not answer in time, try again shortly"
    },
    {
      "code": "unreachable",
      "verdict": "recheck",
      "confidence": "low",
      "rule": "Could not connect (DNS, TLS or network error).",
      "text": "could not reach the endpoint, try again shortly"
    },
    {
      "code": "server_error",
      "verdict": "recheck",
      "confidence": "low",
      "rule": "The endpoint returned a 5xx.",
      "text": "endpoint returned a server error, try again shortly"
    }
  ],
  "confidence": {
    "levels": [
      "high",
      "medium",
      "low"
    ],
    "rules": [
      "high: the verdict follows from terms we read in the live 402 and compared with the listing (or a definite safety block).",
      "medium: one probe without readable terms (no_paywall, bad_challenge, ambiguous); or a pay with no listed price to compare; or a pay whose terms changed since the previous observation (history.drift true).",
      "low: every recheck (timeouts, 5xx, network errors, free trials), and any code not in this list."
    ]
  },
  "fields": {
    "reason_code": "stable machine code (this list); never renamed, new codes may be added",
    "reason": "free answers: one plain-words line; paid answers: the code (unchanged since 0.6)",
    "confidence": "high | medium | low (rules above)",
    "history": "summary of the last 30 observations: stable_for_days, stable_since, last_changed, drift",
    "history_observations": "paid, router and exempt answers only: the last 30 observations (time, price, network, pay_to, asset, status)"
  },
  "price_tolerance": "within 1% of the listed price counts as the listed price",
  "limits": {
    "free_live_checks": "5 per client name per UTC day, and at most 25 per network (IP; IPv6 /64) per UTC day across all client names; over the network cap: HTTP 429 with Retry-After until 00:00 UTC. The IP is only kept as a salted hash.",
    "dry_runs": "separate caps per caller and per network; never an approval to pay",
    "paid": "one tenth of the endpoint's quoted price (min $0.01, cap $0.25) per check; router tier $0.01 for 10 checks; rate limited per payer per hour"
  }
}