# Crypto Address Activity Watcher

> Crypto Address Activity Watcher is a paid API for AI agents from 2s.io, paid per call via x402, $0.125/call, status unknown (last checked 2026-09-14).

Registers a webhook watcher that fires a signed callback whenever a specified crypto address sends or receives funds on Base, Ethereum, or Bitcoin.

## Facts

- Endpoint: POST https://2s.io/api/watchers/crypto-address-activity
- Price: $0.125/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-14
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/crypto-address-activity-watcher-a069750b
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_vz3IYXk3epEZzay0z_sw4

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability crypto-address-activity-watcher-a069750b -d '<json body>'
```

Example prompt: Watch the Ethereum address 0xAbC123...def456 for any incoming ERC-20 token transfers worth at least $50, POST events to https://my-agent.app/hooks/wallet, stop after 50 callbacks, and tag it 'treasury-monitor' so I can identify it later.

## When to prefer this

Use this endpoint when an AI agent or application needs real-time, event-driven notification of on-chain activity for a specific address — rather than polling a block explorer. Ideal for treasury monitoring, agent payment detection, NFT transfer tracking, or any workflow that must react to blockchain events without manual checking. Prefer over polling-based alternatives when latency matters or when you want to cap callbacks via maxFires.

## Known failure modes

- Invalid or malformed address for the specified chain (EVM vs Bitcoin format mismatch)
- callbackUrl not reachable or malformed
- expiresInSeconds out of range (< 60 or > 7776000)
- maxFires out of range (< 1 or > 1000)
- Payment not included or insufficient USDC via x402
- Unsupported assetType for Bitcoin (only native supported)
- minValueUsd set to 0 or negative (must be > 0)

## How this service works

The (most) everything API: 575+ pay-per-call endpoints for AI agents — ground-truth data, a full AI gateway, and agent infrastructure (storage, queues, watchers). USDC via x402, no signup, no API keys, and upto billing: pay actual usage, not the quote.

## Output

Returns a JSON object with ok:true and an array containing the newly created watcher record, including a unique watcherId, current status, the chain and address being watched, direction, assetTypes, minValueUsd, maxFires, firesRemaining, expiry timestamp, a statusUrl to check/cancel the watcher, and the callbackSigner public key used to verify webhook payloads.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "chain": {
   "enum": [
    "base",
    "ethereum",
    "bitcoin"
   ],
   "type": "string",
   "description": "Which chain to watch: base, ethereum, or bitcoin."
  },
  "label": {
   "type": "string",
   "maxLength": 64,
   "description": "Optional free-text tag to recognize this watcher later. e.g. \"exchange-cold-wallet\"."
  },
  "address": {
   "type": "string",
   "maxLength": 100,
   "minLength": 20,
   "description": "The address to watch — an EVM address (0x… 40 hex) for base/ethereum, or a Bitcoin address (bc1…/1…/3…)."
  },
  "payload": {
   "type": "object",
   "description": "Arbitrary JSON, echoed back verbatim in every callback so you can route/identify the event on your side. e.g. {\"agentId\":\"a1\",\"reason\":\"treasury-monitor\"}",
   "additionalProperties": {}
  },
  "maxFires": {
   "type": "integer",
   "maximum": 1000,
   "minimum": 1,
   "description": "Stop after this many callbacks. Default 25, max 1000. The watch ends at whichever comes first — maxFires or expiry."
  },
  "direction": {
   "enum": [
    "in",
    "out",
    "both"
   ],
   "type": "string",
   "description": "Which flows to fire on: \"in\" = address received, \"out\" = address sent, \"both\" = either. Default: both."
  },
  "assetTypes": {
   "type": "array",
   "items": {
    "enum": [
     "native",
     "erc20",
     "erc721"
    ],
    "type": "string"
   },
   "description": "Limit to asset kinds: any of \"native\" (ETH/BTC), \"erc20\" (tokens), \"erc721\" (NFTs). Omit to watch all. EVM only — Bitcoin is always native. e.g. [\"erc20\"] for token transfers only."
  },
  "callbackUrl": {
   "type": "string",
   "maxLength": 2048,
   "description": "Where we POST the event. Any http(s) URL; the JSON body is signed (verify with X-2s-Signature). e.g. https://your-agent.app/hooks/wallet"
  },
  "minValueUsd": {
   "type": "number",
   "maximum": 1000000000000,
   "minimum": 0,
   "description": "Only fire when the transfer is worth at least this many USD — filters out dust/spam. e.g. 100 ignores anything under $100. Omit to fire on any non-zero amount.",
   "exclusiveMinimum": true
  },
  "expiresInSeconds": {
   "type": "integer",
   "maximum": 7776000,
   "minimum": 60,
   "description": "How long the watch stays active, in seconds. Default 2592000 (30 days), max 7776000 (90 days). e.g. 86400 = 1 day."
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/crypto-address-activity-watcher-a069750b/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from 2s.io](https://www.zero.xyz/host/2s.io/llms.txt)
