Website change monitoring for agents that check in a loop
Website change monitoring for agents that check in a loop: send a URL and get only what changed since your last call (added and removed lines of the page text), plus optional keyword alerts. First call saves a baseline and returns a cursor; pass the cursor on the next call. The cursor only advances when a change is reported, so nothing slips through between polls. Good for price pages, docs and changelogs, job boards, status pages, competitor sites, government notices.
Paid test badge: not yet. The checks above are free: we call the tool without paying and read the payment request it sends back. The Verified badge needs paid calls whose answers match the promised output, and nobody can buy a badge.
Endpoint
POST https://agentsvc.io/api/v1/proxy/page-watch
| Category | Market data |
|---|---|
| Provider host | agentsvc.io |
| Networks | eip155:137, eip155:42161, eip155:8453, solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp |
| Payment schemes | exact |
| Self-reported calls, 30 days | 4 from 2 payers (the provider's figure, not ours) |
Our checks, last 30 days
We never call tools that send, buy, move money or file anything, not even without paying.
Example input (from the provider)
{
"body": {
"keywords": [
"3.15"
],
"url": "https://www.python.org/downloads/"
},
"bodyType": "json",
"method": "POST",
"type": "http"
}
Promised output schema (from the provider)
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"input": {
"additionalProperties": false,
"properties": {
"body": {
"properties": {
"cursor": {
"description": "Cursor from your previous call; omit on the first call",
"type": "string"
},
"ignore": {
"description": "Ignore lines containing any of these substrings",
"items": {
"type": "string"
},
"maxItems": 20,
"type": "array"
},
"keywords": {
"description": "Alert when one of these appears in newly added text (case-insensitive)",
"items": {
"type": "string"
},
"maxItems": 10,
"type": "array"
},
"render": {
"default": false,
"description": "Render JavaScript before reading",
"type": "boolean"
},
"url": {
"description": "Page to watch (http or https)",
"type": "string"
}
},
"required": [
"url"
]
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
},
"method": {
"enum": [
"POST",
"PUT",
"PATCH"
],
"type": "string"
},
"type": {
"const": "http",
"type": "string"
}
},
"required": [
"type",
"method",
"bodyType",
"body"
],
"type": "object"
},
"output": {
"properties": {
"example": {
"properties": {
"data": {
"properties": {
"changed": {
"type": "boolean"
},
"checked_at": {
"type": "string"
},
"content_hash": {
"type": "string"
},
"cursor": {
"type": "string"
},
"cursor_help": {
"type": "string"
},
"diff": {
"properties": {
"added": {
"items": {
"type": "string"
},
"type": "array"
},
"added_count": {
"type": "integer"
},
"removed": {
"type": "array"
},
"removed_count": {
"type": "integer"
},
"truncated": {
"type": "boolean"
}
},
"type": "object"
},
"first_check": {
"type": "boolean"
},
"http_status": {
"type": "integer"
},
"keyword_alert": {
"type": "boolean"
},
"keywords": {
"items": {
"properties": {
"keyword": {
"type": "string"
},
"newly_appeared": {
"type": "boolean"
},
"present": {
"type": "boolean"
}
},
"type": "object"
},
"type": "array"
},
"line_count": {
"type": "integer"
},
"since": {
"type": "string"
},
"summary": {
"type": "string"
},
"title": {
"type": "string"
},
"url": {
"type": "string"
},
"word_count": {
"type": "integer"
}
},
"required": [
"changed",
"cursor",
"summary",
"diff"
],
"type": "object"
},
"success": {
"type": "boolean"
}
},
"required": [
"success",
"data"
],
"type": "object"
},
"type": {
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
}
},
"required": [
"input"
],
"type": "object"
}