Web intelligence: free baseline, Check, Extract, Smart Diff and OpenAPI Diff. x402 USDC on Base.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Check whether public HTML, JSON or text changed; 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.
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.
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.
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.
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.
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.
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.
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.
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.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Check whether public HTML, JSON or text changed; 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.
| Argument | Type | Description |
|---|---|---|
| url | string | 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. |
| selector | string | 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. |
| watch_id | string | 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. |
| include_diff | boolean | 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. |
| previous_hash | string | 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. |
| max_age_seconds | integer | 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. |
| ignore_selectors | array | 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. |
| ignore_json_paths | array | 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. |
{
"type": "object",
"oneOf": [
{
"required": [
"url"
]
},
{
"required": [
"watch_id"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"examples": [
{
"url": "https://example.com/docs",
"selector": "main",
"include_diff": true,
"max_age_seconds": 0
}
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"maxLength": 4096,
"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."
},
"selector": {
"type": "string",
"maxLength": 256,
"minLength": 1,
"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."
},
"watch_id": {
"type": "string",
"pattern": "^w_[a-f0-9]{32}$",
"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."
},
"include_diff": {
"type": "boolean",
"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."
},
"previous_hash": {
"type": "string",
"pattern": "^[a-fA-F0-9]{64}$",
"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."
},
"max_age_seconds": {
"type": "integer",
"maximum": 86400,
"minimum": 0,
"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."
},
"ignore_selectors": {
"type": "array",
"items": {
"type": "string",
"maxLength": 256,
"minLength": 1,
"description": "HTML element(s) to remove before normalization: a supported CSS selector, 1-256 characters, e.g. '.timestamp' or 'nav'."
},
"maxItems": 20,
"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."
},
"ignore_json_paths": {
"type": "array",
"items": {
"type": "string",
"pattern": "^\\/",
"maxLength": 256,
"minLength": 1,
"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'."
},
"maxItems": 20,
"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."
}
},
"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."
}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 CSS scope, noise exclusions and exact JSON Pointer selection via json_pointer (JSON only; missing fields return 422). 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.
| Argument | Type | Description |
|---|---|---|
| url* | string | 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. |
Detect structural compatibility changes in a public JSON OpenAPI 3.0/3.1 contract: paths, methods, parameters, request requirements and response schemas. 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.
| Argument | Type | Description |
|---|---|---|
| watch_id* | string | 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. |
Create or retrieve a free persistent baseline for public HTTPS HTML, JSON or plain text. Use before Smart Diff or OpenAPI Contract Diff, or to obtain a reusable watch_id/hash for Check. Required url plus optional CSS/JSON exclusions identify the watch; changing rules creates a different watch. Repeating the same registration returns existing state without fetching or refreshing it. Reuse the actual returned watch_id; never invent an ID. Registration is free ($0), subject to quotas, and requires no x402 payment client; subsequent comparison tools are paid. Check also accepts url directly and can create its watch during the paid call. No JavaScript execution or background monitoring. For OpenAPI comparisons register the JSON contract without any content rules.
| Argument | Type | Description |
|---|---|---|
| url* | string | 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 | string | 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 | array | 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']. |
| ignore_json_paths |
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 to 200 changes; 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.
| Argument | Type | Description |
|---|---|---|
| watch_id* | string | 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. |
| selector | string | 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. |
| max_chars | integer | 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). |
| json_pointer | string | 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. |
| include_links | boolean | 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. |
| ignore_selectors | array | 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']. |
| ignore_json_paths | array | 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']. |
| include_structured_data | boolean | 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": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"examples": [
{
"url": "https://example.com/docs",
"selector": "main",
"max_chars": 20000,
"include_links": true,
"include_structured_data": false
}
],
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"maxLength": 4096,
"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",
"maxLength": 256,
"minLength": 1,
"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."
},
"max_chars": {
"type": "integer",
"default": 20000,
"maximum": 50000,
"minimum": 100,
"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)."
},
"json_pointer": {
"type": "string",
"pattern": "^(?:\\/(?:[^~]|~[01])*)?$",
"maxLength": 256,
"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."
},
"include_links": {
"type": "boolean",
"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."
},
"ignore_selectors": {
"type": "array",
"items": {
"type": "string",
"maxLength": 256,
"minLength": 1,
"description": "HTML element(s) to remove before normalization: a supported CSS selector, 1-256 characters, e.g. '.timestamp' or 'nav'."
},
"maxItems": 20,
"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']."
},
"ignore_json_paths": {
"type": "array",
"items": {
"type": "string",
"pattern": "^\\/",
"maxLength": 256,
"minLength": 1,
"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'."
},
"maxItems": 20,
"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']."
},
"include_structured_data": {
"type": "boolean",
"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."
}
},
"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. Unknown fields are rejected.",
"additionalProperties": false
}| compare_to | string | 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. |
| previous_hash | string | 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": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"watch_id"
],
"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": {
"enum": [
"previous",
"baseline"
],
"type": "string",
"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."
},
"previous_hash": {
"type": "string",
"pattern": "^[a-fA-F0-9]{64}$",
"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."
}
},
"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.",
"additionalProperties": false
}| array |
| 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']. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"examples": [
{
"url": "https://example.com/docs",
"selector": "main",
"ignore_selectors": [
".timestamp"
]
}
],
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"maxLength": 4096,
"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",
"maxLength": 256,
"minLength": 1,
"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": {
"type": "array",
"items": {
"type": "string",
"maxLength": 256,
"minLength": 1,
"description": "HTML element(s) to remove before normalization: a supported CSS selector, 1-256 characters, e.g. '.timestamp' or 'nav'."
},
"maxItems": 20,
"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']."
},
"ignore_json_paths": {
"type": "array",
"items": {
"type": "string",
"pattern": "^\\/",
"maxLength": 256,
"minLength": 1,
"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'."
},
"maxItems": 20,
"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']."
}
},
"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."
}| compare_to |
| string |
| 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. |
| previous_hash | string | 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": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"watch_id"
],
"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": {
"enum": [
"previous",
"baseline"
],
"type": "string",
"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."
},
"previous_hash": {
"type": "string",
"pattern": "^[a-fA-F0-9]{64}$",
"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."
}
},
"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.",
"additionalProperties": false
}