Skip to content
Back to Ned Watch

Card snapshot

ned.watch · 2026-10-01 09:02:24 UTC · 044c71d774755f02cd054b038643a17878fbe17dea5d077fe3854a4341c531ce

This is a frozen copy of the agent's agent-card.json as we observed it at the timestamp above. We capture a new snapshot every time the card's content hash changes. Useful for: forensic drift analysis, verifying downstream callers see the right version, reproducing routing decisions made historically.

{
  "pricing": {
    "currency": "USD",
    "unit": "cents",
    "free": {
      "watches": 5,
      "min_interval_s": 300,
      "note": "The first 5 active watches at 300s or slower cost nothing. Any type."
    },
    "paid": [
      {
        "tier": "standard",
        "types": [
          "http",
          "tls",
          "content"
        ],
        "min_interval_s": 60,
        "cents_per_day": 2
      },
      {
        "tier": "fast",
        "types": [
          "http",
          "tls",
          "content"
        ],
        "min_interval_s": 30,
        "cents_per_day": 7
      },
      {
        "tier": "deadman",
        "types": [
          "deadman"
        ],
        "min_interval_s": 60,
        "cents_per_day": 1
      },
      {
        "tier": "overrun",
        "types": [
          "overrun"
        ],
        "max_runtime_s": [
          60,
          86400
        ],
        "cents_per_day": 1,
        "note": "no interval to choose: checked at each run's deadline; counts toward the free five like any watch"
      }
    ],
    "limits": {
      "content": {
        "max_body_bytes": 262144,
        "max_conditions": 5,
        "conditions": [
          "status",
          "contains",
          "not_contains",
          "json_path + equals",
          "json_path + exists"
        ],
        "regex": false
      },
      "overrun": {
        "max_runtime_s": [
          60,
          86400
        ]
      }
    },
    "billing": {
      "debit": "daily at 00:10 UTC per active paid watch",
      "register_requires": "balance >= one day of burn including the new watch, when the watch is paid",
      "pause": "a watch pauses (event: paused) when the balance can't cover its day",
      "low_balance": "one callback (event: low_balance) when balance < 3 days of burn, reset by a top-up"
    },
    "topup": {
      "min_usd": 5,
      "options_usd": [
        5,
        20,
        50
      ],
      "routes": [
        "https://api.ned.watch/v1/topup/5",
        "https://api.ned.watch/v1/topup/20",
        "https://api.ned.watch/v1/topup/50"
      ],
      "rail": {
        "x402": {
          "network": "eip155:8453",
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "how": "POST the route with no payment to receive x402 payment requirements; retry with PAYMENT-SIGNATURE"
        },
        "card": "coming"
      }
    },
    "pricing_url": "https://api.ned.watch/v1/pricing"
  },
  "name": "Ned Watch",
  "description": "Register a URL, condition, or deadline; Ned wakes you at your callback when it fires. Independent, multi-region, signed.",
  "url": "https://api.ned.watch",
  "watch_types": [
    "deadman",
    "overrun",
    "http",
    "content",
    "tls"
  ],
  "version": "1.7",
  "provider": {
    "organization": "Ned Watch",
    "url": "https://ned.watch"
  },
  "iconUrl": "https://ned.watch/brand/sweepthrough-dark-512.png",
  "image": "https://ned.watch/brand/instrument-open-512.png",
  "capabilities": {
    "streaming": false,
    "pushNotifications": true
  },
  "skills": [
    {
      "id": "watch.deadman",
      "name": "Dead-man switch",
      "description": "You check in on a schedule (POST /v1/checkin/{id} with Authorization: Bearer <signing_secret>); Ned fires your callback if you go silent."
    },
    {
      "id": "watch.http",
      "name": "HTTP watch",
      "description": "Fires when a URL is down, returns an unexpected status, or exceeds a latency threshold."
    },
    {
      "id": "watch.tls",
      "name": "TLS watch",
      "description": "Fires when a certificate is within N days of expiry or the handshake fails."
    },
    {
      "id": "watch.overrun",
      "name": "Overrun watch",
      "description": "POST /v1/watches/{id}/start when a run begins and /finish when it ends (Authorization: Bearer <signing_secret>); Ned fires once if it's still running after max_runtime_s, and clears with late:true and the runtime when it finishes."
    },
    {
      "id": "watch.content",
      "name": "Content watch",
      "description": "The page answers 200 but says the wrong thing: status, contains, not_contains, json_path equals/exists (no regex, 256 KB max). The callback names the failed condition, never the page's content."
    }
  ],
  "authentication": {
    "schemes": [
      "bearer"
    ],
    "note": "POST /v1/watches without a key to receive one."
  },
  "endpoints": {
    "register": "https://api.ned.watch/v1/watches",
    "docs": "https://api.ned.watch/docs"
  },
  "nodes": [
    "watch-us",
    "watch-eu"
  ],
  "replication": true,
  "contact": "ned@ned.watch"
}