Watchtower ($1 per 30 days)
Watch one x402 endpoint: POST https://api.402xagent.com/v1/watch with JSON {"url":"https://api.402rates.com/v1/ping","method":"GET","webhook_url":"https://hooks.example.com/402x"}. The first watch per webhook domain gets a 7-day free trial (shared relay hosts such as webhook.site or hooks.slack.com count per full URL); otherwise pay $1 USDC via x402. We probe the endpoint once for a baseline and send a signed watch.verify event that must get a 2xx within 5 s; nothing is charged if either fails. The answer carries watch_secret once.
Regular re-probes: each watch is due again an hour after its last probe, and at busy times a probe can run later. Events: drift (payTo, network, asset, price > 1 %, x402 version, schemes or paywall changed, seen on 2 probes in a row), down and recovery (2 probes in a row), flapping, paused, resumed. Each webhook POST carries X-402x-Signature (Ed25519, base64url) over timestamp + "." + body, X-402x-Kid, X-402x-Timestamp and X-402x-Event-Id; verify with the keys doc and reject a skew over 5 minutes. Retries: 1 m, 5 m, 30 m, 2 h, 6 h with the same event id. After 3 days on which every delivery failed, the watch pauses; a 2xx POST /v1/watch/wt-0123456789abcdef/verify (Bearer) or a renew resumes it.
Renew: POST https://api.402xagent.com/v1/watch/wt-0123456789abcdef/renew with $1 adds 30 days. Status: GET https://api.402xagent.com/v1/watch/wt-0123456789abcdef with Authorization: Bearer wts_.... On expiry a watch pauses, it is never deleted. We never store payer wallets or transaction hashes.