# Pricing State API — Watch Registration (POST /api/watches)

> Pricing State API — Watch Registration (POST /api/watches) is a paid API for AI agents from pricing-state-api.replit.app, paid per call via x402, $0.01/call, status unknown (last checked 2026-10-11).

Registers a webhook destination to receive push notifications whenever a pricing change is detected for a named SaaS/cloud pricing catalog set (inference or devtools).

## Facts

- Endpoint: POST https://pricing-state-api.replit.app/api/watches?utm_source=zero.xyz
- Price: $0.01/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-11
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/pricing-state-api-watch-registration-post-api-watches-47b44d46
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_OzcmQZ5p3f0iuCTTQV53m

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 pricing-state-api-watch-registration-post-api-watches-47b44d46 -d '<json body>'
```

Example prompt: Set up a pricing watch for the inference set and send any detected price changes to https://hooks.myapp.com/pricing-alerts so I get notified automatically whenever an AI provider updates their rates.

## When to prefer this

Use this endpoint when you want passive, push-based notification of pricing changes rather than polling. Prefer this over GET /api/sets/{set}/changes when you want your system to be called back automatically rather than polling on a schedule. Best suited for event-driven architectures where a downstream webhook handler is already in place. Not appropriate if you want to immediately query the current snapshot or change history on demand.

## Known failure modes

- Invalid set enum value (not 'inference' or 'devtools') — returns 400 or validation error
- Destination URL is not a valid public HTTPS URL — returns 400
- Payment of 0.01 USDC via x402 on Base not provided or insufficient — returns 402
- Destination host is not publicly reachable — watch created but notifications will fail silently
- Duplicate registrations for same set/destination may create redundant watches
- Replit app downtime may cause watch creation to fail with 5xx

## How this service works

Closed catalog of public SaaS and cloud pricing pages, grouped into two named sets (inference and devtools). Each listed vendor is fetched on a ~6 hour schedule in a real browser, extracted into one JSON shape (plan names, prices, currency, billing period, printed price text, features when present, snapshot time), and diffed for detected plan/price/billing-period changes. The paid unit is the set change feed, GET /api/sets/{set}/changes: 0.01 USDC on Base via x402 v2, charged only when a change was recorded after your since cursor, and free when the window is empty. Per-slug snapshot and changes calls remain 0.01 USDC each. Not a live scrape-any-URL service and not unpublished or negotiated rates. Discover sets and slugs free at GET /api/sets and GET /api/monitors. No API key.

## Output

Returns a JSON object containing a unique watch ID, the monitored set name (inference or devtools), the registered webhook destination URL, creation timestamp, last notification timestamp (initially null), and last error field (initially null). This watch record persists and will POST change payloads to your destination URL whenever a pricing change is detected in the next ~6-hour crawl cycle.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "set": {
   "enum": [
    "inference",
    "devtools"
   ],
   "type": "string",
   "description": "Named set to watch."
  },
  "destination": {
   "type": "string",
   "maxLength": 500,
   "description": "https URL, public host only, that receives change notices."
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "id": "Zx3Qe0m1N8s2kP7aVb9LrT4u",
  "set": "inference",
  "createdAt": "2026-09-12T08:30:00.000Z",
  "lastError": null,
  "destination": "https://example.com/hooks/pricing-state",
  "lastNotifiedAt": null
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/pricing-state-api-watch-registration-post-api-watches-47b44d46/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from pricing-state-api.replit.app](https://www.zero.xyz/host/pricing-state-api.replit.app/llms.txt)
