# 2s Stock Price Watcher

> 2s Stock Price 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-based alert that fires when a US-listed stock price crosses a specified threshold condition (above, below, or percent move)

## Facts

- Endpoint: POST https://2s.io/api/watchers/stock-price
- 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/2s-stock-price-watcher-116f587f
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_QQJUfuE5hkv_2Ulfui-qB

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 2s-stock-price-watcher-116f587f -d '<json body>'
```

Example prompt: Set up a price watcher for AAPL that fires a webhook to https://my-agent.app/hooks/price when the stock goes above $220 — make it a one-shot alert that expires in 7 days, and tag it with label 'aapl-breakout'.

## When to prefer this

Use this endpoint when you need event-driven, asynchronous notification of a US stock price crossing a threshold, rather than polling a price endpoint repeatedly. Ideal for agent workflows that need to react to market conditions without maintaining an active polling loop. Prefer this over a simple price-lookup endpoint when the trigger is conditional and timing is unknown.

## Known failure modes

- Invalid or unlisted ticker symbol — watcher not created
- callbackUrl unreachable or malformed — registration may succeed but callbacks will fail silently
- threshold not appropriate for conditionType (e.g. negative price for above/below) — validation error
- expiresInSeconds out of allowed range (60–7776000) — rejected
- maxFires outside 1–1000 range — rejected
- Payment not received or insufficient USDC — 402 response, watcher not created

## 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

A confirmation that the watcher has been registered. When the price condition is met, the service POSTs a signed JSON event to the specified callbackUrl, including the ticker, trigger details, and any custom payload supplied at registration time. The watcher fires up to maxFires times and auto-expires after the configured duration.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "label": {
   "type": "string",
   "maxLength": 64,
   "description": "Optional free-text tag to recognize this watcher later."
  },
  "ticker": {
   "type": "string",
   "maxLength": 12,
   "minLength": 1,
   "description": "US-listed ticker to watch, e.g. AAPL."
  },
  "payload": {
   "type": "object",
   "description": "Arbitrary JSON echoed back verbatim in every callback so you can route/identify the event. e.g. {\"agentId\":\"a1\"}",
   "additionalProperties": {}
  },
  "maxFires": {
   "type": "integer",
   "maximum": 1000,
   "minimum": 1,
   "description": "Stop after this many callbacks (default 1 — a one-shot alert). Each fire is a fresh crossing into the condition."
  },
  "threshold": {
   "type": "number",
   "description": "The trigger level. A USD price for above/below (e.g. 200), or a percent for pct_up/pct_down (e.g. 5 = ±5%)."
  },
  "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/price"
  },
  "conditionType": {
   "enum": [
    "above",
    "below",
    "pct_up",
    "pct_down"
   ],
   "type": "string",
   "description": "above/below = threshold is a USD price; pct_up/pct_down = threshold is a percent move vs the prior close."
  },
  "expiresInSeconds": {
   "type": "integer",
   "maximum": 7776000,
   "minimum": 60,
   "description": "How long the watch stays active, in seconds. Default 2592000 (30 days), max 7776000 (90 days)."
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/2s-stock-price-watcher-116f587f/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)
