# 2s IPO Watcher

> 2s IPO 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 new IPO event is detected, with optional keyword filtering and configurable expiry.

## Facts

- Endpoint: POST https://2s.io/api/watchers/ipo
- 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-ipo-watcher-f92ce2ac
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_A4gduESmcawbHaVd0JkXs

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-ipo-watcher-f92ce2ac -d '<json body>'
```

Example prompt: Set up a watcher on 2s that fires my endpoint at https://hooks.myapp.com/ipo whenever a new IPO is announced — filter for IPOs with 'tech' in the name, label it 'tech-ipo-monitor', stop after 10 fires, and keep it active for 30 days.

## When to prefer this

Use this endpoint when you need event-driven, push-based IPO monitoring without polling — ideal for pipelines that must react immediately when a new IPO is announced, especially when keyword filtering is needed. Prefer over polling endpoints when your architecture supports webhooks and you want to avoid repeated API calls. Best suited for automation workflows where a downstream action (e.g. database insert, alert, pipeline trigger) must happen as soon as an IPO event fires.

## Known failure modes

- Invalid or unreachable callbackUrl returns a 4xx validation error
- expiresInSeconds outside 60–7776000 range returns schema validation error
- maxFires outside 1–1000 range returns schema validation error
- keyword too long (>64 chars) causes request rejection
- Payment failure over x402 prevents watcher registration
- No matching IPOs within active window results in zero callbacks silently

## 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 confirmation object with ok:true, an items array containing the registered watcher details, a total count, and a source object with the upstream provider name, URL, and license. Subsequently, each matched IPO event triggers a signed POST to the specified callbackUrl with the IPO data and echoed payload.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "label": {
   "type": "string",
   "maxLength": 64,
   "description": "Optional free-text tag."
  },
  "keyword": {
   "type": "string",
   "maxLength": 64,
   "description": "Optional: only fire when the IPO name contains this text (case-insensitive)."
  },
  "payload": {
   "type": "object",
   "description": "Arbitrary JSON echoed back in every callback.",
   "additionalProperties": {}
  },
  "maxFires": {
   "type": "integer",
   "maximum": 1000,
   "minimum": 1,
   "description": "Stop after this many IPOs (default 25)."
  },
  "callbackUrl": {
   "type": "string",
   "maxLength": 2048,
   "description": "Signed event POSTed here (verify X-2s-Signature). Any http(s) URL."
  },
  "expiresInSeconds": {
   "type": "integer",
   "maximum": 7776000,
   "minimum": 60,
   "description": "Active window in seconds (default 30d, max 90d)."
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "schema": {
  "type": "object",
  "required": [
   "ok",
   "items",
   "total",
   "source"
  ],
  "properties": {
   "ok": {
    "enum": [
     true
    ],
    "type": "boolean"
   },
   "items": {
    "type": "array",
    "items": {
     "type": "object",
     "additionalProperties": {}
    }
   },
   "total": {
    "type": "integer",
    "nullable": true,
    "description": "Total matching rows upstream; null when unknown."
   },
   "source": {
    "type": "object",
    "required": [
     "provider",
     "url",
     "license"
    ],
    "properties": {
     "url": {
      "type": "string"
     },
     "license": {
      "type": "string"
     },
     "provider": {
      "type": "string"
     }
    },
    "additionalProperties": false
   }
  },
  "additionalProperties": false
 },
 "example": {
  "ok": true,
  "items": [
   {}
  ],
  "total": 1,
  "source": {
   "url": "example",
   "license": "example",
   "provider": "example"
  }
 }
}
```

## More

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