{"uid":"cap_qdOcTEiqVS3YgwV1NWfR7","slug":"agent-exec-url-watch-polling-monitor-bd4fb796","name":"agent-exec URL Watch / Polling Monitor","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.448c.org/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_Vbsb4A3pjoqmZ-OGXUimm","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 paid, accountless HTTP polling watch that fires when a URL's response meets a specified condition (status code, body content, or JSON path value).","exampleAgentPrompt":"Keep polling https://api.example.com/order/12345 every 30 seconds for up to 10 minutes and let me know when the JSON field 'status' equals 'shipped'.","exampleUseCases":[{"title":"Wait for order fulfillment status","prompt":"Watch https://shop.example.com/api/orders/9981 every 60 seconds for up to 30 minutes and alert me when the JSON field 'fulfillment.state' equals 'complete'."},{"title":"Detect site recovery after outage","prompt":"Start polling https://status.myapp.io/health every 20 seconds for up to 5 minutes and tell me as soon as the HTTP status code changes from what it is right now."},{"title":"Trigger on content appearing on a page","prompt":"Poll https://conference.example.org/schedule every 120 seconds for up to 2 hours and fire when the response body contains the text 'registration open'."}],"resultDescription":"Returns a watch object with a UUID watch ID (use it to query GET /watch/{id} for free), current status (active/matched/expired), payment confirmation including payer address and on-chain transaction, polling schedule timestamps, the predicate registered, and — once matched — the matchedAt timestamp and optionally the storage object ID where the result was delivered.","failureModes":["Payment insufficient or invalid — watch not created, HTTP 402 returned","URL is unreachable or returns errors during polling — lastObservation reflects the error state","TTL expires before predicate matches — status transitions to 'expired'","intervalSeconds larger than ttlSeconds — request rejected as invalid","Malformed predicate object with missing required fields — request rejected","jsonPathEquals predicate on a non-JSON response — noted in lastObservation as WATCH_JSONPATH_BODY_NOT_JSON","Network isolation means agent-exec cannot reach internal/private URLs — polling silently fails"],"whenToPreferThis":"Choose this endpoint when your agent needs to asynchronously monitor an external HTTP resource until a specific condition is met — especially when you want fire-and-forget behavior without maintaining a long-lived connection. It is ideal for event-driven workflows where you don't know exactly when a condition will be true (order status, feature flags, availability, content publication). The accountless, pay-per-use x402 model makes it suitable for agent pipelines that operate without persistent credentials. Prefer it over polling in your own agent loop when you want to offload the polling cost and complexity, or when the polling window may outlast a single agent run.","instructions":null,"reviewSummary":null,"reviewSummaryHighlights":null,"reviewSummaryConcerns":null,"reviewSummaryGeneratedAt":null,"activationCount":0,"lastUsedAt":null,"lastSuccessfullyRanAt":null,"lastHealthCheckAt":"2026-10-13T00:35:33.248Z","isFirstParty":false,"canonicalSlug":"agent-exec-url-watch-polling-monitor-bd4fb796"}