{"uid":"cap_5BjLlAQzRumdzkOtNgjN3","slug":"agent-exec-url-watch-pay-per-use-http-polling-with-condition-matching-cc29a330","name":"agent-exec URL Watch – Pay-Per-Use HTTP Polling with Condition Matching","description":"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.","url":"https://agent-exec.45.67.221.128.sslip.io/watch?utm_source=zero.xyz","method":"POST","headers":{},"bodySchema":{"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."}}},"responseSchema":{"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."}}},"example":null,"exampleRequest":null,"tags":["x402"],"displayCostAmount":"0.0058","displayCostAsset":"USDC","priceDynamic":false,"priceHint":null,"priceStatus":"priced","priceSource":"probe","requiresHandshake":false,"reviewCount":0,"rating":{"score":"0.00","successRate":"0.00","reviews":0,"stars":null,"state":"unrated"},"availabilityStatus":"unknown","priceObserved":null,"sessionDeposit":null,"pricing":{"kind":"static","summary":"$0.0058/call","primary":{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.0058","per":"call","confidence":"exact"},"accepted":[{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.0058","per":"call","confidence":"exact"}]},"paymentMethods":[{"uid":"pm_CbpX58op-krGS0MyLeYSz","protocol":"x402","methodType":"crypto","chain":"base","mode":"charge","costAmount":"0.0058","costPer":"request","priority":0,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","unit":"request","depositMicros":null,"planRef":null}],"brandName":null,"brandSlug":null,"brandBaseUrl":null,"brandDocsUrl":null,"whatItDoes":"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.","exampleAgentPrompt":"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'.","exampleUseCases":[{"title":"Wait for deployment to finish","prompt":"Watch https://ci.myapp.io/api/builds/482/status every 20 seconds for up to 15 minutes and tell me when the JSON path 'build.result' equals 'success' — save the matched result under 'build-482-done'."},{"title":"Detect a sold-out item restocking","prompt":"Poll https://store.example.com/api/products/99/availability every 60 seconds for up to 2 hours, and alert me the moment the response body contains the text 'in_stock'."},{"title":"Monitor third-party API for outage recovery","prompt":"Watch https://status.paymentprovider.com/api/status every 30 seconds for up to 30 minutes, and let me know as soon as the HTTP status changes from what it is right now — I want to know when they come back online."}],"resultDescription":"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.","failureModes":["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"],"whenToPreferThis":"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.","instructions":null,"reviewSummary":null,"reviewSummaryHighlights":null,"reviewSummaryConcerns":null,"reviewSummaryGeneratedAt":null,"activationCount":0,"lastUsedAt":null,"lastSuccessfullyRanAt":null,"lastHealthCheckAt":"2026-10-02T04:09:25.765Z","isFirstParty":false,"canonicalSlug":"agent-exec-url-watch-pay-per-use-http-polling-with-condition-matching-cc29a330"}