Show JSON
{
"protocolVersion": "0.3.0",
"name": "Shiftmoor by CyberMax",
"description": "Website change monitor API: watch public web pages (competitors, suppliers, policies, job and tender pages) and get every change, lines added and removed or a keyword appearing, by webhook and RSS/JSON feed. Free for 3 pages; Starter $4.99/month for 25.",
"author": "CyberMax",
"wellKnownURI": "https://shiftmoor.cybermax-tools.workers.dev/.well-known/agent-card.json",
"url": "https://shiftmoor.cybermax-tools.workers.dev/a2a",
"version": "1.0.0",
"provider": {
"organization": "CyberMax",
"url": "https://cybermaxtools.com/"
},
"documentationUrl": "https://shiftmoor.cybermax-tools.workers.dev/llms.txt",
"iconUrl": "https://shiftmoor.cybermax-tools.workers.dev/icon.svg",
"supportsAuthenticatedExtendedCard": null,
"security": [
{},
{
"licenceKey": []
},
{
"licenceQuery": []
}
],
"securitySchemes": {
"licenceKey": {
"in": "header",
"name": "x-licence",
"type": "apiKey",
"description": "Shiftmoor key: a free key from POST /api/free (no sign-up) or a paid plan key (https://shiftmoor.cybermaxtools.com/#pricing). Optional for /api/check (5 checks a day without a key); required for watches, settings and feeds."
},
"licenceQuery": {
"in": "query",
"name": "key",
"type": "apiKey",
"description": "Same key as a query parameter."
}
},
"capabilities": {
"streaming": false,
"pushNotifications": false,
"stateTransitionHistory": false,
"extensions": null
},
"defaultInputModes": [
"application/json"
],
"defaultOutputModes": [
"application/json"
],
"skills": [
{
"id": "check_page",
"name": "Check a public page now",
"description": "GET /api/check?url=<public https page> fetches the page (robots.txt obeyed) and returns what Shiftmoor extracts from it, plus what changed since the last public check of that URL. 5 checks a day without a key, 20 with a free key, 500 with a paid key.",
"tags": [
"website change monitor",
"page change alerts",
"competitor monitoring",
"rss",
"webhook"
],
"examples": [
"https://shiftmoor.cybermax-tools.workers.dev/api/check?url=https://www.example.com/"
],
"inputModes": [
"application/json"
],
"outputModes": [
"application/json"
]
},
{
"id": "free_key",
"name": "Get a free key",
"description": "POST /api/free returns a free key (no account, no sign-up) that can watch up to 3 pages, checked every 24 hours.",
"tags": [
"website change monitor",
"page change alerts",
"competitor monitoring",
"rss",
"webhook"
],
"examples": [],
"inputModes": [
"application/json"
],
"outputModes": [
"application/json"
]
},
{
"id": "manage_watches",
"name": "Watch pages for changes",
"description": "GET/POST /api/watches and DELETE /api/watches/<id> (key required): list, add or remove watched pages within your plan's limit.",
"tags": [
"website change monitor",
"page change alerts",
"competitor monitoring",
"rss",
"webhook"
],
"examples": [],
"inputModes": [
"application/json"
],
"outputModes": [
"application/json"
]
},
{
"id": "change_feed",
"name": "Read your change feed or set a webhook",
"description": "GET /feed.json or /feed.rss?key=<key> returns the changes found on your watched pages; POST /api/settings {\"webhook\": url} sends each change to Slack, Discord, Zapier, Make or n8n.",
"tags": [
"website change monitor",
"page change alerts",
"competitor monitoring",
"rss",
"webhook"
],
"examples": [],
"inputModes": [
"application/json"
],
"outputModes": [
"application/json"
]
},
{
"id": "agent_check_page",
"name": "MCP/A2A: check a page now",
"description": "MCP tool check_page at /mcp (streamable HTTP) and A2A message/send at /a2a: send a public page URL, get its text now and what changed since the last public check. Same free limits as /api/check.",
"tags": [
"website change monitor",
"page change alerts",
"competitor monitoring",
"rss",
"webhook"
],
"examples": [],
"inputModes": [
"application/json"
],
"outputModes": [
"application/json"
]
}
],
"conformance": true,
"conformance_errors": null,
"homepage": null,
"repository": null,
"license": null,
"pricing": null,
"contact": null,
"id": "e7b4f60a-3fcb-4e0c-a6e0-329780e4d3da",
"category": "data-analytics",
"category_secondary": null
}