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"
}