# ChgWatch DiffMulti — Bulk URL Change Detector

> ChgWatch DiffMulti — Bulk URL 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 multiple URLs simultaneously for content changes, returning per-URL diff statistics (lines added/removed, content hash) against a stored or watched baseline.

## Facts

- Endpoint: GET https://api.firstmention.uk/s/chgwatch/diffmulti?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-diffmulti-bulk-url-change-detector-71e18fd5
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_xJyczoLVZmSb5wRp8Fd1x

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-diffmulti-bulk-url-change-detector-71e18fd5
```

Example prompt: Check these three pages for any content changes since the last stored snapshot — https://example.com/news, https://example.com/about, and https://example.com/products — using text mode and tell me which ones changed and how many lines were added or removed.

## When to prefer this

Use this endpoint when you need to check multiple URLs for changes in a single API call rather than looping over a single-URL endpoint. It is ideal for bulk monitoring workflows, agent pipelines that track many pages simultaneously, and cost-sensitive scenarios where batching up to 20 URLs into one $0.01 call is more efficient than per-URL pricing. Prefer it over single-URL diff endpoints when you have 2–20 pages to check at once.

## Known failure modes

- URLs that have never been baselined return need_baseline_count > 0 and no diff data for those entries
- Unreachable or error URLs increment error_count and return ok: false for that entry
- Exceeding the 20-URL limit may cause an error or truncation
- Invalid mode enum values result in a request validation error
- Missing required 'urls' query parameter causes a 400-level error
- Payment failure (x402) results in a 402 Payment Required response before any processing

## 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 URLs checked, a per-URL results array (each containing ok, url, changed boolean, added_count, removed_count, and current_hash), plus summary counts for any_changed, error_count, changed_count, and need_baseline_count.

## 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-diffmulti-bulk-url-change-detector-71e18fd5/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)
