{"uid":"cap_v9iaTeRl-p0eXBowzCGLI","slug":"watch-diff-754fd805","name":"Watch & Diff","description":"Did this URL change since my last check? Fetch, normalize, hash and diff any page, region or JSON for AI agents running recurring tasks. State per paying wallet, 90 days. Pay per call over x402, no API key.","url":"https://watch-diff.agent-utils.workers.dev/v1/diff","method":"POST","headers":{},"bodySchema":{"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":["POST"],"type":"string"},"queryParams":{"type":"object","required":["before","after"],"properties":{"after":{"type":"string","maxLength":500000},"before":{"type":"string","maxLength":500000},"ignoreWhitespace":{"type":"boolean","default":true}}}},"additionalProperties":false},"output":{"type":"object","required":["type"],"properties":{"type":{"type":"string"},"example":{"type":"object","properties":{"diff":{"type":"object","properties":{"added":{"type":"array","items":{"type":"string"}},"removed":{"type":"array","items":{"type":"string"}},"truncated":{"type":"boolean"},"addedLines":{"type":"integer"},"removedLines":{"type":"integer"}}},"changed":{"type":"boolean"},"similarity":{"type":"number","description":"0..1 share of unchanged lines"}}}}}}},"responseSchema":{"type":"json","example":{"diff":{"added":["price: 12"],"removed":["price: 10"],"truncated":false,"addedLines":1,"removedLines":1},"changed":true,"similarity":0.5}},"example":null,"exampleRequest":null,"tags":["x402"],"displayCostAmount":"0.005","displayCostAsset":"USDC","priceDynamic":false,"priceHint":null,"priceStatus":"priced","priceSource":"probe","requiresHandshake":false,"reviewCount":0,"rating":{"score":"0.00","successRate":"0.00","reviews":0,"stars":null,"state":"unrated"},"availabilityStatus":"unknown","priceObserved":null,"sessionDeposit":null,"pricing":{"kind":"static","summary":"$0.005/call","primary":{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.005","per":"call","confidence":"exact"},"accepted":[{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.005","per":"call","confidence":"exact"}]},"paymentMethods":[{"uid":"pm_IauD4scnjx5JrThyUfxnC","protocol":"x402","methodType":"crypto","chain":"base","mode":"charge","costAmount":"0.005","costPer":"request","priority":0,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","unit":"request","depositMicros":null,"planRef":null}],"brandName":null,"brandSlug":null,"brandBaseUrl":null,"brandDocsUrl":null,"whatItDoes":"Fetches two versions of a URL's content, normalizes and hashes them, then returns a structured diff showing exactly what changed between the before and after snapshots.","exampleAgentPrompt":"Check if this product page changed since my last snapshot — here's the before text and the after text, and tell me exactly which lines were added or removed and what the similarity score is.","exampleUseCases":[{"title":"E-commerce price change detection","prompt":"Compare this product page's content from yesterday versus right now and tell me if the price changed — here's the before snapshot and the after snapshot, ignore whitespace differences."},{"title":"Competitor landing page monitoring","prompt":"I grabbed our competitor's homepage last week and again just now — diff these two versions and show me which lines were added and which were removed so I know if they updated their messaging."},{"title":"JSON API response drift tracking","prompt":"Here are two JSON payloads from the same API endpoint fetched an hour apart — compare them and tell me if anything changed, and give me the similarity score and the specific lines that differ."}],"resultDescription":"Returns a JSON object with a 'changed' boolean, a 'similarity' score from 0 to 1, and a 'diff' object containing arrays of added and removed lines, integer counts of added and removed lines, and a 'truncated' flag if the diff was too large to return in full.","failureModes":["Input 'before' or 'after' content exceeds 500,000 character limit — request rejected","Missing required 'before' or 'after' query parameters — schema validation error","Payment not provided or insufficient USDC balance via x402 — 402 Payment Required response","Content is binary or undecodable — normalization may fail or return empty diff","Extremely large payloads may result in truncated diff output (truncated: true)"],"whenToPreferThis":"Choose this endpoint when you need a structured, line-level diff with similarity scoring for recurring agent tasks — especially when you already have both the before and after content strings and want a normalized comparison that ignores whitespace noise. It is ideal for AI agents running scheduled monitoring loops that need to detect meaningful changes without storing state themselves. Prefer it over generic scraping tools when you need the diff result as structured data (added/removed arrays) rather than raw HTML.","instructions":null,"reviewSummary":null,"reviewSummaryHighlights":null,"reviewSummaryConcerns":null,"reviewSummaryGeneratedAt":null,"activationCount":0,"lastUsedAt":null,"lastSuccessfullyRanAt":null,"lastHealthCheckAt":"2026-09-14T12:42:45.606Z","isFirstParty":false}