{"x-machine-trial":{"enabled":true,"model":"one-time bounded machine trial; wallet control is not unique-agent identity","allowances":{"check":2,"extract":1,"smart_diff":1,"openapi_diff":1,"contract_watch":1,"wallet_watch":1,"token_facts":1},"challenge_endpoint":"/v3/agent-trial/challenge","claim_endpoint":"/v3/agent-trial/claim","quota_endpoint":"/v3/agent-trial/quota","credential_header":"X-Fresh402-Trial-Key","idempotency_header":"Idempotency-Key","credential_max_lifetime_seconds":604800,"captcha_required":false,"wallet_signature":"EIP-191 personal_sign of the exact returned challenge","payments_automatic":false,"shared_limits":{"work_units_day":32,"work_units_month":64,"work_units_network_day":8,"web_runtime_reservation_ms_day":360000,"web_runtime_reservation_ms_month":1200000,"blockchain_rpc_reservation_day":18,"blockchain_units_month":18000},"warning":"Allowances are maximum entitlements, not reserved capacity. Shared admission may return 429 before an allowance is exhausted. No payment fallback."},"x-all-service-prepaid":{"enabled":true,"terms_endpoint":"/v3/prepaid/all-services","acceptance_field":"all_services_terms_digest","requires_finalized_purchase":true},"x-circle-gateway":{"enabled":false,"protocol":"x402","scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","authorization_domain":"GatewayWalletBatched","prepaid_purchases":false,"delivery":"after Gateway confirmed or completed transfer; pending batch returns 409","settlement":"Circle Gateway balance; transfer UUID is not an onchain transaction hash","mainnet_settlement_validated":false,"guide":"https://github.com/kirillradchenko96/fresh402/blob/main/docs/CIRCLE_GATEWAY.md"},"x-mpp-payments":{"enabled":true,"method":"evm","intent":"charge","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","credential_type":"authorization","prepaid_purchases":true,"guide":"https://github.com/kirillradchenko96/fresh402/blob/main/docs/MPP.md","mainnet_settlement_newly_validated":false},"x-customer-onboarding":{"account_creation":true,"package_purchasing":true,"terms_approved":true,"wallet_signatures":"EIP-712, 65-byte EOA only; contract wallets unsupported","session_header":"X-Fresh402-Customer-Session","credential_header":"X-Fresh402-API-Key","finality":"Finalized Base receipt, canonical block, direct native USDC EIP-3009 call and matching authorization/transfer logs","recovery":"Recover the original intent. Never replace a submitted authorization. Recover lost keys by wallet authentication and replacement.","account_url":"/account","terms_url":"/terms","privacy_url":"/privacy","support_email":"fresh402@proton.me","automatic_recovery":"Server-side bounded Cron reconciliation continues independently of the client and session.","plans_url":"/v2/prepaid/plans","customer_api":"/v2/prepaid/customer","agent_guide":"https://github.com/kirillradchenko96/fresh402/blob/main/docs/AGENT_PREPAID.md","prepaid_mcp":{"credential_header":"X-Fresh402-API-Key","metadata_key":"fresh402/prepaid","required_metadata":["idempotency_key","tariff_version","max_credits"],"mixed_x402":false},"provisional":{"enabled":true,"starter_max":50,"developer_max":100,"aggregate_max":500,"minimum_l2_confirmations":3,"independent_corroboration":true,"not_finality":true,"policy":"New eligible purchases only; evidence freshness, finite verification and account/payer/project caps may freeze or deny early access. Full entitlement requires finalized settlement."}},"x-prepaid-availability":{"execution":"configured-account-access","purchasing":"public-self-service","candidate_packages":"Immutable package IDs and exact terms are listed at /v2/prepaid/plans; inspect its independent public signup/purchasing flags. No automatic wallet connection or funding."},"openapi":"3.1.0","info":{"title":"Fresh402 Web and Blockchain Intelligence API","version":"3.0.2","description":"Fresh402 3.0.2: bounded OpenAPI contract comparison; durable payment results, private recovery, public web extraction, structural comparison and backward-compatible freshness. On-demand requests; no browser rendering or LLM inference.","contact":{"name":"Fresh402 support","email":"fresh402@proton.me","url":"https://github.com/kirillradchenko96/fresh402/issues"}},"servers":[{"url":"https://api.fresh402.com"}],"paths":{"/v2/prepaid/plans":{"get":{"operationId":"fresh402_prepaid_plans","summary":"Exact Starter/Developer terms and current public availability","tags":["prepaid-customer"],"security":[],"responses":{"200":{"description":"Authenticated result. Session tokens and API keys are confidential, no-store, never logged.","content":{"application/json":{"schema":{"type":"object"}}}},"202":{"description":"Verified bounded early credit is available; original state is not credited and full finality remains pending."},"401":{"description":"Ownership or session proof required"},"402":{"description":"Payment required; inspect PAYMENT-REQUIRED. Not a completed purchase."},"403":{"description":"Account, credential or global kill switch denied access"},"409":{"description":"In progress, replay mismatch or used challenge; recover original intent"},"410":{"description":"Expired unsubmitted intent or challenge"},"429":{"description":"Bounded admission or credential limit"},"503":{"description":"Public activation gated or finalized settlement pending; never pay again"}}}},"/v2/prepaid/customer/challenge":{"post":{"operationId":"fresh402_customer_challenge","summary":"Create a five-minute single-use Base EIP-712 ownership challenge","tags":["prepaid-customer"],"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"wallet":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"}},"required":["wallet"]}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{16,128}$"}}],"responses":{"200":{"description":"Authenticated result. Session tokens and API keys are confidential, no-store, never logged.","content":{"application/json":{"schema":{"type":"object"}}}},"202":{"description":"Verified bounded early credit is available; original state is not credited and full finality remains pending."},"401":{"description":"Ownership or session proof required"},"402":{"description":"Payment required; inspect PAYMENT-REQUIRED. Not a completed purchase."},"403":{"description":"Account, credential or global kill switch denied access"},"409":{"description":"In progress, replay mismatch or used challenge; recover original intent"},"410":{"description":"Expired unsubmitted intent or challenge"},"429":{"description":"Bounded admission or credential limit"},"503":{"description":"Public activation gated or finalized settlement pending; never pay again"}}}},"/v2/prepaid/customer/sessions":{"post":{"operationId":"fresh402_customer_session","summary":"Prove EOA wallet ownership; create or recover the same zero-credit account","tags":["prepaid-customer"],"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"challenge_id":{"type":"string","pattern":"^cc_[a-f0-9]{64}$"},"signature":{"type":"string","pattern":"^0x[a-fA-F0-9]{130}$"}},"required":["challenge_id","signature"]}}}},"responses":{"200":{"description":"Authenticated result. Session tokens and API keys are confidential, no-store, never logged.","content":{"application/json":{"schema":{"type":"object"}}}},"202":{"description":"Verified bounded early credit is available; original state is not credited and full finality remains pending."},"401":{"description":"Ownership or session proof required"},"402":{"description":"Payment required; inspect PAYMENT-REQUIRED. Not a completed purchase."},"403":{"description":"Account, credential or global kill switch denied access"},"409":{"description":"In progress, replay mismatch or used challenge; recover original intent"},"410":{"description":"Expired unsubmitted intent or challenge"},"429":{"description":"Bounded admission or credential limit"},"503":{"description":"Public activation gated or finalized settlement pending; never pay again"}}}},"/v2/prepaid/customer/account":{"get":{"operationId":"fresh402_customer_account","summary":"Available/reserved credits and immutable tariff","tags":["prepaid-customer"],"security":[{"customerSession":[]}],"responses":{"200":{"description":"Authenticated result. Session tokens and API keys are confidential, no-store, never logged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrepaidBalance"}}}},"202":{"description":"Verified bounded early credit is available; original state is not credited and full finality remains pending."},"401":{"description":"Ownership or session proof required"},"402":{"description":"Payment required; inspect PAYMENT-REQUIRED. Not a completed purchase."},"403":{"description":"Account, credential or global kill switch denied access"},"409":{"description":"In progress, replay mismatch or used challenge; recover original intent"},"410":{"description":"Expired unsubmitted intent or challenge"},"429":{"description":"Bounded admission or credential limit"},"503":{"description":"Public activation gated or finalized settlement pending; never pay again"}}}},"/v2/prepaid/customer/usage":{"get":{"operationId":"fresh402_customer_usage","summary":"Latest 100 account operations","tags":["prepaid-customer"],"security":[{"customerSession":[]}],"responses":{"200":{"description":"Authenticated result. Session tokens and API keys are confidential, no-store, never logged.","content":{"application/json":{"schema":{"type":"object"}}}},"202":{"description":"Verified bounded early credit is available; original state is not credited and full finality remains pending."},"401":{"description":"Ownership or session proof required"},"402":{"description":"Payment required; inspect PAYMENT-REQUIRED. Not a completed purchase."},"403":{"description":"Account, credential or global kill switch denied access"},"409":{"description":"In progress, replay mismatch or used challenge; recover original intent"},"410":{"description":"Expired unsubmitted intent or challenge"},"429":{"description":"Bounded admission or credential limit"},"503":{"description":"Public activation gated or finalized settlement pending; never pay again"}}}},"/v2/prepaid/customer/purchases":{"get":{"operationId":"fresh402_customer_purchases","summary":"Latest 100 original funding intents","tags":["prepaid-customer"],"security":[{"customerSession":[]}],"responses":{"200":{"description":"Authenticated result. Session tokens and API keys are confidential, no-store, never logged.","content":{"application/json":{"schema":{"type":"object"}}}},"202":{"description":"Verified bounded early credit is available; original state is not credited and full finality remains pending."},"401":{"description":"Ownership or session proof required"},"402":{"description":"Payment required; inspect PAYMENT-REQUIRED. Not a completed purchase."},"403":{"description":"Account, credential or global kill switch denied access"},"409":{"description":"In progress, replay mismatch or used challenge; recover original intent"},"410":{"description":"Expired unsubmitted intent or challenge"},"429":{"description":"Bounded admission or credential limit"},"503":{"description":"Public activation gated or finalized settlement pending; never pay again"}}}},"/v2/prepaid/customer/credentials":{"get":{"operationId":"fresh402_customer_credentials","summary":"Credential identifiers and revocation metadata","tags":["prepaid-customer"],"security":[{"customerSession":[]}],"responses":{"200":{"description":"Authenticated result. Session tokens and API keys are confidential, no-store, never logged.","content":{"application/json":{"schema":{"type":"object"}}}},"202":{"description":"Verified bounded early credit is available; original state is not credited and full finality remains pending."},"401":{"description":"Ownership or session proof required"},"402":{"description":"Payment required; inspect PAYMENT-REQUIRED. Not a completed purchase."},"403":{"description":"Account, credential or global kill switch denied access"},"409":{"description":"In progress, replay mismatch or used challenge; recover original intent"},"410":{"description":"Expired unsubmitted intent or challenge"},"429":{"description":"Bounded admission or credential limit"},"503":{"description":"Public activation gated or finalized settlement pending; never pay again"}}}},"/v2/prepaid/customer/funding":{"post":{"operationId":"fresh402_customer_purchase","summary":"Idempotent package quote; no payment or credits created","tags":["prepaid-customer"],"security":[{"customerSession":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"all_services_terms_digest":{"type":"string","pattern":"^[a-f0-9]{64}$","description":"Conditionally required for all-services-v4 packages: exact explicit accepted digest from /v3/prepaid/all-services. Legacy purchases retain original terms."},"package_id":{"type":"string","enum":["candidate-starter-v3","candidate-developer-v3","starter-all-services-v4","developer-all-services-v4"]},"payment_protocol":{"type":"string","enum":["x402","mpp"],"description":"Optional; default x402. Use mpp only when root mpp_payments.prepaid_purchases is true. Persist the original purchase key and protocol."}},"required":["package_id"]}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{16,128}$"}}],"responses":{"200":{"description":"Authenticated result. Session tokens and API keys are confidential, no-store, never logged.","content":{"application/json":{"schema":{"type":"object"}}}},"202":{"description":"Verified bounded early credit is available; original state is not credited and full finality remains pending."},"401":{"description":"Ownership or session proof required"},"402":{"description":"Payment required; inspect PAYMENT-REQUIRED. Not a completed purchase."},"403":{"description":"Account, credential or global kill switch denied access"},"409":{"description":"In progress, replay mismatch or used challenge; recover original intent"},"410":{"description":"Expired unsubmitted intent or challenge"},"429":{"description":"Bounded admission or credential limit"},"503":{"description":"Public activation gated or finalized settlement pending; never pay again"}}}},"/v2/prepaid/customer/funding/{intent}":{"get":{"operationId":"fresh402_customer_funding_status","summary":"Inspect the original account-scoped funding intent","tags":["prepaid-customer"],"security":[{"customerSession":[]}],"parameters":[{"name":"intent","in":"path","required":true,"schema":{"type":"string","pattern":"^pf_[a-f0-9]{32}$"}},{"name":"PAYMENT-SIGNATURE","in":"header","required":false,"schema":{"type":"string"},"description":"Original x402 authorization only. Omit for recovery; never sign a replacement for a submitted intent."}],"responses":{"200":{"description":"Authenticated result. Session tokens and API keys are confidential, no-store, never logged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FundingStatus"}}}},"202":{"description":"Verified bounded early credit is available; original state is not credited and full finality remains pending."},"401":{"description":"Ownership or session proof required"},"402":{"description":"Payment required; inspect PAYMENT-REQUIRED. Not a completed purchase."},"403":{"description":"Account, credential or global kill switch denied access"},"409":{"description":"In progress, replay mismatch or used challenge; recover original intent"},"410":{"description":"Expired unsubmitted intent or challenge"},"429":{"description":"Bounded admission or credential limit"},"503":{"description":"Public activation gated or finalized settlement pending; never pay again"}}},"post":{"operationId":"fresh402_customer_funding","summary":"Obtain x402 challenge, explicitly submit original authorization, or recover finalized settlement","tags":["prepaid-customer"],"security":[{"customerSession":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{},"required":[]}}}},"parameters":[{"name":"intent","in":"path","required":true,"schema":{"type":"string","pattern":"^pf_[a-f0-9]{32}$"}},{"name":"PAYMENT-SIGNATURE","in":"header","required":false,"schema":{"type":"string"},"description":"Original x402 authorization only. Omit for recovery; never sign a replacement for a submitted intent."}],"responses":{"200":{"description":"Authenticated result. Session tokens and API keys are confidential, no-store, never logged.","content":{"application/json":{"schema":{"type":"object"}}}},"202":{"description":"Verified bounded early credit is available; original state is not credited and full finality remains pending."},"401":{"description":"Ownership or session proof required"},"402":{"description":"Payment required; inspect PAYMENT-REQUIRED. Not a completed purchase."},"403":{"description":"Account, credential or global kill switch denied access"},"409":{"description":"In progress, replay mismatch or used challenge; recover original intent"},"410":{"description":"Expired unsubmitted intent or challenge"},"429":{"description":"Bounded admission or credential limit"},"503":{"description":"Public activation gated or finalized settlement pending; never pay again"}}}},"/v2/prepaid/customer/funding/{intent}/inspect":{"post":{"operationId":"fresh402_customer_funding_inspect","summary":"Read-only original-signature and finalized-unused expiry inspection; never submits settlement","tags":["prepaid-customer"],"security":[{"customerSession":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"payment":{"type":"object"},"credential":{"type":"string","description":"Original serialized MPP Payment credential; never a new signature."}},"required":[],"oneOf":[{"required":["payment"]},{"required":["credential"]}]}}}},"parameters":[{"name":"intent","in":"path","required":true,"schema":{"type":"string","pattern":"^pf_[a-f0-9]{32}$"}},{"name":"PAYMENT-SIGNATURE","in":"header","required":false,"schema":{"type":"string"},"description":"Original x402 authorization only. Omit for recovery; never sign a replacement for a submitted intent."}],"responses":{"200":{"description":"Authenticated result. Session tokens and API keys are confidential, no-store, never logged.","content":{"application/json":{"schema":{"type":"object"}}}},"202":{"description":"Verified bounded early credit is available; original state is not credited and full finality remains pending."},"401":{"description":"Ownership or session proof required"},"402":{"description":"Payment required; inspect PAYMENT-REQUIRED. Not a completed purchase."},"403":{"description":"Account, credential or global kill switch denied access"},"409":{"description":"In progress, replay mismatch or used challenge; recover original intent"},"410":{"description":"Expired unsubmitted intent or challenge"},"429":{"description":"Bounded admission or credential limit"},"503":{"description":"Public activation gated or finalized settlement pending; never pay again"}}}},"/v2/prepaid/customer/credentials/claim":{"post":{"operationId":"fresh402_customer_claim","summary":"Replace all prior API keys after finalized funding or a verified spendable early tranche; lost responses are recoverable by repeating with wallet authentication","tags":["prepaid-customer"],"security":[{"customerSession":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{},"required":[]}}}},"responses":{"200":{"description":"Authenticated result. Session tokens and API keys are confidential, no-store, never logged.","content":{"application/json":{"schema":{"type":"object"}}}},"202":{"description":"Verified bounded early credit is available; original state is not credited and full finality remains pending."},"401":{"description":"Ownership or session proof required"},"402":{"description":"Payment required; inspect PAYMENT-REQUIRED. Not a completed purchase."},"403":{"description":"Account, credential or global kill switch denied access"},"409":{"description":"In progress, replay mismatch or used challenge; recover original intent"},"410":{"description":"Expired unsubmitted intent or challenge"},"429":{"description":"Bounded admission or credential limit"},"503":{"description":"Public activation gated or finalized settlement pending; never pay again"}}}},"/v2/prepaid/customer/credentials/rotate":{"post":{"operationId":"fresh402_customer_rotate","summary":"Replace all prior API keys after finalized funding or a verified spendable early tranche; lost responses are recoverable by repeating with wallet authentication","tags":["prepaid-customer"],"security":[{"customerSession":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{},"required":[]}}}},"responses":{"200":{"description":"Authenticated result. Session tokens and API keys are confidential, no-store, never logged.","content":{"application/json":{"schema":{"type":"object"}}}},"202":{"description":"Verified bounded early credit is available; original state is not credited and full finality remains pending."},"401":{"description":"Ownership or session proof required"},"402":{"description":"Payment required; inspect PAYMENT-REQUIRED. Not a completed purchase."},"403":{"description":"Account, credential or global kill switch denied access"},"409":{"description":"In progress, replay mismatch or used challenge; recover original intent"},"410":{"description":"Expired unsubmitted intent or challenge"},"429":{"description":"Bounded admission or credential limit"},"503":{"description":"Public activation gated or finalized settlement pending; never pay again"}}}},"/v2/prepaid/customer/credentials/revoke":{"post":{"operationId":"fresh402_customer_revoke","summary":"Revoke an account-owned API credential","tags":["prepaid-customer"],"security":[{"customerSession":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"credential_id":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["credential_id"]}}}},"responses":{"200":{"description":"Authenticated result. Session tokens and API keys are confidential, no-store, never logged.","content":{"application/json":{"schema":{"type":"object"}}}},"202":{"description":"Verified bounded early credit is available; original state is not credited and full finality remains pending."},"401":{"description":"Ownership or session proof required"},"402":{"description":"Payment required; inspect PAYMENT-REQUIRED. Not a completed purchase."},"403":{"description":"Account, credential or global kill switch denied access"},"409":{"description":"In progress, replay mismatch or used challenge; recover original intent"},"410":{"description":"Expired unsubmitted intent or challenge"},"429":{"description":"Bounded admission or credential limit"},"503":{"description":"Public activation gated or finalized settlement pending; never pay again"}}}},"/v1/check":{"post":{"operationId":"fresh402_check","summary":"Check whether public HTML, JSON or text changed; optional html_attributes on a new URL watch detects same-text link and selected attribute changes without altering older watches; use for on-demand freshness checks and a compact deterministic text diff, not background monitoring. Supply exactly one of url or watch_id. A URL-based paid Check can create a watch; an ID reuses its saved URL/rules, so omit all content-rule fields. Reuse returned watch_id/hash for later checks; first URL check without prior state reports changed:null. Optional cache reuse still costs $0.005 USDC per call on Base mainnet (eip155:8453). Requires an x402-capable MCP payment client and funded native-USDC payer; an ordinary MCP client receives a payment challenge, not a paid result. Alternatively use prepaid credits through REST or this MCP tool: X-Fresh402-API-Key in HTTP, with params._meta[\"fresh402/prepaid\"] containing idempotency_key, tariff_version and max_credits. When root mpp_payments.enabled is true, native MPP EVM charge is another option at the same USDC price: use an authorized Base EIP-712 signer and official mppx client, org.paymentauth/credential metadata and a persisted private recovery token. MPP receipt: org.paymentauth/receipt; see docs/MPP.md. Never combine MPP, prepaid and x402. Discover packages at /v2/prepaid/plans; see docs/AGENT_PREPAID.md for browserless wallet enrollment, bounded early credits and recovery. No JavaScript execution. Optional Circle Gateway x402 is available only when root circle_gateway.enabled is true. Use the GatewayWalletBatched quote, a funded Base Gateway EOA and a persisted private recovery token. Pending batches return 409; replay the original proof/input/token after 60 seconds. Results require Gateway confirmed/completed evidence; never mix providers. No Circle prepaid funding. See docs/CIRCLE_GATEWAY.md.","description":"Use Check for a changed/unchanged signal and optional compact text diff. Exactly one URL or existing watch ID; URL plus rules can create a watch, whereas watch_id reuses saved rules and forbids overrides. Use Smart Diff for structured changes. On-demand only; x402 $0.005 USDC on Base, including cache hits. Optional authenticated free-trial pilot: inspect GET /v2/trial before use. Send only X-Fresh402-Trial-Key and a persisted Idempotency-Key to this normal route or MCP HTTP transport. One-time quotas and finite capacity apply; replay the exact same input/key for seven days. Exhaustion never initiates a payment. Disabled trials reject execution.","tags":["check"],"security":[{"x402Payment":[]},{"mppPayment":[]},{"trialKey":[]}],"x-payment-info":{"protocols":[{"x402":{}},{"mpp":{"method":"evm","intent":"charge"}}],"price":{"mode":"fixed","currency":"USD","amount":"0.005"}},"x-mcp-tool":"fresh402_check","x-fresh402-tool":{"id":"check","category":"freshness","limits":{"transfer_bytes":5000000,"decoded_bytes":5000000,"output_bytes":524288,"parser_characters":1000000,"gateway_timeout_ms":10000},"prepaid_credits":{"1":1,"2":2,"3":2},"network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","auth":"x402-or-prepaid","since":"2.0.0"},"parameters":[{"name":"X-Fresh402-Recovery-Token","in":"header","required":false,"schema":{"type":"string","minLength":43,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$"},"description":"Client-generated random 32-byte secret, encoded as hex/base64url. Persist before paying; retry identical input/payment/token for seven-day private recovery without another settlement. A public signature or transaction hash alone grants no recovery."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{16,128}$"},"description":"Required with a trial key: unique persisted key per logical operation. Reuse exact input/key for recovery; do not combine trial and payment credentials."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"url":{"description":"Supply exactly one of url or watch_id. URL must be absolute public HTTPS on port 443, at most 4096 characters, with no credentials/private targets, e.g. 'https://example.com/docs'. Fresh402's own service URLs, including its discovery /openapi.json, cannot be targets; choose an external public document. With url, optional content rules identify the watch; an existing watch is reused or a new one is created by this paid Check. Separate registration is not required. No JavaScript rendering.","type":"string","maxLength":4096,"format":"uri","pattern":"^[Hh][Tt][Tt][Pp][Ss]://"},"watch_id":{"description":"Supply exactly one of watch_id or url. An existing ID returned by fresh402_register (free), POST /v1/register, or a URL-based Check: 'w_' followed by 32 lowercase hexadecimal characters. Reuses that watch's stored URL and rules. When supplied, omit selector, ignore_selectors and ignore_json_paths entirely, even empty arrays. Do not invent an ID.","type":"string","pattern":"^w_[a-f0-9]{32}$"},"selector":{"description":"Optional HTML CSS scope, 1-256 characters, e.g. 'main'; accepted only with url. Omit for the page after built-in noise removal. No match returns 422; not supported for JSON/plain text. With watch_id, omit this field: the saved selector is reused.","type":"string","minLength":1,"maxLength":256},"ignore_selectors":{"description":"Optional HTML-only exclusion array, up to 20 supported CSS selectors of 1-256 characters each, e.g. ['.timestamp']. Accepted only with url; default []. With watch_id, omit the field entirely (including []): saved exclusions are reused.","maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":256,"description":"HTML element(s) to remove before normalization: a supported CSS selector, 1-256 characters, e.g. '.timestamp' or 'nav'."}},"ignore_json_paths":{"description":"Optional JSON-only exclusions, up to 20 paths of 1-256 characters starting with '/'; '~0'/'~1' escapes and '*' segments are supported. Example: ['/updated_at']. Accepted only with url; default []. With watch_id, omit entirely (including []): saved paths are reused.","maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":256,"pattern":"^\\/","description":"JSON Pointer-style path, 1-256 characters, starting with '/'. Decode '~0' as '~' and '~1' as '/'; '*' matches all object keys or array elements. Example: '/items/*/updated_at'."}},"html_attributes":{"description":"Optional HTML-only watch rule: up to4 of href,title,alt,aria-label; default[] retains existing text-only normalization. Distinct names are sorted; nonempty rules create a separate version1 watch/baseline. Records bounded meaningful attributes within the saved selector or filtered page, including same-text link destination changes. Cannot be supplied with watch_id, even[]. Unsafe hrefs are hashed, never fetched. Limits:200 elements,2048 characters/value,32768 evidence bytes; excess fails, never clips silently.","maxItems":4,"type":"array","items":{"type":"string","enum":["alt","aria-label","href","title"],"description":"One explicitly observed HTML attribute: href (a/area only),title,alt or aria-label. No class/style/event attributes; links are inert evidence and never fetched."}},"previous_hash":{"description":"Optional previous Fresh402 content hash: exactly 64 hexadecimal characters, case-insensitive. Overrides comparison with the watch's current stored hash. Omit to use that stored hash; a new URL watch without a prior hash returns changed:null. Hash comparison does not require retained old text, but a text diff does; a hash cannot reconstruct missing content.","type":"string","pattern":"^[a-fA-F0-9]{64}$"},"max_age_seconds":{"description":"Optional integer cache age in seconds, 0-86400; runtime default: 0. A positive value permits reuse of a sufficiently recent watch result without fetching. Zero contacts the source (conditional HTTP may return 304). Cached Checks still require payment; this does not schedule background polling.","type":"integer","minimum":0,"maximum":86400},"include_diff":{"description":"Optional boolean; runtime default: true. Request a compact deterministic text diff when content changed and compatible prior text is retained. False omits the diff; true cannot recover unavailable old content and does not enable Smart Diff's structural analysis.","type":"boolean"}},"description":"Paid Check input: exactly one of url or watch_id is required. Content rules are allowed only on the url path; watch_id always reuses saved rules. Optional previous_hash overrides the reference hash; max_age_seconds controls cache reuse and include_diff controls text-diff output.","oneOf":[{"required":["url"]},{"required":["watch_id"]}],"examples":[{"url":"https://example.com/docs","selector":"main","max_age_seconds":0,"include_diff":true}]},"example":{"url":"https://example.com/","include_diff":true}}}},"responses":{"200":{"description":"Paid result after confirmed settlement","headers":{"PAYMENT-RESPONSE":{"description":"Base64 x402 v2 settlement receipt","schema":{"type":"string"}},"Payment-Receipt":{"description":"Base64url native MPP EVM receipt; inspect status and reference. Not proof of prepaid finality.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckResult"}}}},"400":{"description":"Invalid request or disallowed target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required or rejected; never a sale. No paid data returned.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 requirements","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"403":{"description":"MCP Origin or staging access rejected","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Watch or snapshot not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Baseline incompatible or recovery pending/mismatched","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Paid response retention expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Input, target, stored document or output too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported target media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Selector not found, incompatible scope or complexity budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate, concurrency or daily operation budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Legacy core failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream or DNS failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service unavailable or settlement needs reconciliation; never automatically replace the payment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Target timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v2/prepaid/check":{"post":{"operationId":"fresh402_prepaid_check","summary":"Execute fresh402_check using the existing account credit balance","description":"Same input/output and durable debit as prepaid MCP. Credentials stay in HTTP. Failed reserved execution releases credits; no x402 fallback. Reuse the original tool, input, key, tariff and maximum for seven-day durable recovery through either transport.","security":[{"prepaidKey":[]}],"tags":["prepaid-execution"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{16,128}$"},"description":"Privately persisted operation identity, shared with fresh402/prepaid MCP metadata."},{"name":"X-Fresh402-Tariff-Version","in":"header","required":false,"schema":{"type":"integer","enum":[1,2,3]},"description":"Required for tariff 2/3 accounts: exact version returned by /v2/prepaid/quote; new customers use 3."},{"name":"X-Fresh402-Max-Credits","in":"header","required":false,"schema":{"type":"integer","minimum":0,"maximum":1000000000},"description":"Required for tariff 2/3 accounts. Explicit maximum at least the quoted fixed tool cost; bound immutably to the operation key."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"url":{"description":"Supply exactly one of url or watch_id. URL must be absolute public HTTPS on port 443, at most 4096 characters, with no credentials/private targets, e.g. 'https://example.com/docs'. Fresh402's own service URLs, including its discovery /openapi.json, cannot be targets; choose an external public document. With url, optional content rules identify the watch; an existing watch is reused or a new one is created by this paid Check. Separate registration is not required. No JavaScript rendering.","type":"string","maxLength":4096,"format":"uri","pattern":"^[Hh][Tt][Tt][Pp][Ss]://"},"watch_id":{"description":"Supply exactly one of watch_id or url. An existing ID returned by fresh402_register (free), POST /v1/register, or a URL-based Check: 'w_' followed by 32 lowercase hexadecimal characters. Reuses that watch's stored URL and rules. When supplied, omit selector, ignore_selectors and ignore_json_paths entirely, even empty arrays. Do not invent an ID.","type":"string","pattern":"^w_[a-f0-9]{32}$"},"selector":{"description":"Optional HTML CSS scope, 1-256 characters, e.g. 'main'; accepted only with url. Omit for the page after built-in noise removal. No match returns 422; not supported for JSON/plain text. With watch_id, omit this field: the saved selector is reused.","type":"string","minLength":1,"maxLength":256},"ignore_selectors":{"description":"Optional HTML-only exclusion array, up to 20 supported CSS selectors of 1-256 characters each, e.g. ['.timestamp']. Accepted only with url; default []. With watch_id, omit the field entirely (including []): saved exclusions are reused.","maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":256,"description":"HTML element(s) to remove before normalization: a supported CSS selector, 1-256 characters, e.g. '.timestamp' or 'nav'."}},"ignore_json_paths":{"description":"Optional JSON-only exclusions, up to 20 paths of 1-256 characters starting with '/'; '~0'/'~1' escapes and '*' segments are supported. Example: ['/updated_at']. Accepted only with url; default []. With watch_id, omit entirely (including []): saved paths are reused.","maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":256,"pattern":"^\\/","description":"JSON Pointer-style path, 1-256 characters, starting with '/'. Decode '~0' as '~' and '~1' as '/'; '*' matches all object keys or array elements. Example: '/items/*/updated_at'."}},"html_attributes":{"description":"Optional HTML-only watch rule: up to4 of href,title,alt,aria-label; default[] retains existing text-only normalization. Distinct names are sorted; nonempty rules create a separate version1 watch/baseline. Records bounded meaningful attributes within the saved selector or filtered page, including same-text link destination changes. Cannot be supplied with watch_id, even[]. Unsafe hrefs are hashed, never fetched. Limits:200 elements,2048 characters/value,32768 evidence bytes; excess fails, never clips silently.","maxItems":4,"type":"array","items":{"type":"string","enum":["alt","aria-label","href","title"],"description":"One explicitly observed HTML attribute: href (a/area only),title,alt or aria-label. No class/style/event attributes; links are inert evidence and never fetched."}},"previous_hash":{"description":"Optional previous Fresh402 content hash: exactly 64 hexadecimal characters, case-insensitive. Overrides comparison with the watch's current stored hash. Omit to use that stored hash; a new URL watch without a prior hash returns changed:null. Hash comparison does not require retained old text, but a text diff does; a hash cannot reconstruct missing content.","type":"string","pattern":"^[a-fA-F0-9]{64}$"},"max_age_seconds":{"description":"Optional integer cache age in seconds, 0-86400; runtime default: 0. A positive value permits reuse of a sufficiently recent watch result without fetching. Zero contacts the source (conditional HTTP may return 304). Cached Checks still require payment; this does not schedule background polling.","type":"integer","minimum":0,"maximum":86400},"include_diff":{"description":"Optional boolean; runtime default: true. Request a compact deterministic text diff when content changed and compatible prior text is retained. False omits the diff; true cannot recover unavailable old content and does not enable Smart Diff's structural analysis.","type":"boolean"}},"description":"Paid Check input: exactly one of url or watch_id is required. Content rules are allowed only on the url path; watch_id always reuses saved rules. Optional previous_hash overrides the reference hash; max_age_seconds controls cache reuse and include_diff controls text-diff output.","oneOf":[{"required":["url"]},{"required":["watch_id"]}],"examples":[{"url":"https://example.com/docs","selector":"main","max_age_seconds":0,"include_diff":true}]},"example":{"url":"https://example.com/","include_diff":true}}}},"responses":{"200":{"description":"Durable credit-paid result. X-Fresh402-Access=prepaid and X-Fresh402-Credits report the charged amount; replay never charges again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckResult"}}}},"400":{"description":"Invalid request or disallowed target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Prepaid HTTP credential required"},"402":{"description":"Insufficient spendable credits or missing tariff/maximum; no x402 submission"},"403":{"description":"MCP Origin or staging access rejected","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Watch or snapshot not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Baseline incompatible or recovery pending/mismatched","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Paid response retention expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Input, target, stored document or output too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported target media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Selector not found, incompatible scope or complexity budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate, concurrency or daily operation budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Legacy core failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream or DNS failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service unavailable or settlement needs reconciliation; never automatically replace the payment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Target timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v2/extract":{"post":{"operationId":"fresh402_extract","summary":"Extract readable text, metadata, headings, public links and embedded JSON-LD from one public HTTPS document. Use to read static HTML, JSON or plain text; no watch or prior registration is needed. Optional feed_mode:entries projects bounded RSS2/Atom IDs, declared links, timestamps, content fingerprints and indexed source evidence; omit for original XML-as-text behavior. No feed crawling or background subscription. Optional CSS scope, noise exclusions and exact JSON Pointer selection via json_pointer, or an ordered projection of up to8 fields via json_pointers (mutually exclusive; JSON only, any missing field returns422). One fetch/JSON parse with aggregate work/output limits. Omit json_pointer to retain full-document extraction. max_chars defaults to 20000 and limits returned text, not fetch size. Does not render JavaScript, crawl links or compare versions. $0.010 USDC per call on Base mainnet (eip155:8453), requiring an x402-capable MCP payment client and funded native-USDC payer. An ordinary MCP client receives a payment challenge. Alternatively use prepaid credits through REST or this MCP tool: X-Fresh402-API-Key in HTTP, with params._meta[\"fresh402/prepaid\"] containing idempotency_key, tariff_version and max_credits. When root mpp_payments.enabled is true, native MPP EVM charge is another option at the same USDC price: use an authorized Base EIP-712 signer and official mppx client, org.paymentauth/credential metadata and a persisted private recovery token. MPP receipt: org.paymentauth/receipt; see docs/MPP.md. Never combine MPP, prepaid and x402. Discover packages at /v2/prepaid/plans; see docs/AGENT_PREPAID.md for browserless wallet enrollment, bounded early credits and recovery. Optional Circle Gateway x402 is available only when root circle_gateway.enabled is true. Use the GatewayWalletBatched quote, a funded Base Gateway EOA and a persisted private recovery token. Pending batches return 409; replay the original proof/input/token after 60 seconds. Results require Gateway confirmed/completed evidence; never mix providers. No Circle prepaid funding. See docs/CIRCLE_GATEWAY.md.","description":"Use Extract to read one static public HTML, JSON or text URL without registering a watch; opt-in feed_mode:entries projects RSS2/Atom. Scope HTML with CSS, exclude noisy fields and bound returned text; no JavaScript rendering or linked-page crawling. Version comparisons belong to Check or Smart Diff. x402 $0.010 USDC on Base. Optional authenticated free-trial pilot: inspect GET /v2/trial before use. Send only X-Fresh402-Trial-Key and a persisted Idempotency-Key to this normal route or MCP HTTP transport. One-time quotas and finite capacity apply; replay the exact same input/key for seven days. Exhaustion never initiates a payment. Disabled trials reject execution.","tags":["extract"],"security":[{"x402Payment":[]},{"mppPayment":[]},{"trialKey":[]}],"x-payment-info":{"protocols":[{"x402":{}},{"mpp":{"method":"evm","intent":"charge"}}],"price":{"mode":"fixed","currency":"USD","amount":"0.01"}},"x-mcp-tool":"fresh402_extract","x-fresh402-tool":{"id":"extract","category":"extraction","limits":{"transfer_bytes":5000000,"decoded_bytes":5000000,"output_bytes":524288,"parser_characters":1000000,"gateway_timeout_ms":10000},"prepaid_credits":{"1":2,"2":2,"3":3},"network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","auth":"x402-or-prepaid","since":"2.0.0"},"parameters":[{"name":"X-Fresh402-Recovery-Token","in":"header","required":false,"schema":{"type":"string","minLength":43,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$"},"description":"Client-generated random 32-byte secret, encoded as hex/base64url. Persist before paying; retry identical input/payment/token for seven-day private recovery without another settlement. A public signature or transaction hash alone grants no recovery."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{16,128}$"},"description":"Required with a trial key: unique persisted key per logical operation. Reuse exact input/key for recovery; do not combine trial and payment credentials."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"url":{"type":"string","maxLength":4096,"format":"uri","description":"Required absolute public HTTPS document URL, at most 4096 characters, e.g. 'https://example.com/docs'. Only port 443; no embedded credentials, private/local targets or authenticated pages. Fresh402's own service URLs, including its discovery /openapi.json, cannot be targets; choose an external public document. HTML, JSON and plain text are supported; JavaScript is not executed. DNS, redirect and size limits also apply.","pattern":"^[Hh][Tt][Tt][Pp][Ss]://"},"selector":{"description":"Optional HTML CSS scope, 1-256 characters, e.g. 'article'. If omitted, choose main, then article, then body, then the document. Explicit scope must match (otherwise 422). Built-in noise and ignore_selectors are removed. Not supported for JSON/plain text.","type":"string","minLength":1,"maxLength":256},"ignore_selectors":{"description":"Optional array of up to 20 CSS selectors (each 1-256 characters) to remove from HTML in addition to built-in noise filtering. Default: no extra exclusions ([]). HTML only; use ignore_json_paths for JSON. Example: ['.timestamp', '.ad'].","maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":256,"description":"HTML element(s) to remove before normalization: a supported CSS selector, 1-256 characters, e.g. '.timestamp' or 'nav'."}},"ignore_json_paths":{"description":"Optional array of up to 20 JSON Pointer-style paths to remove before JSON normalization and hashing. Each must start with '/' and be 1-256 characters; supports '*' segments. Default: [] (no exclusions). JSON only. Example: ['/updated_at', '/items/*/request_id'].","maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":256,"pattern":"^\\/","description":"JSON Pointer-style path, 1-256 characters, starting with '/'. Decode '~0' as '~' and '~1' as '/'; '*' matches all object keys or array elements. Example: '/items/*/updated_at'."}},"feed_mode":{"description":"Optional RSS2/Atom projection: 'entries'. Omit for unchanged XML-as-text extraction and existing hashes. Accepts XML/+xml/text/plain with an RSS2 root or namespaced Atom feed; no RSS1/RDF, HTML repair, DTD or external entity/content fetching. Cannot combine with CSS/JSON selection or exclusions. Limits:262144 UTF-8 source bytes,4096 XML elements,depth32,100 entries,16384 characters/field,131072 projected bytes; excess fails explicitly. Returns feed identity, inert declared links, entry IDs/timestamps/content fingerprints and indexed source evidence. Identical duplicate entries deduplicate; conflicting IDs fail422. Feed text/hash cover the canonical projection; max_chars clips text and omits structured feed when clipped. Existing registration/watch semantics remain unchanged.","type":"string","const":"entries"},"json_pointer":{"description":"Optional exact RFC 6901 JSON Pointer, at most 256 characters, e.g. '/product/price' or '/items/0/name'. JSON documents only; '~0' means '~' and '~1' means '/'. Empty string selects the whole document. Omit to extract the entire normalized document. Selection runs after ignore_json_paths; a missing or excluded target returns 422. Array indices are zero-based canonical integers; '*' is a literal key, not a wildcard. Returned text/data/hash cover the selected value; max_chars and data_omitted still apply.","type":"string","maxLength":256,"pattern":"^(?:\\/(?:[^~]|~[01])*)?$"},"json_pointers":{"description":"Optional ordered1-8 unique exact JSON Pointers; mutually exclusive with json_pointer, JSON only. One fetch and JSON parse; exclusions run first. Any missing/excluded field fails the whole operation with422; null is a valid value. Returns data:[{pointer,value},...] and canonical aggregate text/hash. max_chars clips the aggregate; clipped data is omitted. Combined projection limited to200000 UTF-8 bytes and20000 nodes. Example:['/product/price','/product/stock'].","minItems":1,"maxItems":8,"type":"array","items":{"type":"string","maxLength":256,"pattern":"^(?:\\/(?:[^~]|~[01])*)?$","description":"One exact RFC6901 pointer: up to256 characters/64 segments; '' selects root, '/' the empty key, '~0'/'~1' escape '~'/'/'. Example:'/product/price'; '*' is literal."},"uniqueItems":true},"max_chars":{"default":20000,"description":"Optional integer limit on returned normalized text: 100-50000 characters, default 20000. Does not raise fetch/parser limits; the hash covers full normalized text before truncation. If JSON text is truncated, parsed data is omitted (data:null, data_omitted:true).","type":"integer","minimum":100,"maximum":50000},"include_links":{"default":true,"description":"Optional boolean, default true. Include bounded public links extracted from HTML. False returns an empty links array without changing normalized text or its hash. Does not crawl linked pages; JSON/plain text do not provide HTML links.","type":"boolean"},"include_structured_data":{"default":true,"description":"Optional boolean, default true. Include embedded JSON-LD extracted from HTML in structured_data. False returns an empty structured_data array. This does not control the parsed data field for a JSON document, and does not fetch external linked data.","type":"boolean"}},"required":["url"],"additionalProperties":false,"description":"Extract a required public URL without creating or requiring a watch. Optional content rules scope/remove noise; max_chars limits returned text and the two include flags control supplementary HTML data. Opt-in feed_mode:'entries' projects bounded RSS2/Atom; omit to preserve original extraction. Unknown fields are rejected.","not":{"required":["json_pointer","json_pointers"]},"allOf":[{"not":{"required":["feed_mode"],"anyOf":[{"required":["selector"]},{"required":["ignore_selectors"]},{"required":["ignore_json_paths"]},{"required":["json_pointer"]},{"required":["json_pointers"]}]}}],"examples":[{"url":"https://example.com/docs","selector":"main","max_chars":20000,"include_links":true,"include_structured_data":false}]},"example":{"url":"https://example.com/","max_chars":20000}}}},"responses":{"200":{"description":"Paid result after confirmed settlement","headers":{"PAYMENT-RESPONSE":{"description":"Base64 x402 v2 settlement receipt","schema":{"type":"string"}},"Payment-Receipt":{"description":"Base64url native MPP EVM receipt; inspect status and reference. Not proof of prepaid finality.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtractResult"}}}},"400":{"description":"Invalid request or disallowed target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required or rejected; never a sale. No paid data returned.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 requirements","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"403":{"description":"MCP Origin or staging access rejected","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Watch or snapshot not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Baseline incompatible or recovery pending/mismatched","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Paid response retention expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Input, target, stored document or output too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported target media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Selector not found, incompatible scope or complexity budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate, concurrency or daily operation budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Legacy core failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream or DNS failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service unavailable or settlement needs reconciliation; never automatically replace the payment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Target timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v2/prepaid/extract":{"post":{"operationId":"fresh402_prepaid_extract","summary":"Execute fresh402_extract using the existing account credit balance","description":"Same input/output and durable debit as prepaid MCP. Credentials stay in HTTP. Failed reserved execution releases credits; no x402 fallback. Reuse the original tool, input, key, tariff and maximum for seven-day durable recovery through either transport.","security":[{"prepaidKey":[]}],"tags":["prepaid-execution"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{16,128}$"},"description":"Privately persisted operation identity, shared with fresh402/prepaid MCP metadata."},{"name":"X-Fresh402-Tariff-Version","in":"header","required":false,"schema":{"type":"integer","enum":[1,2,3]},"description":"Required for tariff 2/3 accounts: exact version returned by /v2/prepaid/quote; new customers use 3."},{"name":"X-Fresh402-Max-Credits","in":"header","required":false,"schema":{"type":"integer","minimum":0,"maximum":1000000000},"description":"Required for tariff 2/3 accounts. Explicit maximum at least the quoted fixed tool cost; bound immutably to the operation key."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"url":{"type":"string","maxLength":4096,"format":"uri","description":"Required absolute public HTTPS document URL, at most 4096 characters, e.g. 'https://example.com/docs'. Only port 443; no embedded credentials, private/local targets or authenticated pages. Fresh402's own service URLs, including its discovery /openapi.json, cannot be targets; choose an external public document. HTML, JSON and plain text are supported; JavaScript is not executed. DNS, redirect and size limits also apply.","pattern":"^[Hh][Tt][Tt][Pp][Ss]://"},"selector":{"description":"Optional HTML CSS scope, 1-256 characters, e.g. 'article'. If omitted, choose main, then article, then body, then the document. Explicit scope must match (otherwise 422). Built-in noise and ignore_selectors are removed. Not supported for JSON/plain text.","type":"string","minLength":1,"maxLength":256},"ignore_selectors":{"description":"Optional array of up to 20 CSS selectors (each 1-256 characters) to remove from HTML in addition to built-in noise filtering. Default: no extra exclusions ([]). HTML only; use ignore_json_paths for JSON. Example: ['.timestamp', '.ad'].","maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":256,"description":"HTML element(s) to remove before normalization: a supported CSS selector, 1-256 characters, e.g. '.timestamp' or 'nav'."}},"ignore_json_paths":{"description":"Optional array of up to 20 JSON Pointer-style paths to remove before JSON normalization and hashing. Each must start with '/' and be 1-256 characters; supports '*' segments. Default: [] (no exclusions). JSON only. Example: ['/updated_at', '/items/*/request_id'].","maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":256,"pattern":"^\\/","description":"JSON Pointer-style path, 1-256 characters, starting with '/'. Decode '~0' as '~' and '~1' as '/'; '*' matches all object keys or array elements. Example: '/items/*/updated_at'."}},"feed_mode":{"description":"Optional RSS2/Atom projection: 'entries'. Omit for unchanged XML-as-text extraction and existing hashes. Accepts XML/+xml/text/plain with an RSS2 root or namespaced Atom feed; no RSS1/RDF, HTML repair, DTD or external entity/content fetching. Cannot combine with CSS/JSON selection or exclusions. Limits:262144 UTF-8 source bytes,4096 XML elements,depth32,100 entries,16384 characters/field,131072 projected bytes; excess fails explicitly. Returns feed identity, inert declared links, entry IDs/timestamps/content fingerprints and indexed source evidence. Identical duplicate entries deduplicate; conflicting IDs fail422. Feed text/hash cover the canonical projection; max_chars clips text and omits structured feed when clipped. Existing registration/watch semantics remain unchanged.","type":"string","const":"entries"},"json_pointer":{"description":"Optional exact RFC 6901 JSON Pointer, at most 256 characters, e.g. '/product/price' or '/items/0/name'. JSON documents only; '~0' means '~' and '~1' means '/'. Empty string selects the whole document. Omit to extract the entire normalized document. Selection runs after ignore_json_paths; a missing or excluded target returns 422. Array indices are zero-based canonical integers; '*' is a literal key, not a wildcard. Returned text/data/hash cover the selected value; max_chars and data_omitted still apply.","type":"string","maxLength":256,"pattern":"^(?:\\/(?:[^~]|~[01])*)?$"},"json_pointers":{"description":"Optional ordered1-8 unique exact JSON Pointers; mutually exclusive with json_pointer, JSON only. One fetch and JSON parse; exclusions run first. Any missing/excluded field fails the whole operation with422; null is a valid value. Returns data:[{pointer,value},...] and canonical aggregate text/hash. max_chars clips the aggregate; clipped data is omitted. Combined projection limited to200000 UTF-8 bytes and20000 nodes. Example:['/product/price','/product/stock'].","minItems":1,"maxItems":8,"type":"array","items":{"type":"string","maxLength":256,"pattern":"^(?:\\/(?:[^~]|~[01])*)?$","description":"One exact RFC6901 pointer: up to256 characters/64 segments; '' selects root, '/' the empty key, '~0'/'~1' escape '~'/'/'. Example:'/product/price'; '*' is literal."},"uniqueItems":true},"max_chars":{"default":20000,"description":"Optional integer limit on returned normalized text: 100-50000 characters, default 20000. Does not raise fetch/parser limits; the hash covers full normalized text before truncation. If JSON text is truncated, parsed data is omitted (data:null, data_omitted:true).","type":"integer","minimum":100,"maximum":50000},"include_links":{"default":true,"description":"Optional boolean, default true. Include bounded public links extracted from HTML. False returns an empty links array without changing normalized text or its hash. Does not crawl linked pages; JSON/plain text do not provide HTML links.","type":"boolean"},"include_structured_data":{"default":true,"description":"Optional boolean, default true. Include embedded JSON-LD extracted from HTML in structured_data. False returns an empty structured_data array. This does not control the parsed data field for a JSON document, and does not fetch external linked data.","type":"boolean"}},"required":["url"],"additionalProperties":false,"description":"Extract a required public URL without creating or requiring a watch. Optional content rules scope/remove noise; max_chars limits returned text and the two include flags control supplementary HTML data. Opt-in feed_mode:'entries' projects bounded RSS2/Atom; omit to preserve original extraction. Unknown fields are rejected.","not":{"required":["json_pointer","json_pointers"]},"allOf":[{"not":{"required":["feed_mode"],"anyOf":[{"required":["selector"]},{"required":["ignore_selectors"]},{"required":["ignore_json_paths"]},{"required":["json_pointer"]},{"required":["json_pointers"]}]}}],"examples":[{"url":"https://example.com/docs","selector":"main","max_chars":20000,"include_links":true,"include_structured_data":false}]},"example":{"url":"https://example.com/","max_chars":20000}}}},"responses":{"200":{"description":"Durable credit-paid result. X-Fresh402-Access=prepaid and X-Fresh402-Credits report the charged amount; replay never charges again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtractResult"}}}},"400":{"description":"Invalid request or disallowed target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Prepaid HTTP credential required"},"402":{"description":"Insufficient spendable credits or missing tariff/maximum; no x402 submission"},"403":{"description":"MCP Origin or staging access rejected","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Watch or snapshot not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Baseline incompatible or recovery pending/mismatched","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Paid response retention expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Input, target, stored document or output too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported target media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Selector not found, incompatible scope or complexity budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate, concurrency or daily operation budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Legacy core failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream or DNS failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service unavailable or settlement needs reconciliation; never automatically replace the payment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Target timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v2/smart-diff":{"post":{"operationId":"fresh402_smart_diff","summary":"Explain structured changes in a registered public document: JSON Pointer changes, HTML block changes and deterministic significance hints. Use instead of Check when a changed/unchanged flag or short text diff is insufficient. First obtain watch_id with free fresh402_register; saved URL/rules are reused. compare_to is previous (default) or baseline; previous_hash overrides it when the same-watch snapshot is retained. Up to200 content changes; explicit json_array_keys match unique typed item identities and report moves separately, with pure reorder unchanged and source hashes still order-sensitive. Saved html_attributes rules compare selected links/attributes independently of visible text. Omit new options for existing index/text behavior. Legacy HTML may have text-only fidelity. No LLM, JavaScript rendering or complete API compatibility guarantee. $0.015 USDC per call on Base mainnet (eip155:8453); requires an x402-capable MCP payment client and funded native-USDC payer, otherwise returns a payment challenge. Alternatively use prepaid credits through REST or this MCP tool: X-Fresh402-API-Key in HTTP, with params._meta[\"fresh402/prepaid\"] containing idempotency_key, tariff_version and max_credits. When root mpp_payments.enabled is true, native MPP EVM charge is another option at the same USDC price: use an authorized Base EIP-712 signer and official mppx client, org.paymentauth/credential metadata and a persisted private recovery token. MPP receipt: org.paymentauth/receipt; see docs/MPP.md. Never combine MPP, prepaid and x402. Discover packages at /v2/prepaid/plans; see docs/AGENT_PREPAID.md for browserless wallet enrollment, bounded early credits and recovery. Optional Circle Gateway x402 is available only when root circle_gateway.enabled is true. Use the GatewayWalletBatched quote, a funded Base Gateway EOA and a persisted private recovery token. Pending batches return 409; replay the original proof/input/token after 60 seconds. Results require Gateway confirmed/completed evidence; never mix providers. No Circle prepaid funding. See docs/CIRCLE_GATEWAY.md.","description":"Use Smart Diff for structured document changes and rule-based significance evidence after free registration. Compare against the previous snapshot, fixed baseline or an available same-watch hash. Saved scope is reused; legacy HTML can lack structure. Not an API compatibility proof. x402 $0.015 USDC on Base. Optional authenticated free-trial pilot: inspect GET /v2/trial before use. Send only X-Fresh402-Trial-Key and a persisted Idempotency-Key to this normal route or MCP HTTP transport. One-time quotas and finite capacity apply; replay the exact same input/key for seven days. Exhaustion never initiates a payment. Disabled trials reject execution.","tags":["smart_diff"],"security":[{"x402Payment":[]},{"mppPayment":[]},{"trialKey":[]}],"x-payment-info":{"protocols":[{"x402":{}},{"mpp":{"method":"evm","intent":"charge"}}],"price":{"mode":"fixed","currency":"USD","amount":"0.015"}},"x-mcp-tool":"fresh402_smart_diff","x-fresh402-tool":{"id":"smart_diff","category":"document-diff","limits":{"transfer_bytes":5000000,"decoded_bytes":5000000,"output_bytes":524288,"parser_characters":1000000,"gateway_timeout_ms":10000},"prepaid_credits":{"1":3,"2":3,"3":4},"network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","auth":"x402-or-prepaid","since":"2.0.0"},"parameters":[{"name":"X-Fresh402-Recovery-Token","in":"header","required":false,"schema":{"type":"string","minLength":43,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$"},"description":"Client-generated random 32-byte secret, encoded as hex/base64url. Persist before paying; retry identical input/payment/token for seven-day private recovery without another settlement. A public signature or transaction hash alone grants no recovery."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{16,128}$"},"description":"Required with a trial key: unique persisted key per logical operation. Reuse exact input/key for recovery; do not combine trial and payment credentials."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"watch_id":{"type":"string","pattern":"^w_[a-f0-9]{32}$","description":"Required existing watch ID: 'w_' plus 32 lowercase hexadecimal characters, returned by free fresh402_register or POST /v1/register (a URL-based Check can also create it). Reuses the saved public URL and content rules; do not pass url or new rules here. Replace illustrative IDs with a real returned ID before paying."},"compare_to":{"default":"previous","description":"Optional comparison mode: 'previous' (default) uses the latest Smart Diff snapshot, falling back to the current registered watch state on the first call. 'baseline' uses the fixed Smart Diff baseline, initially seeded from the earliest retained compatible watch snapshot. previous_hash overrides either mode. 'hash' is a result label, not an accepted input value.","type":"string","enum":["previous","baseline"]},"previous_hash":{"description":"Optional explicit reference hash: 64 hexadecimal characters, case-insensitive, from this same watch's retained Smart Diff snapshot, fixed baseline or retained registration/Check snapshot. Overrides compare_to. Unknown or pruned hashes return 404; recent snapshot history is limited to 20 per store, with the fixed Smart Diff baseline retained separately. Omit for the selected mode.","type":"string","pattern":"^[a-fA-F0-9]{64}$"},"json_array_keys":{"description":"Optional1-4 explicit nonoverlapping JSON array identity rules, JSON only. Omit for existing index comparison. Matches unique typed scalar keys, reports moves separately from content changes; pure reorder is changed:false while source hashes remain order-sensitive. At most2000 combined array items/20000 comparison work units, no fallback for ambiguity. Rules affect this comparison only, not the watch/hash; persist identical input for payment recovery. Example:[{path:'/items',key:'/id'}].","minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"path":{"type":"string","maxLength":256,"pattern":"^(?:\\/(?:[^~]|~[01])*)?$","description":"Exact RFC6901 pointer to an array on both compared JSON documents, up to256 characters/64 segments. Empty string selects a root array. Example:'/items'; no wildcards or automatic ID guessing."},"key":{"type":"string","minLength":1,"maxLength":256,"pattern":"^(?:\\/(?:[^~]|~[01])*)?$","description":"Nonempty exact RFC6901 pointer within each object item, up to256 characters/64 segments; e.g.'/id' or '/product/sku'. Every key must exist and be a unique nonempty string<=256 characters or safe integer; number1 differs from string'1'."}},"required":["path","key"],"additionalProperties":false,"description":"Explicit JSON array identity rule. Both paths must resolve; missing/duplicate/invalid identities fail422 without index fallback. Source snapshot ordering/hash is retained."}}},"required":["watch_id"],"additionalProperties":false,"description":"Compare a required existing watch against previous or baseline (default previous), or use previous_hash to override the mode. Fetches the current source using saved rules; no cache-age option. Truncated or incompatible legacy baselines can return 409; legacy HTML may have text-only fidelity. Unknown fields are rejected."},"example":{"watch_id":"w_0123456789abcdef0123456789abcdef","compare_to":"previous"}}}},"responses":{"200":{"description":"Paid result after confirmed settlement","headers":{"PAYMENT-RESPONSE":{"description":"Base64 x402 v2 settlement receipt","schema":{"type":"string"}},"Payment-Receipt":{"description":"Base64url native MPP EVM receipt; inspect status and reference. Not proof of prepaid finality.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SmartDiffResult"}}}},"400":{"description":"Invalid request or disallowed target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required or rejected; never a sale. No paid data returned.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 requirements","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"403":{"description":"MCP Origin or staging access rejected","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Watch or snapshot not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Baseline incompatible or recovery pending/mismatched","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Paid response retention expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Input, target, stored document or output too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported target media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Selector not found, incompatible scope or complexity budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate, concurrency or daily operation budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Legacy core failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream or DNS failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service unavailable or settlement needs reconciliation; never automatically replace the payment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Target timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v2/prepaid/smart-diff":{"post":{"operationId":"fresh402_prepaid_smart_diff","summary":"Execute fresh402_smart_diff using the existing account credit balance","description":"Same input/output and durable debit as prepaid MCP. Credentials stay in HTTP. Failed reserved execution releases credits; no x402 fallback. Reuse the original tool, input, key, tariff and maximum for seven-day durable recovery through either transport.","security":[{"prepaidKey":[]}],"tags":["prepaid-execution"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{16,128}$"},"description":"Privately persisted operation identity, shared with fresh402/prepaid MCP metadata."},{"name":"X-Fresh402-Tariff-Version","in":"header","required":false,"schema":{"type":"integer","enum":[1,2,3]},"description":"Required for tariff 2/3 accounts: exact version returned by /v2/prepaid/quote; new customers use 3."},{"name":"X-Fresh402-Max-Credits","in":"header","required":false,"schema":{"type":"integer","minimum":0,"maximum":1000000000},"description":"Required for tariff 2/3 accounts. Explicit maximum at least the quoted fixed tool cost; bound immutably to the operation key."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"watch_id":{"type":"string","pattern":"^w_[a-f0-9]{32}$","description":"Required existing watch ID: 'w_' plus 32 lowercase hexadecimal characters, returned by free fresh402_register or POST /v1/register (a URL-based Check can also create it). Reuses the saved public URL and content rules; do not pass url or new rules here. Replace illustrative IDs with a real returned ID before paying."},"compare_to":{"default":"previous","description":"Optional comparison mode: 'previous' (default) uses the latest Smart Diff snapshot, falling back to the current registered watch state on the first call. 'baseline' uses the fixed Smart Diff baseline, initially seeded from the earliest retained compatible watch snapshot. previous_hash overrides either mode. 'hash' is a result label, not an accepted input value.","type":"string","enum":["previous","baseline"]},"previous_hash":{"description":"Optional explicit reference hash: 64 hexadecimal characters, case-insensitive, from this same watch's retained Smart Diff snapshot, fixed baseline or retained registration/Check snapshot. Overrides compare_to. Unknown or pruned hashes return 404; recent snapshot history is limited to 20 per store, with the fixed Smart Diff baseline retained separately. Omit for the selected mode.","type":"string","pattern":"^[a-fA-F0-9]{64}$"},"json_array_keys":{"description":"Optional1-4 explicit nonoverlapping JSON array identity rules, JSON only. Omit for existing index comparison. Matches unique typed scalar keys, reports moves separately from content changes; pure reorder is changed:false while source hashes remain order-sensitive. At most2000 combined array items/20000 comparison work units, no fallback for ambiguity. Rules affect this comparison only, not the watch/hash; persist identical input for payment recovery. Example:[{path:'/items',key:'/id'}].","minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"path":{"type":"string","maxLength":256,"pattern":"^(?:\\/(?:[^~]|~[01])*)?$","description":"Exact RFC6901 pointer to an array on both compared JSON documents, up to256 characters/64 segments. Empty string selects a root array. Example:'/items'; no wildcards or automatic ID guessing."},"key":{"type":"string","minLength":1,"maxLength":256,"pattern":"^(?:\\/(?:[^~]|~[01])*)?$","description":"Nonempty exact RFC6901 pointer within each object item, up to256 characters/64 segments; e.g.'/id' or '/product/sku'. Every key must exist and be a unique nonempty string<=256 characters or safe integer; number1 differs from string'1'."}},"required":["path","key"],"additionalProperties":false,"description":"Explicit JSON array identity rule. Both paths must resolve; missing/duplicate/invalid identities fail422 without index fallback. Source snapshot ordering/hash is retained."}}},"required":["watch_id"],"additionalProperties":false,"description":"Compare a required existing watch against previous or baseline (default previous), or use previous_hash to override the mode. Fetches the current source using saved rules; no cache-age option. Truncated or incompatible legacy baselines can return 409; legacy HTML may have text-only fidelity. Unknown fields are rejected."},"example":{"watch_id":"w_0123456789abcdef0123456789abcdef","compare_to":"previous"}}}},"responses":{"200":{"description":"Durable credit-paid result. X-Fresh402-Access=prepaid and X-Fresh402-Credits report the charged amount; replay never charges again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SmartDiffResult"}}}},"400":{"description":"Invalid request or disallowed target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Prepaid HTTP credential required"},"402":{"description":"Insufficient spendable credits or missing tariff/maximum; no x402 submission"},"403":{"description":"MCP Origin or staging access rejected","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Watch or snapshot not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Baseline incompatible or recovery pending/mismatched","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Paid response retention expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Input, target, stored document or output too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported target media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Selector not found, incompatible scope or complexity budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate, concurrency or daily operation budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Legacy core failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream or DNS failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service unavailable or settlement needs reconciliation; never automatically replace the payment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Target timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v2/openapi-contract-diff":{"post":{"operationId":"fresh402_openapi_contract_diff","summary":"Detect bounded directional compatibility evidence in a public JSON OpenAPI3.0/3.1 contract: paths/methods, required fields, supported scalar type/enum/null domains, and effective authentication alternatives/scopes. Request acceptance and response guarantees have opposite compatibility directions. Complex schema composition, custom dialects, ambiguous visibility and unexpanded references remain review/unknown; no general satisfiability or compatibility proof. Use for API contract review; Smart Diff is for general documents. First register the contract URL with free fresh402_register, without selectors or ignore rules, then reuse watch_id. compare_to accepts previous (default) or baseline; an available same-watch previous_hash overrides it. Limits include 256000 decoded document bytes, 100 paths and 500 operations. No YAML, external reference fetching, API-operation execution, LLM or complete compatibility guarantee. $0.020 USDC per call on Base mainnet (eip155:8453); requires an x402-capable MCP payment client and funded native-USDC payer, otherwise returns a payment challenge. Alternatively use prepaid credits through REST or this MCP tool: X-Fresh402-API-Key in HTTP, with params._meta[\"fresh402/prepaid\"] containing idempotency_key, tariff_version and max_credits. When root mpp_payments.enabled is true, native MPP EVM charge is another option at the same USDC price: use an authorized Base EIP-712 signer and official mppx client, org.paymentauth/credential metadata and a persisted private recovery token. MPP receipt: org.paymentauth/receipt; see docs/MPP.md. Never combine MPP, prepaid and x402. Discover packages at /v2/prepaid/plans; see docs/AGENT_PREPAID.md for browserless wallet enrollment, bounded early credits and recovery. Optional Circle Gateway x402 is available only when root circle_gateway.enabled is true. Use the GatewayWalletBatched quote, a funded Base Gateway EOA and a persisted private recovery token. Pending batches return 409; replay the original proof/input/token after 60 seconds. Results require Gateway confirmed/completed evidence; never mix providers. No Circle prepaid funding. See docs/CIRCLE_GATEWAY.md.","description":"Use for conservative OpenAPI 3.0/3.1 JSON compatibility evidence after unfiltered free registration. Compare previous or fixed baseline, or override with an available same-watch hash. Bounded path/operation analysis with uncertainty warnings; no YAML, external reference fetch or execution of described operations. x402 $0.020 USDC on Base. Optional authenticated free-trial pilot: inspect GET /v2/trial before use. Send only X-Fresh402-Trial-Key and a persisted Idempotency-Key to this normal route or MCP HTTP transport. One-time quotas and finite capacity apply; replay the exact same input/key for seven days. Exhaustion never initiates a payment. Disabled trials reject execution.","tags":["openapi_diff"],"security":[{"x402Payment":[]},{"mppPayment":[]},{"trialKey":[]}],"x-payment-info":{"protocols":[{"x402":{}},{"mpp":{"method":"evm","intent":"charge"}}],"price":{"mode":"fixed","currency":"USD","amount":"0.020"}},"x-mcp-tool":"fresh402_openapi_contract_diff","x-fresh402-tool":{"id":"openapi_diff","category":"api-contract-diff","limits":{"transfer_bytes":5000000,"decoded_bytes":5000000,"output_bytes":131072,"parser_characters":256000,"gateway_timeout_ms":10000,"document_bytes":256000,"paths":100,"operations":500,"work":20000,"ref_hops":32,"ref_resolutions":2048,"changes":200},"prepaid_credits":{"3":5},"network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","auth":"x402-or-prepaid","since":"2.2.0"},"parameters":[{"name":"X-Fresh402-Recovery-Token","in":"header","required":false,"schema":{"type":"string","minLength":43,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$"},"description":"Client-generated random 32-byte secret, encoded as hex/base64url. Persist before paying; retry identical input/payment/token for seven-day private recovery without another settlement. A public signature or transaction hash alone grants no recovery."},{"name":"X-Fresh402-Contract-Scope","in":"header","required":false,"schema":{"type":"string","maxLength":4096},"description":"Optional contract-impact-v1 response view. JSON array of 1–64 exact OpenAPI path templates and lowercase HTTP methods (get, put, post, delete, options, head, patch, trace); header ≤4096 ASCII characters, each path ≤512 characters. Example: [{\"path\":\"/items/{id}\",\"method\":\"get\"}]. Only affects this response, never payment identity or saved evidence. Full document counts/provenance/assumptions remain; changes contains selected and shared/unknown evidence with original indexes. Omit on ORIGINAL proof/key recovery to retrieve the full durable result without a new operation. Warnings/truncation still require review. Also supported on MCP tools/call for fresh402_openapi_contract_diff via the HTTP transport header."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{16,128}$"},"description":"Required with a trial key: unique persisted key per logical operation. Reuse exact input/key for recovery; do not combine trial and payment credentials."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"watch_id":{"type":"string","pattern":"^w_[a-f0-9]{32}$","description":"Required existing watch ID: 'w_' plus 32 lowercase hexadecimal characters. Obtain it with free fresh402_register or POST /v1/register using the public JSON OpenAPI 3.0/3.1 URL and no selector or ignore rules. Reuses the saved URL; do not pass url here. YAML, non-OpenAPI documents and scoped/filtered watches are unsupported. Illustrative IDs must be replaced."},"compare_to":{"default":"previous","description":"Optional mode: 'previous' (default) compares with the latest saved OpenAPI Contract Diff snapshot; 'baseline' uses its fixed saved baseline. Before contract history exists, the current registered watch state seeds the initial baseline. previous_hash overrides the mode. 'hash' appears only in results, not as an accepted input mode.","type":"string","enum":["previous","baseline"]},"previous_hash":{"description":"Optional 64-character hexadecimal reference hash, case-insensitive. Prefer a hash returned by OpenAPI Contract Diff for this same watch, matching a retained contract snapshot or fixed baseline. The current registered core hash is also accepted as a fallback: without a matching contract snapshot, the fixed baseline (or registered state if no baseline exists) is used. Overrides compare_to; unavailable hashes return 404. Omit to use the selected mode.","type":"string","pattern":"^[a-fA-F0-9]{64}$"}},"required":["watch_id"],"additionalProperties":false,"description":"Compare a registered, unfiltered public JSON OpenAPI 3.0/3.1 contract; watch_id is required, compare_to defaults to previous, and optional previous_hash overrides it. Bounded structural analysis, not a complete compatibility proof; no YAML, external reference fetching or execution of described API operations. Unknown fields are rejected."},"example":{"watch_id":"w_0123456789abcdef0123456789abcdef","compare_to":"previous"}}}},"responses":{"200":{"description":"Paid result after confirmed settlement","headers":{"PAYMENT-RESPONSE":{"description":"Base64 x402 v2 settlement receipt","schema":{"type":"string"}},"Payment-Receipt":{"description":"Base64url native MPP EVM receipt; inspect status and reference. Not proof of prepaid finality.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenApiDiffResult"}}}},"400":{"description":"Invalid request or disallowed target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required or rejected; never a sale. No paid data returned.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 requirements","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"403":{"description":"MCP Origin or staging access rejected","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Watch or snapshot not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Baseline incompatible or recovery pending/mismatched","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Paid response retention expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Input, target, stored document or output too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported target media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Selector not found, incompatible scope or complexity budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate, concurrency or daily operation budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Legacy core failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream or DNS failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service unavailable or settlement needs reconciliation; never automatically replace the payment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Target timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v2/prepaid/openapi-contract-diff":{"post":{"operationId":"fresh402_prepaid_openapi_diff","summary":"Execute fresh402_openapi_contract_diff using the existing account credit balance","description":"Same input/output and durable debit as prepaid MCP. Credentials stay in HTTP. Failed reserved execution releases credits; no x402 fallback. Reuse the original tool, input, key, tariff and maximum for seven-day durable recovery through either transport.","security":[{"prepaidKey":[]}],"tags":["prepaid-execution"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{16,128}$"},"description":"Privately persisted operation identity, shared with fresh402/prepaid MCP metadata."},{"name":"X-Fresh402-Tariff-Version","in":"header","required":false,"schema":{"type":"integer","enum":[1,2,3]},"description":"Required for tariff 2/3 accounts: exact version returned by /v2/prepaid/quote; new customers use 3."},{"name":"X-Fresh402-Max-Credits","in":"header","required":false,"schema":{"type":"integer","minimum":0,"maximum":1000000000},"description":"Required for tariff 2/3 accounts. Explicit maximum at least the quoted fixed tool cost; bound immutably to the operation key."},{"name":"X-Fresh402-Contract-Scope","in":"header","required":false,"schema":{"type":"string","maxLength":4096},"description":"Optional contract-impact-v1 response view. JSON array of 1–64 exact OpenAPI path templates and lowercase HTTP methods (get, put, post, delete, options, head, patch, trace); header ≤4096 ASCII characters, each path ≤512 characters. Example: [{\"path\":\"/items/{id}\",\"method\":\"get\"}]. Only affects this response, never payment identity or saved evidence. Full document counts/provenance/assumptions remain; changes contains selected and shared/unknown evidence with original indexes. Omit on ORIGINAL proof/key recovery to retrieve the full durable result without a new operation. Warnings/truncation still require review. Also supported on MCP tools/call for fresh402_openapi_contract_diff via the HTTP transport header."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"watch_id":{"type":"string","pattern":"^w_[a-f0-9]{32}$","description":"Required existing watch ID: 'w_' plus 32 lowercase hexadecimal characters. Obtain it with free fresh402_register or POST /v1/register using the public JSON OpenAPI 3.0/3.1 URL and no selector or ignore rules. Reuses the saved URL; do not pass url here. YAML, non-OpenAPI documents and scoped/filtered watches are unsupported. Illustrative IDs must be replaced."},"compare_to":{"default":"previous","description":"Optional mode: 'previous' (default) compares with the latest saved OpenAPI Contract Diff snapshot; 'baseline' uses its fixed saved baseline. Before contract history exists, the current registered watch state seeds the initial baseline. previous_hash overrides the mode. 'hash' appears only in results, not as an accepted input mode.","type":"string","enum":["previous","baseline"]},"previous_hash":{"description":"Optional 64-character hexadecimal reference hash, case-insensitive. Prefer a hash returned by OpenAPI Contract Diff for this same watch, matching a retained contract snapshot or fixed baseline. The current registered core hash is also accepted as a fallback: without a matching contract snapshot, the fixed baseline (or registered state if no baseline exists) is used. Overrides compare_to; unavailable hashes return 404. Omit to use the selected mode.","type":"string","pattern":"^[a-fA-F0-9]{64}$"}},"required":["watch_id"],"additionalProperties":false,"description":"Compare a registered, unfiltered public JSON OpenAPI 3.0/3.1 contract; watch_id is required, compare_to defaults to previous, and optional previous_hash overrides it. Bounded structural analysis, not a complete compatibility proof; no YAML, external reference fetching or execution of described API operations. Unknown fields are rejected."},"example":{"watch_id":"w_0123456789abcdef0123456789abcdef","compare_to":"previous"}}}},"responses":{"200":{"description":"Durable credit-paid result. X-Fresh402-Access=prepaid and X-Fresh402-Credits report the charged amount; replay never charges again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenApiDiffResult"}}}},"400":{"description":"Invalid request or disallowed target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Prepaid HTTP credential required"},"402":{"description":"Insufficient spendable credits or missing tariff/maximum; no x402 submission"},"403":{"description":"MCP Origin or staging access rejected","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Watch or snapshot not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Baseline incompatible or recovery pending/mismatched","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Paid response retention expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Input, target, stored document or output too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported target media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Selector not found, incompatible scope or complexity budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate, concurrency or daily operation budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Legacy core failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream or DNS failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service unavailable or settlement needs reconciliation; never automatically replace the payment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Target timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v3/contract-watch":{"post":{"operationId":"fresh402_contract_watch","summary":"Observe code, standard proxy slots, common getters, explicitly selected storage/ABI and bounded selected events at one finalized Base address; optionally compare an owned prior snapshot. Selected single-provider evidence only; unknown controls remain unknown. Commercial input binds to the original x402/MPP/prepaid request and REQUIRED random32-byte private recovery token for x402/MPP. REST sends X-Fresh402-Recovery-Token; MCP sends params._meta['fresh402/recovery-token']. Persist the secret with the original proof/input before authorizing. No client request_id; recovery reuses the original result with no new RPC or debit. Provider failure/partial scan never becomes a paid success. A confirmed paid response with observation_saved=false and persistence_error is pending domain finalization: keep original proof/input/token, retry recovery only, and do not use returned snapshot/cursor IDs until saved flags become true. $0.010000 USDC on Base per call; use an approved compatible payment client. Prepaid requires eligible finalized all-service credits or an original explicit service-specific tariff4 grant; inspect authenticated /v3/prepaid/quote/contract_watch. Historical web package terms remain unchanged. Records retain30days; original private financial recovery retains7days. Server-side provider approval and published tariff gates apply; paying agents do not need their own RPC credentials or an operator-created grant when eligible all-service credits are available. Read /v3/prepaid/all-services and accept its exact terms before a new all-service purchase.","description":"Observe code, standard proxy slots, common getters, explicitly selected storage/ABI and bounded selected events at one finalized Base address; optionally compare an owned prior snapshot. Selected single-provider evidence only; unknown controls remain unknown. Optional separate machine trial: inspect /v3/agent-trial; send only X-Fresh402-Trial-Key and persisted Idempotency-Key. Finite allowance/admission; no payment fallback.","tags":["contract_watch"],"security":[{"x402Payment":[]},{"mppPayment":[]},{"trialKey":[]}],"x-payment-info":{"protocols":[{"x402":{}},{"mpp":{"method":"evm","intent":"charge"}}],"price":{"mode":"fixed","currency":"USD","amount":"0.010000"}},"x-mcp-tool":"fresh402_contract_watch","x-fresh402-tool":{"id":"contract_watch","category":"blockchain-observation","limits":{"transfer_bytes":1048576,"decoded_bytes":4194304,"output_bytes":524288,"parser_characters":1048576,"gateway_timeout_ms":20000},"prepaid_credits":{"4":4},"network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","auth":"x402-or-mpp-or-prepaid","since":"2.7.1"},"parameters":[{"name":"X-Fresh402-Recovery-Token","in":"header","required":true,"schema":{"type":"string","minLength":43,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$"},"description":"Client-generated random 32-byte secret, encoded as hex/base64url. Persist before paying; retry identical input/payment/token for seven-day private recovery without another settlement. A public signature or transaction hash alone grants no recovery."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{16,128}$"},"description":"Required with a trial key: unique persisted key per logical operation. Reuse exact input/key for recovery; do not combine trial and payment credentials."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"chain_id":{"type":"number","const":8453,"description":"Base mainnet only; returned provider chain must match."},"address":{"description":"20-byte Ethereum address; lowercase/uppercase accepted, mixed case must have a valid EIP-55 checksum. Normalized to checksummed form.","type":"string","minLength":42,"maxLength":42,"pattern":"^0x[a-fA-F0-9]{40}$"},"block":{"default":"finalized","description":"Finalized only. Every state read pins the selected block hash with requireCanonical:true; no latest/number fallback.","type":"string","const":"finalized"},"previous_snapshot":{"description":"Optional owned snapshot_id from a successful saved contract_watch result, retained for30days. Same payer or prepaid account, chain, address and provider required. Foreign/missing IDs return404; expired IDs return410 without silently starting a new baseline.","type":"string","pattern":"^s_[a-f0-9]{64}$"},"slots":{"default":[],"description":"At most one exact bytes32 storage slot; no inferred layout.","maxItems":1,"type":"array","items":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"}},"reads":{"default":[],"description":"At most one unverified zero-argument view/pure ABI read with one supported static output.","maxItems":1,"type":"array","items":{"type":"object","properties":{"type":{"type":"string","const":"function"},"name":{"type":"string","pattern":"^[a-zA-Z_][a-zA-Z0-9_]{0,63}$"},"stateMutability":{"type":"string","enum":["view","pure"]},"inputs":{"minItems":0,"maxItems":0,"type":"array","items":{"not":{}}},"outputs":{"minItems":1,"maxItems":1,"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["uint256","uint8","address","bool","bytes32"]}},"required":["type"],"additionalProperties":false}}},"required":["type","name","stateMutability","inputs","outputs"],"additionalProperties":false}},"event_topics":{"default":[],"description":"At most one exact topic0 at this contract, bounded to the existing lookback/call limit. Dense or excessive work fails the whole paid operation; no partial success.","maxItems":1,"type":"array","items":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"}},"events_from_block":{"description":"Optional first event block; otherwise previous snapshot block+1, or current block initially. Older than 32 blocks returns lookback_gap, without skipping to recent history.","type":"integer","minimum":1,"maximum":9007199254740991}},"required":["chain_id","address"],"additionalProperties":false},"example":{"chain_id":8453,"address":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","block":"finalized"}}}},"responses":{"200":{"description":"Paid result after confirmed settlement","headers":{"PAYMENT-RESPONSE":{"description":"Base64 x402 v2 settlement receipt","schema":{"type":"string"}},"Payment-Receipt":{"description":"Base64url native MPP EVM receipt; inspect status and reference. Not proof of prepaid finality.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContractObservation"}}}},"400":{"description":"Invalid request or disallowed target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required or rejected; never a sale. No paid data returned.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 requirements","schema":{"type":"string"}},"WWW-Authenticate":{"description":"Native MPP challenge for the original exact Base USDC EIP-3009 authorization. Persist the challenge and private recovery token before signing; never mix payment methods.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"403":{"description":"MCP Origin or staging access rejected","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Watch or snapshot not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Baseline incompatible or recovery pending/mismatched","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Paid response retention expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Input, target, stored document or output too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported target media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Selector not found, incompatible scope or complexity budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate, concurrency or daily operation budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Legacy core failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream or DNS failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service unavailable or settlement needs reconciliation; never automatically replace the payment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Target timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v3/prepaid/contract-watch":{"post":{"operationId":"fresh402_prepaid_contract_watch","summary":"Execute fresh402_contract_watch using the existing account credit balance","description":"Same input/output and durable debit as prepaid MCP. Credentials stay in HTTP. Failed reserved execution releases credits; no x402 fallback. Reuse the original tool, input, key, tariff and maximum for seven-day durable recovery through either transport.","security":[{"prepaidKey":[]}],"tags":["prepaid-execution"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{16,128}$"},"description":"Privately persisted operation identity, shared with fresh402/prepaid MCP metadata."},{"name":"X-Fresh402-Tariff-Version","in":"header","required":true,"schema":{"type":"integer","enum":[4]},"description":"Required explicit service-specific version4 from its authenticated quote; historical account web version remains unchanged."},{"name":"X-Fresh402-Max-Credits","in":"header","required":true,"schema":{"type":"integer","minimum":0,"maximum":1000000000},"description":"Required integer maximum at least the exact service-specific version4 quote; bound immutably to the operation key."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"chain_id":{"type":"number","const":8453,"description":"Base mainnet only; returned provider chain must match."},"address":{"description":"20-byte Ethereum address; lowercase/uppercase accepted, mixed case must have a valid EIP-55 checksum. Normalized to checksummed form.","type":"string","minLength":42,"maxLength":42,"pattern":"^0x[a-fA-F0-9]{40}$"},"block":{"default":"finalized","description":"Finalized only. Every state read pins the selected block hash with requireCanonical:true; no latest/number fallback.","type":"string","const":"finalized"},"previous_snapshot":{"description":"Optional owned snapshot_id from a successful saved contract_watch result, retained for30days. Same payer or prepaid account, chain, address and provider required. Foreign/missing IDs return404; expired IDs return410 without silently starting a new baseline.","type":"string","pattern":"^s_[a-f0-9]{64}$"},"slots":{"default":[],"description":"At most one exact bytes32 storage slot; no inferred layout.","maxItems":1,"type":"array","items":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"}},"reads":{"default":[],"description":"At most one unverified zero-argument view/pure ABI read with one supported static output.","maxItems":1,"type":"array","items":{"type":"object","properties":{"type":{"type":"string","const":"function"},"name":{"type":"string","pattern":"^[a-zA-Z_][a-zA-Z0-9_]{0,63}$"},"stateMutability":{"type":"string","enum":["view","pure"]},"inputs":{"minItems":0,"maxItems":0,"type":"array","items":{"not":{}}},"outputs":{"minItems":1,"maxItems":1,"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["uint256","uint8","address","bool","bytes32"]}},"required":["type"],"additionalProperties":false}}},"required":["type","name","stateMutability","inputs","outputs"],"additionalProperties":false}},"event_topics":{"default":[],"description":"At most one exact topic0 at this contract, bounded to the existing lookback/call limit. Dense or excessive work fails the whole paid operation; no partial success.","maxItems":1,"type":"array","items":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"}},"events_from_block":{"description":"Optional first event block; otherwise previous snapshot block+1, or current block initially. Older than 32 blocks returns lookback_gap, without skipping to recent history.","type":"integer","minimum":1,"maximum":9007199254740991}},"required":["chain_id","address"],"additionalProperties":false},"example":{"chain_id":8453,"address":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","block":"finalized"}}}},"responses":{"200":{"description":"Durable credit-paid result. X-Fresh402-Access=prepaid and X-Fresh402-Credits report the charged amount; replay never charges again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContractObservation"}}}},"400":{"description":"Invalid request or disallowed target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Prepaid HTTP credential required"},"402":{"description":"Insufficient spendable credits or missing tariff/maximum; no x402 submission"},"403":{"description":"MCP Origin or staging access rejected","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Watch or snapshot not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Baseline incompatible or recovery pending/mismatched","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Paid response retention expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Input, target, stored document or output too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported target media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Selector not found, incompatible scope or complexity budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate, concurrency or daily operation budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Legacy core failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream or DNS failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service unavailable or settlement needs reconciliation; never automatically replace the payment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Target timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v3/prepaid/quote/contract_watch":{"get":{"operationId":"fresh402_prepaid_quote_contract_watch","summary":"Exact accepted service-specific prepaid version4 terms; no execution or debit","security":[{"prepaidKey":[]}],"responses":{"200":{"description":"Requires enabled explicitly accepted all-service package provenance or original matching account/service grant. Use returned credits as the exact minimum maximum authorization; legacy account web tariff is unchanged.","content":{"application/json":{"schema":{"type":"object","properties":{"service":{"const":"contract_watch"},"tariff_version":{"const":4},"resource_class":{"const":"fixed"},"credits":{"type":"integer"},"terms_digest":{"type":"string","pattern":"^[a-f0-9]{64}$"},"failure_credits":{"const":0},"provisional_credits":{"const":false},"account_web_tariff_version":{"type":"integer","enum":[1,2,3]}},"required":["service","tariff_version","resource_class","credits","terms_digest","failure_credits","provisional_credits","account_web_tariff_version"]}}}},"400":{"description":"Invalid request or disallowed target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Prepaid HTTP credential required"},"403":{"description":"MCP Origin or staging access rejected","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Watch or snapshot not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Baseline incompatible or recovery pending/mismatched","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Paid response retention expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Input, target, stored document or output too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported target media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Selector not found, incompatible scope or complexity budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate, concurrency or daily operation budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Legacy core failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream or DNS failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service unavailable or settlement needs reconciliation; never automatically replace the payment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Target timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v3/wallet-watch":{"post":{"operationId":"fresh402_wallet_watch","summary":"Read ETH balance snapshots and selected ERC-20-shaped Transfer events for one wallet in a completed bounded finalized page. Save the owned cursor and use a new paid operation for the next page. Not full native/internal/NFT/transaction history; provider-reported logs cannot prove completeness. Commercial input binds to the original x402/MPP/prepaid request and REQUIRED random32-byte private recovery token for x402/MPP. REST sends X-Fresh402-Recovery-Token; MCP sends params._meta['fresh402/recovery-token']. Persist the secret with the original proof/input before authorizing. No client request_id; recovery reuses the original result with no new RPC or debit. Provider failure/partial scan never becomes a paid success. A confirmed paid response with observation_saved=false and persistence_error is pending domain finalization: keep original proof/input/token, retry recovery only, and do not use returned snapshot/cursor IDs until saved flags become true. $0.020000 USDC on Base per call; use an approved compatible payment client. Prepaid requires eligible finalized all-service credits or an original explicit service-specific tariff4 grant; inspect authenticated /v3/prepaid/quote/wallet_watch. Historical web package terms remain unchanged. Records retain30days; original private financial recovery retains7days. Server-side provider approval and published tariff gates apply; paying agents do not need their own RPC credentials or an operator-created grant when eligible all-service credits are available. Read /v3/prepaid/all-services and accept its exact terms before a new all-service purchase.","description":"Read ETH balance snapshots and selected ERC-20-shaped Transfer events for one wallet in a completed bounded finalized page. Save the owned cursor and use a new paid operation for the next page. Not full native/internal/NFT/transaction history; provider-reported logs cannot prove completeness. Optional separate machine trial: inspect /v3/agent-trial; send only X-Fresh402-Trial-Key and persisted Idempotency-Key. Finite allowance/admission; no payment fallback.","tags":["wallet_watch"],"security":[{"x402Payment":[]},{"mppPayment":[]},{"trialKey":[]}],"x-payment-info":{"protocols":[{"x402":{}},{"mpp":{"method":"evm","intent":"charge"}}],"price":{"mode":"fixed","currency":"USD","amount":"0.020000"}},"x-mcp-tool":"fresh402_wallet_watch","x-fresh402-tool":{"id":"wallet_watch","category":"blockchain-observation","limits":{"transfer_bytes":1048576,"decoded_bytes":4194304,"output_bytes":524288,"parser_characters":1048576,"gateway_timeout_ms":20000},"prepaid_credits":{"4":8},"network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","auth":"x402-or-mpp-or-prepaid","since":"2.7.1"},"parameters":[{"name":"X-Fresh402-Recovery-Token","in":"header","required":true,"schema":{"type":"string","minLength":43,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$"},"description":"Client-generated random 32-byte secret, encoded as hex/base64url. Persist before paying; retry identical input/payment/token for seven-day private recovery without another settlement. A public signature or transaction hash alone grants no recovery."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{16,128}$"},"description":"Required with a trial key: unique persisted key per logical operation. Reuse exact input/key for recovery; do not combine trial and payment credentials."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"chain_id":{"type":"number","const":8453,"description":"Base mainnet only; returned provider chain must match."},"block":{"default":"finalized","description":"Finalized only. Every state read pins the selected block hash with requireCanonical:true; no latest/number fallback.","type":"string","const":"finalized"},"address":{"description":"20-byte Ethereum address; lowercase/uppercase accepted, mixed case must have a valid EIP-55 checksum. Normalized to checksummed form.","type":"string","minLength":42,"maxLength":42,"pattern":"^0x[a-fA-F0-9]{40}$"},"tokens":{"minItems":1,"maxItems":4,"type":"array","items":{"description":"20-byte Ethereum address; lowercase/uppercase accepted, mixed case must have a valid EIP-55 checksum. Normalized to checksummed form.","type":"string","minLength":42,"maxLength":42,"pattern":"^0x[a-fA-F0-9]{40}$"},"description":"One to four selected ERC-20 contracts; no full wallet transaction history."},"cursor":{"description":"Owned opaque cursor from a prior successful wallet_watch. Scope, wallet, tokens, provider and policy must match.","type":"string","pattern":"^c_[a-f0-9]{64}$"},"from_block":{"description":"Initial first block; cannot be supplied with cursor. Default last four finalized blocks; a gap beyond32 fails without skipping history.","type":"integer","minimum":1,"maximum":9007199254740991},"max_blocks":{"default":4,"description":"At most four blocks in this paid page; default4. has_more describes a completed bounded page, not permission to charge a failed partial scan.","type":"integer","minimum":1,"maximum":4},"chunk_size":{"default":4,"description":"Single bounded chunk; four-block maximum and no automatic retry.","type":"number","const":4}},"required":["chain_id","address","tokens"],"additionalProperties":false,"not":{"required":["cursor","from_block"]}},"example":{"chain_id":8453,"address":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","tokens":["0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"],"block":"finalized"}}}},"responses":{"200":{"description":"Paid result after confirmed settlement","headers":{"PAYMENT-RESPONSE":{"description":"Base64 x402 v2 settlement receipt","schema":{"type":"string"}},"Payment-Receipt":{"description":"Base64url native MPP EVM receipt; inspect status and reference. Not proof of prepaid finality.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletObservation"}}}},"400":{"description":"Invalid request or disallowed target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required or rejected; never a sale. No paid data returned.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 requirements","schema":{"type":"string"}},"WWW-Authenticate":{"description":"Native MPP challenge for the original exact Base USDC EIP-3009 authorization. Persist the challenge and private recovery token before signing; never mix payment methods.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"403":{"description":"MCP Origin or staging access rejected","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Watch or snapshot not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Baseline incompatible or recovery pending/mismatched","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Paid response retention expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Input, target, stored document or output too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported target media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Selector not found, incompatible scope or complexity budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate, concurrency or daily operation budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Legacy core failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream or DNS failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service unavailable or settlement needs reconciliation; never automatically replace the payment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Target timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v3/prepaid/wallet-watch":{"post":{"operationId":"fresh402_prepaid_wallet_watch","summary":"Execute fresh402_wallet_watch using the existing account credit balance","description":"Same input/output and durable debit as prepaid MCP. Credentials stay in HTTP. Failed reserved execution releases credits; no x402 fallback. Reuse the original tool, input, key, tariff and maximum for seven-day durable recovery through either transport.","security":[{"prepaidKey":[]}],"tags":["prepaid-execution"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{16,128}$"},"description":"Privately persisted operation identity, shared with fresh402/prepaid MCP metadata."},{"name":"X-Fresh402-Tariff-Version","in":"header","required":true,"schema":{"type":"integer","enum":[4]},"description":"Required explicit service-specific version4 from its authenticated quote; historical account web version remains unchanged."},{"name":"X-Fresh402-Max-Credits","in":"header","required":true,"schema":{"type":"integer","minimum":0,"maximum":1000000000},"description":"Required integer maximum at least the exact service-specific version4 quote; bound immutably to the operation key."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"chain_id":{"type":"number","const":8453,"description":"Base mainnet only; returned provider chain must match."},"block":{"default":"finalized","description":"Finalized only. Every state read pins the selected block hash with requireCanonical:true; no latest/number fallback.","type":"string","const":"finalized"},"address":{"description":"20-byte Ethereum address; lowercase/uppercase accepted, mixed case must have a valid EIP-55 checksum. Normalized to checksummed form.","type":"string","minLength":42,"maxLength":42,"pattern":"^0x[a-fA-F0-9]{40}$"},"tokens":{"minItems":1,"maxItems":4,"type":"array","items":{"description":"20-byte Ethereum address; lowercase/uppercase accepted, mixed case must have a valid EIP-55 checksum. Normalized to checksummed form.","type":"string","minLength":42,"maxLength":42,"pattern":"^0x[a-fA-F0-9]{40}$"},"description":"One to four selected ERC-20 contracts; no full wallet transaction history."},"cursor":{"description":"Owned opaque cursor from a prior successful wallet_watch. Scope, wallet, tokens, provider and policy must match.","type":"string","pattern":"^c_[a-f0-9]{64}$"},"from_block":{"description":"Initial first block; cannot be supplied with cursor. Default last four finalized blocks; a gap beyond32 fails without skipping history.","type":"integer","minimum":1,"maximum":9007199254740991},"max_blocks":{"default":4,"description":"At most four blocks in this paid page; default4. has_more describes a completed bounded page, not permission to charge a failed partial scan.","type":"integer","minimum":1,"maximum":4},"chunk_size":{"default":4,"description":"Single bounded chunk; four-block maximum and no automatic retry.","type":"number","const":4}},"required":["chain_id","address","tokens"],"additionalProperties":false,"not":{"required":["cursor","from_block"]}},"example":{"chain_id":8453,"address":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","tokens":["0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"],"block":"finalized"}}}},"responses":{"200":{"description":"Durable credit-paid result. X-Fresh402-Access=prepaid and X-Fresh402-Credits report the charged amount; replay never charges again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletObservation"}}}},"400":{"description":"Invalid request or disallowed target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Prepaid HTTP credential required"},"402":{"description":"Insufficient spendable credits or missing tariff/maximum; no x402 submission"},"403":{"description":"MCP Origin or staging access rejected","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Watch or snapshot not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Baseline incompatible or recovery pending/mismatched","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Paid response retention expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Input, target, stored document or output too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported target media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Selector not found, incompatible scope or complexity budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate, concurrency or daily operation budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Legacy core failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream or DNS failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service unavailable or settlement needs reconciliation; never automatically replace the payment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Target timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v3/prepaid/quote/wallet_watch":{"get":{"operationId":"fresh402_prepaid_quote_wallet_watch","summary":"Exact accepted service-specific prepaid version4 terms; no execution or debit","security":[{"prepaidKey":[]}],"responses":{"200":{"description":"Requires enabled explicitly accepted all-service package provenance or original matching account/service grant. Use returned credits as the exact minimum maximum authorization; legacy account web tariff is unchanged.","content":{"application/json":{"schema":{"type":"object","properties":{"service":{"const":"wallet_watch"},"tariff_version":{"const":4},"resource_class":{"const":"fixed"},"credits":{"type":"integer"},"terms_digest":{"type":"string","pattern":"^[a-f0-9]{64}$"},"failure_credits":{"const":0},"provisional_credits":{"const":false},"account_web_tariff_version":{"type":"integer","enum":[1,2,3]}},"required":["service","tariff_version","resource_class","credits","terms_digest","failure_credits","provisional_credits","account_web_tariff_version"]}}}},"400":{"description":"Invalid request or disallowed target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Prepaid HTTP credential required"},"403":{"description":"MCP Origin or staging access rejected","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Watch or snapshot not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Baseline incompatible or recovery pending/mismatched","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Paid response retention expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Input, target, stored document or output too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported target media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Selector not found, incompatible scope or complexity budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate, concurrency or daily operation budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Legacy core failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream or DNS failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service unavailable or settlement needs reconciliation; never automatically replace the payment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Target timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v3/token-facts":{"post":{"operationId":"fresh402_token_facts","summary":"Read contract-reported token identity, metadata, supply and limited control facts at one pinned finalized Base block. No safety score, honeypot/trading simulation, verified-source claim or inferred absence of privileges. Missing or deceptive getter evidence remains unknown/not_assessed. Commercial input binds to the original x402/MPP/prepaid request and REQUIRED random32-byte private recovery token for x402/MPP. REST sends X-Fresh402-Recovery-Token; MCP sends params._meta['fresh402/recovery-token']. Persist the secret with the original proof/input before authorizing. No client request_id; recovery reuses the original result with no new RPC or debit. Provider failure/partial scan never becomes a paid success. A confirmed paid response with observation_saved=false and persistence_error is pending domain finalization: keep original proof/input/token, retry recovery only, and do not use returned snapshot/cursor IDs until saved flags become true. $0.010000 USDC on Base per call; use an approved compatible payment client. Prepaid requires eligible finalized all-service credits or an original explicit service-specific tariff4 grant; inspect authenticated /v3/prepaid/quote/token_facts. Historical web package terms remain unchanged. Records retain30days; original private financial recovery retains7days. Server-side provider approval and published tariff gates apply; paying agents do not need their own RPC credentials or an operator-created grant when eligible all-service credits are available. Read /v3/prepaid/all-services and accept its exact terms before a new all-service purchase.","description":"Read contract-reported token identity, metadata, supply and limited control facts at one pinned finalized Base block. No safety score, honeypot/trading simulation, verified-source claim or inferred absence of privileges. Missing or deceptive getter evidence remains unknown/not_assessed. Optional separate machine trial: inspect /v3/agent-trial; send only X-Fresh402-Trial-Key and persisted Idempotency-Key. Finite allowance/admission; no payment fallback.","tags":["token_facts"],"security":[{"x402Payment":[]},{"mppPayment":[]},{"trialKey":[]}],"x-payment-info":{"protocols":[{"x402":{}},{"mpp":{"method":"evm","intent":"charge"}}],"price":{"mode":"fixed","currency":"USD","amount":"0.010000"}},"x-mcp-tool":"fresh402_token_facts","x-fresh402-tool":{"id":"token_facts","category":"blockchain-observation","limits":{"transfer_bytes":1048576,"decoded_bytes":4194304,"output_bytes":524288,"parser_characters":1048576,"gateway_timeout_ms":20000},"prepaid_credits":{"4":4},"network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","auth":"x402-or-mpp-or-prepaid","since":"2.7.1"},"parameters":[{"name":"X-Fresh402-Recovery-Token","in":"header","required":true,"schema":{"type":"string","minLength":43,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$"},"description":"Client-generated random 32-byte secret, encoded as hex/base64url. Persist before paying; retry identical input/payment/token for seven-day private recovery without another settlement. A public signature or transaction hash alone grants no recovery."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{16,128}$"},"description":"Required with a trial key: unique persisted key per logical operation. Reuse exact input/key for recovery; do not combine trial and payment credentials."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"chain_id":{"type":"number","const":8453,"description":"Base mainnet only; returned provider chain must match."},"address":{"description":"20-byte Ethereum address; lowercase/uppercase accepted, mixed case must have a valid EIP-55 checksum. Normalized to checksummed form.","type":"string","minLength":42,"maxLength":42,"pattern":"^0x[a-fA-F0-9]{40}$"},"block":{"default":"finalized","description":"Finalized only. Every state read pins the selected block hash with requireCanonical:true; no latest/number fallback.","type":"string","const":"finalized"},"categories":{"default":["identity","controls","supply"],"description":"Requested categories, default all. Unsupported evidence remains unknown/not_assessed; never a safety score.","minItems":1,"maxItems":3,"type":"array","items":{"type":"string","enum":["identity","controls","supply"]}}},"required":["chain_id","address"],"additionalProperties":false},"example":{"chain_id":8453,"address":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","categories":["controls"],"block":"finalized"}}}},"responses":{"200":{"description":"Paid result after confirmed settlement","headers":{"PAYMENT-RESPONSE":{"description":"Base64 x402 v2 settlement receipt","schema":{"type":"string"}},"Payment-Receipt":{"description":"Base64url native MPP EVM receipt; inspect status and reference. Not proof of prepaid finality.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenFactsObservation"}}}},"400":{"description":"Invalid request or disallowed target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required or rejected; never a sale. No paid data returned.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 requirements","schema":{"type":"string"}},"WWW-Authenticate":{"description":"Native MPP challenge for the original exact Base USDC EIP-3009 authorization. Persist the challenge and private recovery token before signing; never mix payment methods.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"403":{"description":"MCP Origin or staging access rejected","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Watch or snapshot not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Baseline incompatible or recovery pending/mismatched","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Paid response retention expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Input, target, stored document or output too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported target media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Selector not found, incompatible scope or complexity budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate, concurrency or daily operation budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Legacy core failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream or DNS failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service unavailable or settlement needs reconciliation; never automatically replace the payment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Target timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v3/prepaid/token-facts":{"post":{"operationId":"fresh402_prepaid_token_facts","summary":"Execute fresh402_token_facts using the existing account credit balance","description":"Same input/output and durable debit as prepaid MCP. Credentials stay in HTTP. Failed reserved execution releases credits; no x402 fallback. Reuse the original tool, input, key, tariff and maximum for seven-day durable recovery through either transport.","security":[{"prepaidKey":[]}],"tags":["prepaid-execution"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{16,128}$"},"description":"Privately persisted operation identity, shared with fresh402/prepaid MCP metadata."},{"name":"X-Fresh402-Tariff-Version","in":"header","required":true,"schema":{"type":"integer","enum":[4]},"description":"Required explicit service-specific version4 from its authenticated quote; historical account web version remains unchanged."},{"name":"X-Fresh402-Max-Credits","in":"header","required":true,"schema":{"type":"integer","minimum":0,"maximum":1000000000},"description":"Required integer maximum at least the exact service-specific version4 quote; bound immutably to the operation key."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"chain_id":{"type":"number","const":8453,"description":"Base mainnet only; returned provider chain must match."},"address":{"description":"20-byte Ethereum address; lowercase/uppercase accepted, mixed case must have a valid EIP-55 checksum. Normalized to checksummed form.","type":"string","minLength":42,"maxLength":42,"pattern":"^0x[a-fA-F0-9]{40}$"},"block":{"default":"finalized","description":"Finalized only. Every state read pins the selected block hash with requireCanonical:true; no latest/number fallback.","type":"string","const":"finalized"},"categories":{"default":["identity","controls","supply"],"description":"Requested categories, default all. Unsupported evidence remains unknown/not_assessed; never a safety score.","minItems":1,"maxItems":3,"type":"array","items":{"type":"string","enum":["identity","controls","supply"]}}},"required":["chain_id","address"],"additionalProperties":false},"example":{"chain_id":8453,"address":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","categories":["controls"],"block":"finalized"}}}},"responses":{"200":{"description":"Durable credit-paid result. X-Fresh402-Access=prepaid and X-Fresh402-Credits report the charged amount; replay never charges again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenFactsObservation"}}}},"400":{"description":"Invalid request or disallowed target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Prepaid HTTP credential required"},"402":{"description":"Insufficient spendable credits or missing tariff/maximum; no x402 submission"},"403":{"description":"MCP Origin or staging access rejected","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Watch or snapshot not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Baseline incompatible or recovery pending/mismatched","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Paid response retention expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Input, target, stored document or output too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported target media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Selector not found, incompatible scope or complexity budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate, concurrency or daily operation budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Legacy core failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream or DNS failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service unavailable or settlement needs reconciliation; never automatically replace the payment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Target timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v3/prepaid/quote/token_facts":{"get":{"operationId":"fresh402_prepaid_quote_token_facts","summary":"Exact accepted service-specific prepaid version4 terms; no execution or debit","security":[{"prepaidKey":[]}],"responses":{"200":{"description":"Requires enabled explicitly accepted all-service package provenance or original matching account/service grant. Use returned credits as the exact minimum maximum authorization; legacy account web tariff is unchanged.","content":{"application/json":{"schema":{"type":"object","properties":{"service":{"const":"token_facts"},"tariff_version":{"const":4},"resource_class":{"const":"fixed"},"credits":{"type":"integer"},"terms_digest":{"type":"string","pattern":"^[a-f0-9]{64}$"},"failure_credits":{"const":0},"provisional_credits":{"const":false},"account_web_tariff_version":{"type":"integer","enum":[1,2,3]}},"required":["service","tariff_version","resource_class","credits","terms_digest","failure_credits","provisional_credits","account_web_tariff_version"]}}}},"400":{"description":"Invalid request or disallowed target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Prepaid HTTP credential required"},"403":{"description":"MCP Origin or staging access rejected","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Watch or snapshot not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Baseline incompatible or recovery pending/mismatched","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Paid response retention expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Input, target, stored document or output too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported target media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Selector not found, incompatible scope or complexity budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate, concurrency or daily operation budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Legacy core failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream or DNS failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service unavailable or settlement needs reconciliation; never automatically replace the payment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Target timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v3/agent-trial":{"get":{"operationId":"fresh402_machine_trial_discovery","summary":"Actual bounded machine-trial availability and economic caps; no CAPTCHA or payment","security":[],"responses":{"200":{"description":"Wallet control is not proof of a unique agent. Allowances are maxima, admission may deny earlier. No payment fallback.","content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean"},"allowances":{"type":"object","properties":{}},"shared_limits":{"type":"object","properties":{}},"captcha_required":{"const":false},"payments_automatic":{"const":false}}}}}}}}},"/v3/agent-trial/quota":{"get":{"operationId":"fresh402_machine_trial_quota","summary":"Inspect the separately issued fm_ credential, original expiry and remaining entitlements","security":[{"trialKey":[]}],"responses":{"200":{"description":"No quota renewal, target fetch or payment.","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"400":{"description":"Invalid request or disallowed target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"MCP Origin or staging access rejected","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Watch or snapshot not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Baseline incompatible or recovery pending/mismatched","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Paid response retention expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Input, target, stored document or output too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported target media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Selector not found, incompatible scope or complexity budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate, concurrency or daily operation budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Legacy core failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream or DNS failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service unavailable or settlement needs reconciliation; never automatically replace the payment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Target timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v3/agent-trial/challenge":{"post":{"operationId":"fresh402_machine_trial_challenge","summary":"Request the exact five-minute EIP-191 wallet-control message","description":"No CAPTCHA, funding, approval or merchant-side manual activation. Challenges bind wallet, canonical origin and network. Rotation preserves original quotas and expiry (at most 7 days, clipped to existing runtime authorization). Persist keys privately. Do not mix payment/prepaid credentials.","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"wallet":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$","description":"Nonzero EOA address; does not need USDC or ETH for this message."}},"required":["wallet"]}}}},"responses":{"200":{"description":"challenge_id, exact message, expires_at, signature_method=personal_sign, no_payment=true","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"400":{"description":"Invalid request or disallowed target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"MCP Origin or staging access rejected","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Watch or snapshot not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Baseline incompatible or recovery pending/mismatched","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Paid response retention expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Input, target, stored document or output too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported target media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Selector not found, incompatible scope or complexity budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate, concurrency or daily operation budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Legacy core failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream or DNS failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service unavailable or settlement needs reconciliation; never automatically replace the payment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Target timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v3/agent-trial/claim":{"post":{"operationId":"fresh402_machine_trial_claim","summary":"Verify the exact EOA message, consume the challenge and issue or rotate fm_ credentials","description":"No CAPTCHA, funding, approval or merchant-side manual activation. Challenges bind wallet, canonical origin and network. Rotation preserves original quotas and expiry (at most 7 days, clipped to existing runtime authorization). Persist keys privately. Do not mix payment/prepaid credentials.","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"wallet":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"challenge_id":{"type":"string","pattern":"^ma_[a-f0-9]{64}$"},"signature":{"type":"string","pattern":"^0x[a-fA-F0-9]{130}$","description":"65-byte personal_sign signature of the exact returned message; never sign a transfer."}},"required":["wallet","challenge_id","signature"]}}}},"responses":{"200":{"description":"trial_key (only plaintext copy), expires_at, allowances, one_time=true, payments_automatic=false; rotation invalidates the previous key.","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"400":{"description":"Invalid request or disallowed target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"MCP Origin or staging access rejected","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Watch or snapshot not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Baseline incompatible or recovery pending/mismatched","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Paid response retention expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Input, target, stored document or output too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported target media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Selector not found, incompatible scope or complexity budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate, concurrency or daily operation budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Legacy core failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream or DNS failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service unavailable or settlement needs reconciliation; never automatically replace the payment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Target timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v3/prepaid/all-services":{"get":{"operationId":"fresh402_all_service_package_terms","summary":"Versioned future all-service package terms and actual purchasing availability","security":[],"responses":{"200":{"description":"When disabled no purchase is offered. When enabled, accept the exact terms_digest explicitly when creating a new all-services-v4 purchase. One-time native Base USDC; no subscription. Existing balances retain original rights. Only finalized eligible credits fund blockchain calls; finite provider/runtime budgets apply.","content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean"},"terms_endpoint":{"type":"string"},"payment_authorized":{"const":false},"terms_digest":{"type":"string","pattern":"^[a-f0-9]{64}$"},"terms":{"type":"object","properties":{}}}}}}},"400":{"description":"Invalid request or disallowed target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"MCP Origin or staging access rejected","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Watch or snapshot not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Baseline incompatible or recovery pending/mismatched","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Paid response retention expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Input, target, stored document or output too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported target media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Selector not found, incompatible scope or complexity budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate, concurrency or daily operation budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Legacy core failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream or DNS failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service unavailable or settlement needs reconciliation; never automatically replace the payment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Target timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v2/trial":{"get":{"operationId":"fresh402_trial_discovery","summary":"Actual gated free-trial availability; no execution or payment","security":[],"responses":{"200":{"description":"Enabled only with configured verification and unexpired pilot authorization.","content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean"},"allowances":{"type":"object","properties":{}},"payments_automatic":{"const":false}}}}}}}}},"/v2/trial/quota":{"get":{"operationId":"fresh402_trial_quota","summary":"Remaining one-time free entitlements, separate from purchased credits","security":[{"trialKey":[]}],"responses":{"200":{"description":"Per-tool remaining quota and product enablement; finite global capacity can deny work earlier.","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"400":{"description":"Invalid request or disallowed target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"MCP Origin or staging access rejected","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Watch or snapshot not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Baseline incompatible or recovery pending/mismatched","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Paid response retention expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Input, target, stored document or output too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported target media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Selector not found, incompatible scope or complexity budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate, concurrency or daily operation budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Legacy core failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream or DNS failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service unavailable or settlement needs reconciliation; never automatically replace the payment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Target timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v2/trial/challenge":{"post":{"operationId":"fresh402_trial_challenge","summary":"Create a five-minute unfunded EOA trial ownership challenge","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"wallet":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"}},"required":["wallet"]}}}},"responses":{"200":{"description":"Exact EIP-191 message, expiry and public CAPTCHA configuration. Sign only this ownership message; no funding or approval required.","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"400":{"description":"Invalid request or disallowed target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"MCP Origin or staging access rejected","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Watch or snapshot not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Baseline incompatible or recovery pending/mismatched","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Paid response retention expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Input, target, stored document or output too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported target media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Selector not found, incompatible scope or complexity budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate, concurrency or daily operation budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Legacy core failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream or DNS failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service unavailable or settlement needs reconciliation; never automatically replace the payment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Target timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v2/trial/claim":{"post":{"operationId":"fresh402_trial_claim","summary":"Verify ownership plus a fresh Turnstile token and issue or rotate one trial key","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"wallet":{"type":"string"},"challenge_id":{"type":"string"},"signature":{"type":"string","pattern":"^0x[a-fA-F0-9]{130}$"},"turnstile_token":{"type":"string","minLength":1,"maxLength":2048}},"required":["wallet","challenge_id","signature","turnstile_token"]}}}},"responses":{"200":{"description":"One-time plaintext trial key; store privately. Repeated ownership proof rotates the key without resetting entitlements. No payment or purchased-account mutation.","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"400":{"description":"Invalid request or disallowed target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"MCP Origin or staging access rejected","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Watch or snapshot not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Baseline incompatible or recovery pending/mismatched","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Paid response retention expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Input, target, stored document or output too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported target media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Selector not found, incompatible scope or complexity budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate, concurrency or daily operation budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Legacy core failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream or DNS failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service unavailable or settlement needs reconciliation; never automatically replace the payment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Target timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v2/prepaid/balance":{"get":{"operationId":"fresh402_prepaid_balance","summary":"Finalized, provisional, frozen and spendable integer balances","security":[{"prepaidKey":[]}],"responses":{"200":{"description":"available includes frozen early credits; use spendable for admission. finalized_available, provisional_available, provisional_unspent, provisional_reserved and provisional_spent distinguish provenance.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrepaidBalance"}}}},"400":{"description":"Invalid request or disallowed target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Prepaid key required"},"403":{"description":"MCP Origin or staging access rejected","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Watch or snapshot not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Baseline incompatible or recovery pending/mismatched","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Paid response retention expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Input, target, stored document or output too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported target media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Selector not found, incompatible scope or complexity budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate, concurrency or daily operation budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Legacy core failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream or DNS failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service unavailable or settlement needs reconciliation; never automatically replace the payment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Target timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v2/prepaid/quote":{"get":{"operationId":"fresh402_prepaid_quote","summary":"Account-specific immutable tariff, fixed credit costs and limits","security":[{"prepaidKey":[]}],"responses":{"200":{"description":"Authenticated account projection; never contains wallet secrets.","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"400":{"description":"Invalid request or disallowed target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Prepaid key required"},"403":{"description":"MCP Origin or staging access rejected","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Watch or snapshot not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Baseline incompatible or recovery pending/mismatched","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Paid response retention expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Input, target, stored document or output too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported target media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Selector not found, incompatible scope or complexity budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate, concurrency or daily operation budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Legacy core failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream or DNS failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service unavailable or settlement needs reconciliation; never automatically replace the payment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Target timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v2/prepaid/usage":{"get":{"operationId":"fresh402_prepaid_usage","summary":"Latest 100 durable account operations","security":[{"prepaidKey":[]}],"responses":{"200":{"description":"Authenticated account projection; never contains wallet secrets.","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"400":{"description":"Invalid request or disallowed target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Prepaid key required"},"403":{"description":"MCP Origin or staging access rejected","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Watch or snapshot not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Baseline incompatible or recovery pending/mismatched","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Paid response retention expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Input, target, stored document or output too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported target media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Selector not found, incompatible scope or complexity budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate, concurrency or daily operation budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Legacy core failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream or DNS failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service unavailable or settlement needs reconciliation; never automatically replace the payment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Target timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/register":{"post":{"operationId":"fresh402_register","summary":"Create or retrieve a free persistent baseline; existing watches never refetch","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"url":{"type":"string","maxLength":4096,"format":"uri","description":"Required absolute public HTTPS document URL, at most 4096 characters, e.g. 'https://example.com/docs'. Only port 443; no embedded credentials, private/local targets or authenticated pages. Fresh402's own service URLs, including its discovery /openapi.json, cannot be targets; choose an external public document. HTML, JSON and plain text are supported; JavaScript is not executed. DNS, redirect and size limits also apply."},"selector":{"type":"string","minLength":1,"maxLength":256,"description":"Optional HTML scope: a supported CSS selector, 1-256 characters, e.g. 'main' or 'article .content'. Only matching text is normalized; no match returns 422. Omit to normalize the page after built-in noise removal. Not supported for JSON or plain text."},"ignore_selectors":{"description":"Optional array of up to 20 CSS selectors (each 1-256 characters) to remove from HTML in addition to built-in noise filtering. Default: no extra exclusions ([]). HTML only; use ignore_json_paths for JSON. Example: ['.timestamp', '.ad'].","maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":256,"description":"HTML element(s) to remove before normalization: a supported CSS selector, 1-256 characters, e.g. '.timestamp' or 'nav'."}},"ignore_json_paths":{"description":"Optional array of up to 20 JSON Pointer-style paths to remove before JSON normalization and hashing. Each must start with '/' and be 1-256 characters; supports '*' segments. Default: [] (no exclusions). JSON only. Example: ['/updated_at', '/items/*/request_id'].","maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":256,"pattern":"^\\/","description":"JSON Pointer-style path, 1-256 characters, starting with '/'. Decode '~0' as '~' and '~1' as '/'; '*' matches all object keys or array elements. Example: '/items/*/updated_at'."}},"html_attributes":{"description":"Optional HTML-only watch rule: up to4 of href,title,alt,aria-label; default[] retains existing text-only normalization. Distinct names are sorted; nonempty rules create a separate version1 watch/baseline. Records bounded meaningful attributes within the saved selector or filtered page, including same-text link destination changes. Cannot be supplied with watch_id, even[]. Unsafe hrefs are hashed, never fetched. Limits:200 elements,2048 characters/value,32768 evidence bytes; excess fails, never clips silently.","maxItems":4,"type":"array","items":{"type":"string","enum":["alt","aria-label","href","title"],"description":"One explicitly observed HTML attribute: href (a/area only),title,alt or aria-label. No class/style/event attributes; links are inert evidence and never fetched."}}},"required":["url"],"description":"Register a free baseline using a required URL and optional content rules. The canonical URL plus rules identify the watch; changing rules creates a different watch. Repeating the same registration returns its existing watch_id/hash without fetching or refreshing it. Quotas apply. Reuse the returned watch_id in Check, Smart Diff or OpenAPI Contract Diff.","examples":[{"url":"https://example.com/docs","selector":"main","ignore_selectors":[".timestamp"]}]}}}},"responses":{"200":{"description":"Registration","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterResult"}}}},"400":{"description":"Invalid request or disallowed target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"MCP Origin or staging access rejected","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Watch or snapshot not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Baseline incompatible or recovery pending/mismatched","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Paid response retention expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Input, target, stored document or output too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported target media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Selector not found, incompatible scope or complexity budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate, concurrency or daily operation budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Legacy core failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream or DNS failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service unavailable or settlement needs reconciliation; never automatically replace the payment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Target timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/history":{"get":{"operationId":"fresh402_history","summary":"Read retained v1 snapshot metadata; never fetches a target","security":[],"parameters":[{"name":"watch_id","in":"query","required":false,"schema":{"type":"string"},"description":"Provide watch_id or url"},{"name":"url","in":"query","required":false,"schema":{"type":"string"},"description":"Provide watch_id or url"}],"responses":{"200":{"description":"Stored v1 data (shared publicly); never v2 Smart Diff data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HistoryResult"}}}},"400":{"description":"Invalid request or disallowed target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"MCP Origin or staging access rejected","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Watch or snapshot not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Baseline incompatible or recovery pending/mismatched","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Paid response retention expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Input, target, stored document or output too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported target media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Selector not found, incompatible scope or complexity budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate, concurrency or daily operation budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Legacy core failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream or DNS failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service unavailable or settlement needs reconciliation; never automatically replace the payment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Target timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/diff":{"get":{"operationId":"fresh402_diff","summary":"Read a legacy deterministic diff of the latest two stored v1 snapshots; never fetches a target","security":[],"parameters":[{"name":"watch_id","in":"query","required":false,"schema":{"type":"string"},"description":"Provide watch_id or url"},{"name":"url","in":"query","required":false,"schema":{"type":"string"},"description":"Provide watch_id or url"}],"responses":{"200":{"description":"Stored v1 data (shared publicly); never v2 Smart Diff data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LegacyDiffResult"}}}},"400":{"description":"Invalid request or disallowed target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"MCP Origin or staging access rejected","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Watch or snapshot not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Baseline incompatible or recovery pending/mismatched","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Paid response retention expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Input, target, stored document or output too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported target media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Selector not found, incompatible scope or complexity budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate, concurrency or daily operation budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Legacy core failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream or DNS failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service unavailable or settlement needs reconciliation; never automatically replace the payment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Target timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/stats":{"get":{"operationId":"fresh402_stats","summary":"Confirmed settlement counts and USDC revenue; excludes 402 challenges","security":[],"responses":{"200":{"description":"Settlement totals","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatsResult"}}}}}}},"/":{"get":{"operationId":"fresh402_health","summary":"Health, version, services and prices","security":[],"responses":{"200":{"description":"Service metadata with additive one-time prepaid package discovery; enabled reflects public purchasing availability","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"status":{"type":"string"},"version":{"type":"string"},"normalizer_version":{"type":"integer"},"pricing":{"type":"object","properties":{}},"endpoints":{"type":"object","properties":{}},"features":{"type":"array","items":{"type":"string"}},"machine_trial":{"type":"object","properties":{"enabled":{"type":"boolean"},"allowances":{"type":"object","properties":{}},"model":{"type":"string"},"challenge_endpoint":{"type":"string"},"claim_endpoint":{"type":"string"},"quota_endpoint":{"type":"string"},"captcha_required":{"const":false},"payments_automatic":{"const":false}}},"prepaid_packages":{"type":"object","properties":{"enabled":{"type":"boolean"},"currency":{"type":"string"},"network":{"type":"string"},"billing_model":{"type":"string"},"credits_expire":{"type":"boolean"},"plans":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"price_usdc":{"type":"string"},"amount_atomic":{"type":"integer"},"credits":{"type":"integer"}}}},"credit_costs":{"type":"object","properties":{"check":{"type":"integer"},"extract":{"type":"integer"},"smart_diff":{"type":"integer"},"openapi_contract_diff":{"type":"integer"}}},"account_url":{"type":"string"},"plans_endpoint":{"type":"string"}}},"free_trial":{"type":"object","properties":{"enabled":{"type":"boolean"},"model":{"type":"string"},"credential_header":{"type":"string"},"idempotency_header":{"type":"string"},"allowances":{"type":"object","properties":{}},"account_url":{"type":"string"},"quota_endpoint":{"type":"string"},"payments_automatic":{"const":false}}}}}}}}}}},"/openapi.json":{"get":{"operationId":"fresh402_openapi","summary":"This OpenAPI document","security":[],"responses":{"200":{"description":"OpenAPI 3.1","content":{"application/json":{"schema":{"type":"object","properties":{}}}}}}}},"/terms":{"get":{"operationId":"fresh402_terms","summary":"Customer terms, privacy and private support contact; independent of purchasing availability","security":[],"responses":{"200":{"description":"Current publication status and policy","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/privacy":{"get":{"operationId":"fresh402_privacy","summary":"Customer terms, privacy and private support contact; independent of purchasing availability","security":[],"responses":{"200":{"description":"Current publication status and policy","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/.well-known/x402":{"get":{"operationId":"fresh402_x402","summary":"x402 discovery manifest","security":[],"responses":{"200":{"description":"Paid REST resource URLs","content":{"application/json":{"schema":{"type":"object","properties":{"version":{"type":"integer"},"resources":{"type":"array","items":{"type":"string"}}}}}}}}}},"/.well-known/glama.json":{"get":{"operationId":"fresh402_glama","summary":"Glama ownership verification","security":[],"responses":{"200":{"description":"Existing ownership claim","content":{"application/json":{"schema":{"type":"object","properties":{"$schema":{"type":"string"},"claim":{"type":"string"}}}}}}}}},"/mcp":{"post":{"operationId":"fresh402_mcp","summary":"MCP Streamable HTTP (2026-07-28 plus stateless 2025 compatibility)","security":[],"description":"8 tools, including configured finalized Base observations. Payment challenge is an isError tool result with structuredContent = PaymentRequired; payment goes in params._meta['x402/payment']; receipt in result._meta['x402/payment-response']. HTTP 200 alone is not success. Alternatively use X-Fresh402-API-Key in HTTP with params._meta['fresh402/prepaid'] containing idempotency_key, tariff_version and max_credits. Never combine billing methods. When x-mpp-payments.enabled, official MPP clients may use params._meta['org.paymentauth/credential']; receipt is result._meta['org.paymentauth/receipt']. Legacy x402 errors also carry standard org.paymentauth/payment-required metadata. See docs/MPP.md, AGENT_PREPAID.md and MCP.md.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"jsonrpc":{"type":"string"},"id":{"type":["string","number"]},"method":{"type":"string"},"params":{"type":"object","properties":{}}}}}}},"responses":{"200":{"description":"JSON-RPC or MCP envelope; JSON or SSE","content":{"application/json":{"schema":{"type":"object","properties":{}}},"text/event-stream":{"schema":{"type":"string"}}}},"202":{"description":"Notification accepted"},"400":{"description":"Invalid request or disallowed target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"MCP Origin or staging access rejected","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Watch or snapshot not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"408":{"description":"Request body timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Baseline incompatible or recovery pending/mismatched","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Paid response retention expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Input, target, stored document or output too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported target media type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Selector not found, incompatible scope or complexity budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate, concurrency or daily operation budget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Legacy core failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream or DNS failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service unavailable or settlement needs reconciliation; never automatically replace the payment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Target timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"fresh402_mcp_get","summary":"Sessionless MCP; GET not supported","responses":{"405":{"description":"Method not allowed"}}},"delete":{"operationId":"fresh402_mcp_delete","summary":"Sessionless MCP; DELETE not supported","responses":{"405":{"description":"Method not allowed"}}}}},"components":{"securitySchemes":{"trialKey":{"type":"apiKey","in":"header","name":"X-Fresh402-Trial-Key","description":"Separate one-time free entitlement, human ft_ only while /v2/trial reports enabled; separate machine fm_ only while /v3/agent-trial reports enabled. Idempotency-Key required; never combine with paid credentials. No automatic purchase."},"mppPayment":{"type":"apiKey","in":"header","name":"Authorization","description":"When mpp_payments.enabled: Payment credential from the original WWW-Authenticate challenge. Native EVM charge / Base USDC / EIP-3009. Persist original credential and private recovery token; never mix billing methods."},"customerSession":{"type":"apiKey","in":"header","name":"X-Fresh402-Customer-Session","description":"15-minute wallet-authenticated account-management session; never a prepaid execution key."},"prepaidKey":{"type":"apiKey","in":"header","name":"X-Fresh402-API-Key","description":"Prepaid REST or MCP execution key. Explicit idempotency, quoted tariff and maximum credit authorization required; never combine x402."},"x402Payment":{"type":"apiKey","in":"header","name":"PAYMENT-SIGNATURE","description":"x402 v2 exact USDC on Base (eip155:8453); use PAYMENT-REQUIRED challenge."}},"schemas":{"OpenApiDiffResult":{"type":"object","properties":{"watch_id":{"type":"string"},"url":{"type":"string"},"final_url":{"type":"string"},"hash":{"type":"string"},"previous_hash":{"type":"string"},"changed":{"type":"boolean"},"descriptive_only":{"type":"boolean"},"changes":{"type":"array","items":{"type":"object","properties":{"classification":{"enum":["definitely_breaking","potentially_breaking","additive","unclassified"]},"rule":{"type":"string"},"path":{"type":"string"},"before":{"type":"string"},"after":{"type":"string"},"evidence_index":{"type":"integer","minimum":0,"description":"Opt-in contract view only: index in the full original durable changes list."},"scope":{"enum":["selected_operation","shared_or_unknown"]}},"required":["classification","rule","path"]}},"counts":{"type":"object","properties":{"definitely_breaking":{"type":"integer"},"potentially_breaking":{"type":"integer"},"additive":{"type":"integer"},"unclassified":{"type":"integer"}}},"changes_truncated":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}},"assumptions":{"type":"array","items":{"type":"string"}},"source_provenance":{"type":"object","properties":{"baseline_url":{"type":"string"},"baseline_at":{"type":"string"},"requested_url":{"type":"string"},"final_url":{"type":"string"},"raw_source_hash":{"type":"string"},"registered_core_hash":{"type":"string"}}},"compare_to":{"enum":["previous","baseline","hash"]},"comparison_source":{"type":"string"},"work_units":{"type":"integer"},"reference_resolutions":{"type":"integer"},"openapi_versions":{"type":"object","properties":{"before":{"type":"string"},"after":{"type":"string"}}},"rules_version":{"type":"integer"},"algorithm":{"type":"string"},"semantic_model_used":{"type":"boolean"},"fetched_at":{"type":"string"},"contract_view":{"type":"object","properties":{"representation":{"const":"contract-impact-v1"},"status":{"enum":["breaking","review_required","no_breaking_change_observed"]},"used_operations":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"method":{"enum":["get","put","post","delete","options","head","patch","trace"]}},"required":["path","method"]}},"excluded_operation_changes":{"type":"integer"},"original_result_sha256":{"type":"string"},"hash_scope":{"type":"string"},"counts_scope":{"const":"full_document"},"limitation":{"type":"string"}}}},"required":["watch_id","hash","previous_hash","changed","changes","counts","source_provenance","rules_version"]},"Error":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"issues":{"type":"array","items":{"type":"object","properties":{"path":{"type":"array","items":{}},"message":{"type":"string"}}}}},"required":["error"]},"RegisterResult":{"type":"object","properties":{"html_attributes":{"type":"array","items":{"enum":["href","title","alt","aria-label"]}},"html_attribute_rules_version":{"const":1},"watch_id":{"type":"string"},"url":{"type":"string"},"final_url":{"type":"string"},"created":{"type":"boolean"},"baseline_created":{"type":"boolean"},"hash":{"type":"string"},"content_kind":{"enum":["html","json","text"]},"normalizer_version":{"type":"integer"},"content_length":{"type":"integer"},"snapshot_truncated":{"type":"boolean"},"created_at":{"type":"string"},"checked_at":{"type":"string"}},"required":["watch_id","url","created","baseline_created","hash"]},"CheckResult":{"type":"object","properties":{"html_attributes":{"type":"array","items":{"enum":["href","title","alt","aria-label"]}},"html_attribute_rules_version":{"const":1},"watch_id":{"type":"string"},"url":{"type":"string"},"final_url":{"type":"string"},"hash":{"type":"string"},"previous_hash":{"type":["string","null"]},"changed":{"type":["boolean","null"]},"raw_changed":{"type":["boolean","null"]},"noise_detected":{"type":"boolean"},"content_kind":{"type":"string"},"cached":{"type":"boolean"},"cache_status":{"type":"string"},"network_fetched":{"type":"boolean"},"comparison_source":{"type":"string"},"normalizer_version":{"type":"integer"},"diff":{"$ref":"#/components/schemas/TextDiff"},"snapshot_saved":{"type":"boolean"},"snapshot_truncated":{"type":"boolean"},"checked_at":{"type":"string"},"persistence_error":{"type":"string"}},"required":["watch_id","hash","changed","content_kind"]},"TextDiff":{"type":"object","properties":{"available":{"type":"boolean"},"changed":{"type":"boolean"},"change_ratio":{"type":"number"},"removed_excerpt":{"type":"string"},"added_excerpt":{"type":"string"},"content_truncated":{"type":"boolean"},"excerpt_truncated":{"type":"boolean","description":"True when bounded contextual added/removed excerpts were clipped; independent of retained snapshot completeness."},"reason":{"type":"string"}}},"ExtractResult":{"type":"object","properties":{"url":{"type":"string"},"final_url":{"type":"string"},"content_kind":{"enum":["html","json","text"]},"title":{"type":["string","null"]},"description":{"type":["string","null"]},"canonical_url":{"type":["string","null"]},"text":{"type":"string"},"text_length":{"type":"integer"},"truncated":{"type":"boolean"},"data":{},"data_omitted":{"type":"boolean"},"representation":{"const":"feed_entries_v1","description":"Present only for explicit feed_mode:entries. Existing content_kind remains text; existing watch/hash normalization is untouched."},"feed":{"anyOf":[{"type":"object","properties":{"format":{"enum":["rss2","atom"]},"parser_version":{"const":1},"source_url":{"type":"string"},"id":{"type":"string"},"identity_source":{"enum":["declared","link","source_url"]},"title":{"type":["string","null"]},"link":{"type":["string","null"]},"description":{"type":["string","null"]},"updated_at":{"type":["string","null"]},"updated_raw":{"type":["string","null"]},"entries":{"type":"array","maxItems":100,"items":{"type":"object","properties":{"id":{"type":"string"},"identity_source":{"enum":["declared","link","content_hash"]},"title":{"type":["string","null"]},"link":{"type":["string","null"]},"published_at":{"type":["string","null"]},"updated_at":{"type":["string","null"]},"published_raw":{"type":["string","null"]},"updated_raw":{"type":["string","null"]},"summary":{"type":["string","null"]},"content":{"type":["string","null"]},"content_hash":{"type":"string","description":"SHA256 of title,link,normalized publication time,summary and content; excludes poll/update timestamps and source position. Compare the same ID across retained client projections; does not prove semantic importance."},"evidence":{"type":"object","properties":{"entry_index":{"type":"integer"},"path":{"type":"string"}},"required":["entry_index","path"]}},"required":["id","identity_source","content_hash","evidence"]}},"entries_deduplicated":{"type":"integer"},"warnings":{"type":"array","items":{"type":"string"}}},"required":["format","parser_version","source_url","id","identity_source","entries","entries_deduplicated","warnings"]},{"type":"null"}],"description":"Only for feed_mode:entries; null when canonical projected text was clipped. Inert source-declared URLs are never crawled; raw timestamp evidence can be unrecognized. Feed/entry identity fallbacks are explicit."},"feed_omitted":{"type":"boolean"},"json_pointers":{"type":"array","items":{"type":"string","description":"Ordered exact RFC6901 selection metadata; data/text/hash describe the full aggregate projection before clipping."}},"json_pointer":{"type":"string","description":"Present only for an explicitly selected exact JSON Pointer; text, data and hash describe that selected value after exclusions."},"headings":{"type":"array","items":{"type":"object","properties":{"level":{"type":"integer"},"text":{"type":"string"}}}},"links":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"text":{"type":"string"}}}},"structured_data":{"type":"array","items":{}},"hash":{"type":"string"},"fetched_at":{"type":"string"},"extractor_version":{"type":"integer"},"warnings":{"type":"array","items":{"type":"string"}}},"required":["url","final_url","content_kind","text","truncated","hash"]},"SmartDiffResult":{"type":"object","properties":{"html_attributes":{"type":"array","items":{"enum":["href","title","alt","aria-label"]}},"html_attribute_rules_version":{"const":1},"json_array_keys":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"key":{"type":"string"}},"required":["path","key"]}},"array_moves":{"type":"array","items":{"type":"object","properties":{"before_path":{"type":"string"},"after_path":{"type":"string"},"array_key":{"type":"object","properties":{"pointer":{"type":"string"},"value":{"type":["string","integer"]}},"required":["pointer","value"]}},"required":["before_path","after_path","array_key"]}},"array_move_count":{"type":"integer"},"array_moves_truncated":{"type":"boolean"},"watch_id":{"type":"string"},"url":{"type":"string"},"final_url":{"type":"string"},"hash":{"type":"string"},"previous_hash":{"type":"string"},"content_kind":{"type":"string"},"changed":{"type":"boolean"},"compare_to":{"enum":["previous","baseline","hash"]},"comparison_source":{"type":"string"},"comparison_quality":{"enum":["structural","legacy_text"]},"changes":{"type":"object","properties":{"added":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"before":{},"after":{},"before_path":{"type":"string"},"after_path":{"type":"string"},"array_key":{"type":"object","properties":{"pointer":{"type":"string"},"value":{"type":["string","integer"]}},"required":["pointer","value"]}},"required":["path"]}},"removed":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"before":{},"after":{},"before_path":{"type":"string"},"after_path":{"type":"string"},"array_key":{"type":"object","properties":{"pointer":{"type":"string"},"value":{"type":["string","integer"]}},"required":["pointer","value"]}},"required":["path"]}},"modified":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"before":{},"after":{},"before_path":{"type":"string"},"after_path":{"type":"string"},"array_key":{"type":"object","properties":{"pointer":{"type":"string"},"value":{"type":["string","integer"]}},"required":["pointer","value"]}},"required":["path"]}}}},"counts":{"type":"object","properties":{"added":{"type":"integer"},"removed":{"type":"integer"},"modified":{"type":"integer"}}},"changes_truncated":{"type":"boolean"},"significance":{"type":"object","properties":{"score":{"type":"integer"},"level":{"enum":["none","low","medium","high"]},"reasons":{"type":"array","items":{"type":"string"}},"rules_version":{"type":"integer"}}},"algorithm":{"type":"string"},"semantic_model_used":{"type":"boolean"},"fetched_at":{"type":"string"},"warnings":{"type":"array","items":{"type":"string"}},"persistence_error":{"type":"string"}},"required":["watch_id","hash","changed","changes","counts","significance"]},"HistoryResult":{"type":"object","properties":{"watch_id":{"type":["string","null"]},"url":{"type":"string"},"count":{"type":"integer"},"normalizer_version":{"type":"integer"},"source":{"type":"string"},"snapshots":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"hash":{"type":"string"},"raw_hash":{"type":["string","null"]},"created_at":{"type":"string"},"normalizer_version":{"type":"integer"},"content_kind":{"type":"string"},"content_truncated":{"type":"integer"}}}}}},"LegacyDiffResult":{"type":"object","properties":{"watch_id":{"type":["string","null"]},"url":{"type":"string"},"changed":{"type":"boolean"},"normalizer_version":{"type":"integer"},"source":{"type":"string"},"snapshots_available":{"type":"integer"},"message":{"type":"string"},"from":{"type":"object","properties":{"snapshot_id":{"type":"integer"},"hash":{"type":"string"},"created_at":{"type":"string"}}},"to":{"type":"object","properties":{"snapshot_id":{"type":"integer"},"hash":{"type":"string"},"created_at":{"type":"string"}}},"diff":{"$ref":"#/components/schemas/TextDiff"}}},"StatsResult":{"type":"object","properties":{"paid_calls":{"type":"integer"},"test_paid_calls":{"type":"integer"},"external_paid_calls":{"type":"integer"},"revenue_usdc":{"type":"number"},"external_revenue_usdc":{"type":"number"},"last_paid_at":{"type":["string","null"]},"last_external_paid_at":{"type":["string","null"]}}},"ContractObservation":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"observation_saved":{"type":"boolean","const":true},"snapshot_saved":{"type":"boolean","const":true},"persistence":{"type":"string","enum":["atomic_with_financial_delivery","atomic_with_entitlement_delivery"]},"accounting":{"type":"object","properties":{"rpc_requests":{"type":"integer","minimum":1,"maximum":18},"response_bytes":{"type":"integer","minimum":0,"maximum":4194304},"wire_response_bytes":{"type":"integer","minimum":0,"maximum":4194304},"scope":{"type":"string","minLength":1}},"required":["rpc_requests","response_bytes","wire_response_bytes","scope"],"additionalProperties":{}},"limitations":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"string","maxLength":1024}},"tool":{"type":"string","const":"fresh402_contract_watch"},"snapshot_id":{"type":"string","pattern":"^s_[a-f0-9]{64}$"},"snapshot":{"type":"object","properties":{"address":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"block":{"type":"object","properties":{"number":{"type":"integer","minimum":0,"maximum":9007199254740991},"hash":{"type":"string","pattern":"^0x[a-f0-9]{64}$"},"parent_hash":{"type":"string","pattern":"^0x[a-f0-9]{64}$"},"timestamp":{"type":"integer","minimum":0,"maximum":9007199254740991},"chain_id":{"type":"number","const":8453},"policy":{"type":"string","const":"finalized"},"finalized":{"type":"boolean","const":true},"source":{"type":"string","pattern":"^[a-z0-9_-]{3,64}$"},"observed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"trust":{"type":"string","minLength":1,"maxLength":256}},"required":["number","hash","parent_hash","timestamp","chain_id","policy","finalized","source","observed_at","trust"],"additionalProperties":{}},"fields":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"warnings":{"type":"array","items":{"type":"string"}}},"required":["address","block","fields","warnings"],"additionalProperties":{}},"comparison":{"type":"object","properties":{"status":{"type":"string","enum":["unknown","changed","unchanged"]},"changes":{"maxItems":32,"type":"array","items":{}}},"required":["status","changes"],"additionalProperties":{}},"events":{"maxItems":100,"type":"array","items":{}},"event_coverage":{"type":"object","properties":{"status":{"type":"string"}},"required":["status"],"additionalProperties":{}}},"required":["observation_saved","snapshot_saved","persistence","accounting","limitations","tool","snapshot_id","snapshot","comparison","events","event_coverage"],"additionalProperties":{}},{"type":"object","properties":{"observation_saved":{"type":"boolean","const":false},"snapshot_saved":{"type":"boolean","const":false},"persistence":{"type":"string","enum":["atomic_with_financial_delivery","atomic_with_entitlement_delivery"]},"accounting":{"type":"object","properties":{"rpc_requests":{"type":"integer","minimum":1,"maximum":18},"response_bytes":{"type":"integer","minimum":0,"maximum":4194304},"wire_response_bytes":{"type":"integer","minimum":0,"maximum":4194304},"scope":{"type":"string","minLength":1}},"required":["rpc_requests","response_bytes","wire_response_bytes","scope"],"additionalProperties":{}},"limitations":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"string","maxLength":1024}},"tool":{"type":"string","const":"fresh402_contract_watch"},"snapshot_id":{"type":"string","pattern":"^s_[a-f0-9]{64}$"},"snapshot":{"type":"object","properties":{"address":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"block":{"type":"object","properties":{"number":{"type":"integer","minimum":0,"maximum":9007199254740991},"hash":{"type":"string","pattern":"^0x[a-f0-9]{64}$"},"parent_hash":{"type":"string","pattern":"^0x[a-f0-9]{64}$"},"timestamp":{"type":"integer","minimum":0,"maximum":9007199254740991},"chain_id":{"type":"number","const":8453},"policy":{"type":"string","const":"finalized"},"finalized":{"type":"boolean","const":true},"source":{"type":"string","pattern":"^[a-z0-9_-]{3,64}$"},"observed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"trust":{"type":"string","minLength":1,"maxLength":256}},"required":["number","hash","parent_hash","timestamp","chain_id","policy","finalized","source","observed_at","trust"],"additionalProperties":{}},"fields":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"warnings":{"type":"array","items":{"type":"string"}}},"required":["address","block","fields","warnings"],"additionalProperties":{}},"comparison":{"type":"object","properties":{"status":{"type":"string","enum":["unknown","changed","unchanged"]},"changes":{"maxItems":32,"type":"array","items":{}}},"required":["status","changes"],"additionalProperties":{}},"events":{"maxItems":100,"type":"array","items":{}},"event_coverage":{"type":"object","properties":{"status":{"type":"string"}},"required":["status"],"additionalProperties":{}},"cursor_saved":{"type":"boolean","const":false},"persistence_error":{"type":"string","minLength":1,"maxLength":512}},"required":["observation_saved","snapshot_saved","persistence","accounting","limitations","tool","snapshot_id","snapshot","comparison","events","event_coverage","cursor_saved","persistence_error"],"additionalProperties":{}}]},"WalletObservation":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"observation_saved":{"type":"boolean","const":true},"snapshot_saved":{"type":"boolean","const":false},"persistence":{"type":"string","enum":["atomic_with_financial_delivery","atomic_with_entitlement_delivery"]},"accounting":{"type":"object","properties":{"rpc_requests":{"type":"integer","minimum":1,"maximum":18},"response_bytes":{"type":"integer","minimum":0,"maximum":4194304},"wire_response_bytes":{"type":"integer","minimum":0,"maximum":4194304},"scope":{"type":"string","minLength":1}},"required":["rpc_requests","response_bytes","wire_response_bytes","scope"],"additionalProperties":{}},"limitations":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"string","maxLength":1024}},"tool":{"type":"string","const":"fresh402_wallet_watch"},"cursor_saved":{"type":"boolean","const":true},"state":{"type":"string","enum":["page","complete"]},"block":{"type":"object","properties":{"number":{"type":"integer","minimum":0,"maximum":9007199254740991},"hash":{"type":"string","pattern":"^0x[a-f0-9]{64}$"},"parent_hash":{"type":"string","pattern":"^0x[a-f0-9]{64}$"},"timestamp":{"type":"integer","minimum":0,"maximum":9007199254740991},"chain_id":{"type":"number","const":8453},"policy":{"type":"string","const":"finalized"},"finalized":{"type":"boolean","const":true},"source":{"type":"string","pattern":"^[a-z0-9_-]{3,64}$"},"observed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"trust":{"type":"string","minLength":1,"maxLength":256}},"required":["number","hash","parent_hash","timestamp","chain_id","policy","finalized","source","observed_at","trust"],"additionalProperties":{}},"next_cursor":{"type":"string","pattern":"^c_[a-f0-9]{64}$"},"events":{"maxItems":100,"type":"array","items":{}},"has_more":{"type":"boolean"},"interruption":{"type":"null"},"native_balance":{"type":"object","properties":{"asset":{"type":"string","const":"ETH"},"raw":{"type":"string","pattern":"^\\d+$"},"meaning":{"type":"string"}},"required":["asset","raw","meaning"],"additionalProperties":{}},"coverage":{"type":"object","properties":{"selected_tokens":{"minItems":1,"maxItems":4,"type":"array","items":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"}},"requested_to_block":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["selected_tokens","requested_to_block"],"additionalProperties":{}}},"required":["observation_saved","snapshot_saved","persistence","accounting","limitations","tool","cursor_saved","state","block","next_cursor","events","has_more","interruption","native_balance","coverage"],"additionalProperties":{}},{"type":"object","properties":{"observation_saved":{"type":"boolean","const":false},"snapshot_saved":{"type":"boolean","const":false},"persistence":{"type":"string","enum":["atomic_with_financial_delivery","atomic_with_entitlement_delivery"]},"accounting":{"type":"object","properties":{"rpc_requests":{"type":"integer","minimum":1,"maximum":18},"response_bytes":{"type":"integer","minimum":0,"maximum":4194304},"wire_response_bytes":{"type":"integer","minimum":0,"maximum":4194304},"scope":{"type":"string","minLength":1}},"required":["rpc_requests","response_bytes","wire_response_bytes","scope"],"additionalProperties":{}},"limitations":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"string","maxLength":1024}},"tool":{"type":"string","const":"fresh402_wallet_watch"},"cursor_saved":{"type":"boolean","const":false},"state":{"type":"string","enum":["page","complete"]},"block":{"type":"object","properties":{"number":{"type":"integer","minimum":0,"maximum":9007199254740991},"hash":{"type":"string","pattern":"^0x[a-f0-9]{64}$"},"parent_hash":{"type":"string","pattern":"^0x[a-f0-9]{64}$"},"timestamp":{"type":"integer","minimum":0,"maximum":9007199254740991},"chain_id":{"type":"number","const":8453},"policy":{"type":"string","const":"finalized"},"finalized":{"type":"boolean","const":true},"source":{"type":"string","pattern":"^[a-z0-9_-]{3,64}$"},"observed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"trust":{"type":"string","minLength":1,"maxLength":256}},"required":["number","hash","parent_hash","timestamp","chain_id","policy","finalized","source","observed_at","trust"],"additionalProperties":{}},"next_cursor":{"type":"string","pattern":"^c_[a-f0-9]{64}$"},"events":{"maxItems":100,"type":"array","items":{}},"has_more":{"type":"boolean"},"interruption":{"type":"null"},"native_balance":{"type":"object","properties":{"asset":{"type":"string","const":"ETH"},"raw":{"type":"string","pattern":"^\\d+$"},"meaning":{"type":"string"}},"required":["asset","raw","meaning"],"additionalProperties":{}},"coverage":{"type":"object","properties":{"selected_tokens":{"minItems":1,"maxItems":4,"type":"array","items":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"}},"requested_to_block":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["selected_tokens","requested_to_block"],"additionalProperties":{}},"persistence_error":{"type":"string","minLength":1,"maxLength":512}},"required":["observation_saved","snapshot_saved","persistence","accounting","limitations","tool","cursor_saved","state","block","next_cursor","events","has_more","interruption","native_balance","coverage","persistence_error"],"additionalProperties":{}}]},"TokenFactsObservation":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"observation_saved":{"type":"boolean","const":true},"snapshot_saved":{"type":"boolean","const":true},"persistence":{"type":"string","enum":["atomic_with_financial_delivery","atomic_with_entitlement_delivery"]},"accounting":{"type":"object","properties":{"rpc_requests":{"type":"integer","minimum":1,"maximum":18},"response_bytes":{"type":"integer","minimum":0,"maximum":4194304},"wire_response_bytes":{"type":"integer","minimum":0,"maximum":4194304},"scope":{"type":"string","minLength":1}},"required":["rpc_requests","response_bytes","wire_response_bytes","scope"],"additionalProperties":{}},"limitations":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"string","maxLength":1024}},"tool":{"type":"string","const":"fresh402_token_facts"},"snapshot_id":{"type":"string","pattern":"^s_[a-f0-9]{64}$"},"address":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"block":{"type":"object","properties":{"number":{"type":"integer","minimum":0,"maximum":9007199254740991},"hash":{"type":"string","pattern":"^0x[a-f0-9]{64}$"},"parent_hash":{"type":"string","pattern":"^0x[a-f0-9]{64}$"},"timestamp":{"type":"integer","minimum":0,"maximum":9007199254740991},"chain_id":{"type":"number","const":8453},"policy":{"type":"string","const":"finalized"},"finalized":{"type":"boolean","const":true},"source":{"type":"string","pattern":"^[a-z0-9_-]{3,64}$"},"observed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"trust":{"type":"string","minLength":1,"maxLength":256}},"required":["number","hash","parent_hash","timestamp","chain_id","policy","finalized","source","observed_at","trust"],"additionalProperties":{}},"assessment_status":{"type":"string","const":"facts_only"},"facts":{"maxItems":32,"type":"array","items":{"type":"object","properties":{"category":{"type":"string"},"status":{"type":"string","enum":["detected","not_detected_with_sufficient_coverage","unknown","not_assessed"]},"observation_confidence":{"type":"string","enum":["none","low","medium","high"]}},"required":["category","status","observation_confidence"],"additionalProperties":{}}},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"coverage":{"type":"object","properties":{"verified_source":{"type":"boolean","const":false},"trading_simulation":{"type":"boolean","const":false},"categories":{"minItems":1,"maxItems":3,"type":"array","items":{"type":"string","enum":["identity","controls","supply"]}}},"required":["verified_source","trading_simulation","categories"],"additionalProperties":false}},"required":["observation_saved","snapshot_saved","persistence","accounting","limitations","tool","snapshot_id","address","block","assessment_status","facts","metadata","coverage"],"additionalProperties":{}},{"type":"object","properties":{"observation_saved":{"type":"boolean","const":false},"snapshot_saved":{"type":"boolean","const":false},"persistence":{"type":"string","enum":["atomic_with_financial_delivery","atomic_with_entitlement_delivery"]},"accounting":{"type":"object","properties":{"rpc_requests":{"type":"integer","minimum":1,"maximum":18},"response_bytes":{"type":"integer","minimum":0,"maximum":4194304},"wire_response_bytes":{"type":"integer","minimum":0,"maximum":4194304},"scope":{"type":"string","minLength":1}},"required":["rpc_requests","response_bytes","wire_response_bytes","scope"],"additionalProperties":{}},"limitations":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"string","maxLength":1024}},"tool":{"type":"string","const":"fresh402_token_facts"},"snapshot_id":{"type":"string","pattern":"^s_[a-f0-9]{64}$"},"address":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"block":{"type":"object","properties":{"number":{"type":"integer","minimum":0,"maximum":9007199254740991},"hash":{"type":"string","pattern":"^0x[a-f0-9]{64}$"},"parent_hash":{"type":"string","pattern":"^0x[a-f0-9]{64}$"},"timestamp":{"type":"integer","minimum":0,"maximum":9007199254740991},"chain_id":{"type":"number","const":8453},"policy":{"type":"string","const":"finalized"},"finalized":{"type":"boolean","const":true},"source":{"type":"string","pattern":"^[a-z0-9_-]{3,64}$"},"observed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"trust":{"type":"string","minLength":1,"maxLength":256}},"required":["number","hash","parent_hash","timestamp","chain_id","policy","finalized","source","observed_at","trust"],"additionalProperties":{}},"assessment_status":{"type":"string","const":"facts_only"},"facts":{"maxItems":32,"type":"array","items":{"type":"object","properties":{"category":{"type":"string"},"status":{"type":"string","enum":["detected","not_detected_with_sufficient_coverage","unknown","not_assessed"]},"observation_confidence":{"type":"string","enum":["none","low","medium","high"]}},"required":["category","status","observation_confidence"],"additionalProperties":{}}},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"coverage":{"type":"object","properties":{"verified_source":{"type":"boolean","const":false},"trading_simulation":{"type":"boolean","const":false},"categories":{"minItems":1,"maxItems":3,"type":"array","items":{"type":"string","enum":["identity","controls","supply"]}}},"required":["verified_source","trading_simulation","categories"],"additionalProperties":false},"cursor_saved":{"type":"boolean","const":false},"persistence_error":{"type":"string","minLength":1,"maxLength":512}},"required":["observation_saved","snapshot_saved","persistence","accounting","limitations","tool","snapshot_id","address","block","assessment_status","facts","metadata","coverage","cursor_saved","persistence_error"],"additionalProperties":{}}]},"PrepaidBalance":{"type":"object","properties":{"account_id":{"type":"string","pattern":"^pa_[a-f0-9]{32}$"},"available":{"type":"integer","minimum":0,"description":"Legacy ledger available; may include frozen unused early credits. Use spendable for admission."},"reserved":{"type":"integer","minimum":0},"spendable":{"type":"integer","minimum":0,"description":"Finalized available plus currently usable early credits; kill switch and freshness applied."},"all_service_available":{"type":"integer","minimum":0,"description":"Provenance subset of finalized available from new explicitly accepted all-service packages; never additional credits."},"all_service_reserved":{"type":"integer","minimum":0},"finalized_available":{"type":"integer","minimum":0},"provisional_available":{"type":"integer","minimum":0},"provisional_unspent":{"type":"integer","minimum":0,"description":"Unused early credits, including frozen amounts."},"provisional_reserved":{"type":"integer","minimum":0},"provisional_spent":{"type":"integer","minimum":0,"description":"Cumulative credits consumed while provisional, including purchases later finalized."},"tariff_version":{"type":"integer","enum":[1,2,3]},"status":{"type":"string"}}},"FundingStatus":{"type":"object","properties":{"payment_protocol":{"type":"string","enum":["x402","mpp"],"description":"Immutable purchase protocol; omitted input defaults to x402."},"intent_id":{"type":"string","pattern":"^pf_[a-f0-9]{32}$"},"account_id":{"type":"string"},"package_id":{"type":"string"},"credits":{"type":"integer","minimum":0},"amount_atomic":{"type":"integer","description":"Immutable package amount in native USDC atomic units (6 decimals)."},"state":{"type":"string","enum":["intent","settling","confirmed","credited"],"description":"confirmed alone is not canonical finality."},"purchase_status":{"type":"string","enum":["pending","included","provisional","provisional_frozen","revoked","invalid","finalized"]},"inclusion_status":{"type":"string","enum":["pending","verified","uncertain","invalid"]},"included_at":{"type":["integer","null"],"description":"Unix epoch milliseconds"},"finalized":{"type":"boolean"},"finality_pending":{"type":"boolean"},"settlement_kind":{"type":"string"},"recovery_status":{"type":"string"},"provisional_granted":{"type":"integer","minimum":0},"provisional_remaining":{"type":"integer","minimum":0},"provisional_reserved":{"type":"integer","minimum":0},"provisional_spent":{"type":"integer","minimum":0},"provisional_revoked":{"type":"integer","minimum":0},"provisional_available":{"type":"integer","minimum":0},"resource":{"type":"string"},"nonce":{"type":"string"},"network":{"type":"string"},"asset":{"type":"string"},"pay_to":{"type":"string"},"recipient_version":{"type":"string","enum":["eoa-v1","safe-v1"],"description":"Immutable original merchant policy. Recover using this intent recipient, regardless of current new-purchase quotes."},"all_services_terms_digest":{"type":"string","pattern":"^[a-f0-9]{64}$"},"all_services":{"type":"boolean"},"payer":{"type":"string"},"expires_at":{"type":["integer","null"],"description":"Unix epoch milliseconds"},"transaction":{"type":["string","null"]},"submitted":{"type":"boolean"}}}}}}