# agent-exec URL Watch – Pay-Per-Use HTTP Polling with Condition Matching

> agent-exec URL Watch – Pay-Per-Use HTTP Polling with Condition Matching is a paid API for AI agents from agent-exec.45.67.221.128.sslip.io, paid per call via x402, $0.0058/call, status unknown (last checked 2026-09-30).

Registers a pay-per-use polling watch on a URL that fires when a specified condition (status change, body content, JSON path value, etc.) is met, returning a watch ID for subsequent free status checks.

## Facts

- Endpoint: POST https://agent-exec.45.67.221.128.sslip.io/watch?utm_source=zero.xyz
- Price: $0.0058/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-30
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/agent-exec-url-watch-pay-per-use-http-polling-with-condition-matching-cc29a330
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_5BjLlAQzRumdzkOtNgjN3

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 agent-exec-url-watch-pay-per-use-http-polling-with-condition-matching-cc29a330 -d '<json body>'
```

Example prompt: Keep polling https://api.example.com/deploy/status every 30 seconds for up to 10 minutes, and let me know as soon as the JSON field 'state' equals 'complete' — store the result under 'deploy-done'.

## When to prefer this

Choose this endpoint when an AI agent needs to wait for an asynchronous condition on an external HTTP endpoint — such as a deployment completing, a value changing in a JSON API, or text appearing on a page — without blocking or repeatedly calling the endpoint itself. It is especially suited for agent workflows that need to park a task until a remote state changes, pay only for what they use, and require no account setup. Prefer alternatives if you need real-time WebSocket-level latency, if the target URL requires authentication headers on each poll, or if you need to run code rather than observe a URL.

## Known failure modes

- Payment insufficient or invalid – watch not created, HTTP 402 returned
- URL is unreachable or returns no response during polling – lastObservation reflects error, watch may expire without matching
- Predicate misconfigured (e.g. jsonPathEquals with a path that doesn't exist) – watch polls but never matches, expires at TTL
- ttlSeconds smaller than intervalSeconds – rejected with validation error
- Network-less sandbox cannot reach private/internal URLs – watch polls but always fails
- Watch expires (TTL elapsed) without condition firing – status becomes 'expired', no match recorded

## How this service works

Accountless, pay-per-use code execution for software agents: submit source code, get stdout, stderr and exit code back from an isolated, network-less sandbox. No account, no API key -- possession of valid payment is sufficient.

## Output

Returns a watch object with a UUID watch ID (use it to check status for free at GET /watch/{id}), current status (active/matched/expired), payment receipt details, poll schedule timestamps (created, next poll due, TTL expiry), last observation, and — when matched — the timestamp the condition fired and any storage object ID if a storageKey was provided.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "required": [
  "url",
  "predicate",
  "ttlSeconds",
  "intervalSeconds"
 ],
 "properties": {
  "url": {
   "type": "string",
   "description": "Absolute http(s) URL to poll."
  },
  "predicate": {
   "type": "object",
   "description": "Exactly one of: {type:\"statusChanged\"} / {type:\"statusEquals\",status} / {type:\"bodyContains\",value} / {type:\"bodyNotContains\",value} / {type:\"jsonPathEquals\",path,value} / {type:\"jsonPathNotEquals\",path,value} / {type:\"changedFromNow\",path?}. `path` is a dotted path into a JSON response body."
  },
  "storageKey": {
   "type": "string",
   "description": "Optional: deliver a matched observation into /storage under this label, on the wallet that paid."
  },
  "ttlSeconds": {
   "type": "integer",
   "description": "Stop after this many seconds if the condition never fires; at least intervalSeconds."
  },
  "intervalSeconds": {
   "type": "integer",
   "description": "Seconds between polls."
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "object",
 "required": [
  "payment",
  "id",
  "status",
  "url",
  "intervalSeconds",
  "ttlSeconds",
  "predicate",
  "createdAt",
  "ttlExpiresAt",
  "nextPollDueAt",
  "overdue"
 ],
 "properties": {
  "id": {
   "type": "string",
   "format": "uuid",
   "description": "Keep this: it is how anyone reads the watch back, free, at GET /watch/{id}."
  },
  "url": {
   "type": "string"
  },
  "status": {
   "enum": [
    "active",
    "matched",
    "expired"
   ],
   "type": "string"
  },
  "overdue": {
   "type": "boolean",
   "description": "true when an active watch has missed its next poll."
  },
  "payment": {
   "type": "object",
   "properties": {
    "asset": {
     "type": "string"
    },
    "payer": {
     "type": "string"
    },
    "amount": {
     "type": "string",
     "description": "Atomic units charged."
    },
    "network": {
     "type": "string"
    },
    "transaction": {
     "type": "string",
     "description": "On-chain settlement transaction."
    }
   }
  },
  "baseline": {
   "description": "changedFromNow's registration-time snapshot, verbatim."
  },
  "createdAt": {
   "type": "integer",
   "description": "Unix ms."
  },
  "matchedAt": {
   "type": [
    "integer",
    "null"
   ],
   "description": "Unix ms the condition fired, or null."
  },
  "predicate": {
   "type": "object"
  },
  "storageKey": {
   "type": [
    "string",
    "null"
   ]
  },
  "ttlSeconds": {
   "type": "integer"
  },
  "lastPolledAt": {
   "type": [
    "integer",
    "null"
   ]
  },
  "ttlExpiresAt": {
   "type": "integer",
   "description": "Unix ms polling stops if the condition never fires."
  },
  "nextPollDueAt": {
   "type": "integer"
  },
  "intervalSeconds": {
   "type": "integer"
  },
  "lastObservation": {
   "type": [
    "object",
    "null"
   ],
   "description": "The last poll: status, whether it matched, and any WATCH_JSONPATH_BODY_NOT_JSON note."
  },
  "deliveredObjectId": {
   "type": [
    "string",
    "null"
   ],
   "description": "The /storage object a matched storageKey watch was delivered to."
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/agent-exec-url-watch-pay-per-use-http-polling-with-condition-matching-cc29a330/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from agent-exec.45.67.221.128.sslip.io](https://www.zero.xyz/host/agent-exec.45.67.221.128.sslip.io/llms.txt)
