# ChgWatch Diff — Web Page Change Detector

> ChgWatch Diff — Web Page Change Detector is a paid API for AI agents from api.firstmention.uk, paid per call via x402, $0.01/call, status unknown (last checked 2026-10-29).

Checks one or more URLs for content changes since a stored or hashed baseline, returning a diff summary with added/removed line counts and a current hash.

## Facts

- Endpoint: GET https://api.firstmention.uk/s/chgwatch/diff?utm_source=zero.xyz
- Price: $0.01/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-29
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/chgwatch-diff-web-page-change-detector-94a9ea38
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_B8wN__0gOC_itCmePopf4

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability chgwatch-diff-web-page-change-detector-94a9ea38
```

Example prompt: Check whether https://example.com/pricing and https://example.com/docs have changed since their stored baseline — use text mode and show me 5 lines of context around any differences.

## When to prefer this

Choose this endpoint when you need to detect content changes on one or more specific URLs with diff-level granularity (added/removed line counts and hash comparison) rather than just a reachability ping. It is ideal for monitoring competitor pages, regulatory filings, documentation sites, or any scenario where the agent needs to act only when content actually changes. Prefer it over generic web scrapers when change detection — not content extraction — is the primary goal.

## Known failure modes

- URL is unreachable or returns non-200 — ok:false for that result, increments error_count
- No stored baseline exists for a URL in stored mode — increments need_baseline_count, changed is indeterminate
- More than 20 URLs submitted — request rejected
- Invalid mode enum value — schema validation error
- Payment not provided or insufficient — 402 Payment Required response

## How this service works

Pay-per-call HTTP APIs, paid with x402 in USDC on Base (eip155:8453): agentkit, api-change-check, basedue, basewatch, chainread, check-sanctions, chgwatch, company-facts, composite, edgar, feednews, pageaudit, solcheck, token-dd, txpreflight, walletcheck, webmd, webread, websearch, x402index. Each operation describes its service.

## Output

Returns a JSON object with an overall ok flag, total count of URLs checked, a results array per URL containing ok status, changed boolean, added_count and removed_count of lines, and current_hash; plus top-level any_changed, error_count, changed_count, and need_baseline_count aggregates.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "required": [
  "input"
 ],
 "properties": {
  "input": {
   "type": "object",
   "required": [
    "type",
    "method"
   ],
   "properties": {
    "type": {
     "type": "string",
     "const": "http"
    },
    "method": {
     "enum": [
      "GET",
      "HEAD",
      "DELETE"
     ],
     "type": "string"
    },
    "headers": {
     "type": "object",
     "additionalProperties": {
      "type": "string"
     }
    },
    "queryParams": {
     "type": "object",
     "required": [
      "urls"
     ],
     "properties": {
      "url": {
       "type": "string",
       "description": "Single URL alternative to urls"
      },
      "mode": {
       "enum": [
        "text",
        "markdown",
        "meta",
        "links"
       ],
       "type": "string"
      },
      "urls": {
       "type": "string",
       "description": "Comma-separated URLs to check (max 20)"
      },
      "baseline": {
       "enum": [
        "stored",
        "watch"
       ],
       "type": "string"
      },
      "prev_hash": {
       "type": "string"
      },
      "context_lines": {
       "type": "integer",
       "maximum": 500,
       "minimum": 0
      }
     }
    }
   },
   "additionalProperties": false
  },
  "output": {
   "type": "object",
   "required": [
    "type"
   ],
   "properties": {
    "type": {
     "type": "string"
    },
    "example": {
     "type": "object",
     "properties": {
      "ok": {
       "type": "boolean"
      },
      "checked": {
       "type": "number"
      },
      "results": {
       "type": "array",
       "items": {
        "type": "object",
        "properties": {
         "ok": {
          "type": "boolean"
         },
         "url": {
          "type": "string"
         },
         "changed": {
          "type": "boolean"
         },
         "added_count": {
          "type": "number"
         },
         "current_hash": {
          "type": "string"
         },
         "removed_count": {
          "type": "number"
         }
        }
       }
      },
      "any_changed": {
       "type": "boolean"
      },
      "error_count": {
       "type": "number"
      },
      "changed_count": {
       "type": "number"
      },
      "need_baseline_count": {
       "type": "number"
      }
     }
    }
   }
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "ok": true,
  "checked": 2,
  "results": [
   {
    "ok": true,
    "url": "https://example.com/",
    "changed": true,
    "added_count": 2,
    "current_hash": "0a080719be9f",
    "removed_count": 1
   }
  ],
  "any_changed": true,
  "error_count": 0,
  "changed_count": 1,
  "need_baseline_count": 0
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/chgwatch-diff-web-page-change-detector-94a9ea38/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from api.firstmention.uk](https://www.zero.xyz/host/api.firstmention.uk/llms.txt)
