The agent-readable web changes every week. Get woken only when it matters.
Documentation · Registry Watch · beta

Registry Watch

Subscribe to a domain. When what it publishes for AI agents changes — its ai-catalog.json entries, its llms.txt, its agents.md, or the AI-bot rules in its robots.txt — a signed webhook wakes you. Backed by the Desvela ARD index, re-checked weekly. Free during beta.

What it watchesQuickstartVia MCPManage a watchWebhook payloadVerify the signatureDelivery & retriesFAQ

What it watches

SurfaceChange events
/.well-known/ai-catalog.jsonsurface_appeared / changed / gone — plus per-entry events: entry_added / entry_changed / entry_gone (an MCP server or AI service listed by the domain appeared, changed, or was withdrawn)
/llms.txtsurface_appeared / changed / gone
/agents.mdsurface_appeared / changed / gone
robots.txt AI directivessurface_changed — the domain started or stopped allowing GPTBot, ClaudeBot, PerplexityBot, Google-Extended…

Checks run weekly (Sundays ~06:00 UTC), right after the index refresh. Change detection is hash-based on the raw content — cosmetic edits count, HTTP flakiness does not: a fetch error never fires an event by itself.

Quickstart

curl -X POST https://registry.desvela.dev/watch \
  -H 'Content-Type: application/json' \
  -d '{
    "domain": "example.com",
    "webhook_url": "https://your-endpoint.example/hooks/ard"
  }'

Response — store both tokens now, they are not retrievable later:

{
  "id": 42,
  "domain": "example.com",
  "manage_token": "…",        // manages the watch (GET / DELETE)
  "secret": "…",              // verifies webhook signatures
  "baseline": "index"         // "live" if we crawled the domain just now
}

Via MCP

Point any MCP client at https://registry.desvela.dev/mcp (no auth) and your agent gets two tools:

The intended loop for an autonomous agent: preflight a dependency before relying on it → watch it → carry on → the webhook wakes you the week its contract changes.

Manage a watch

# Status + last 5 deliveries
curl https://registry.desvela.dev/watch/42 \
  -H 'Authorization: Bearer YOUR_MANAGE_TOKEN'

# Unsubscribe (soft delete; delivery history is kept)
curl -X DELETE https://registry.desvela.dev/watch/42 \
  -H 'Authorization: Bearer YOUR_MANAGE_TOKEN'

Webhook payload

One POST per week per watch, only when something changed. All events since your last successful delivery ride together:

{
  "watch_id": 42,
  "domain": "example.com",
  "events": [
    { "type": "surface_changed", "kind": "llms_txt",
      "status": "present", "content_hash": "…",
      "at": "2026-07-18T05:12:44.000Z" },
    { "type": "entry_gone",
      "urn": "urn:air:example.com:mcp:orders",
      "at": "2026-07-18T05:12:44.000Z" }
  ],
  "observed_at": "2026-07-18T06:00:01.000Z"
}

Headers: X-Desvela-Signature: hmac-sha256=<hex> and User-Agent: Desvela-Registry/0.1 (+https://desvela.dev/bot).

Verify the signature

Same scheme as every Desvela product — one verifier covers Brand Watch and Registry Watch. HMAC-SHA256 of the raw request body with your watch's secret:

import { createHmac, timingSafeEqual } from 'node:crypto';

function verify(rawBody, header, secret) {
  const expected = 'hmac-sha256=' +
    createHmac('sha256', secret).update(rawBody).digest('hex');
  return timingSafeEqual(Buffer.from(header), Buffer.from(expected));
}

Delivery & retries

FAQ

What does it cost? Nothing during the beta. If that changes, active watches get notified through their own webhook first — you will never discover a price by being charged it.

Why weekly and not real-time? The agent-readable web moves slowly (see the census) and polite crawling matters more than latency. If your use case needs faster detection, tell us: hello@desvela.ai.

How is this different from Brand Watch? Brand Watch monitors what AI engines say about your brand. Registry Watch monitors what a domain publishes for AI agents. Same watchman, opposite directions.

Does watching a domain crawl it harder? No. Watches read the shared index; the domain is fetched once per week regardless of how many watchers it has, by DesvelaBot, robots.txt respected.