Developers
Build on top of Site Spy with our REST API and MCP server. Monitor websites, detect changes, and get structured diffs programmatically.
Quick Start
Get your API key from Settings → API in the dashboard. Then start making requests:
# List all your watches
curl -H "x-api-key: YOUR_KEY" \
https://api.sitespy.app/api/v1/watch
# Create a new watch
curl -X POST -H "x-api-key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com", "title": "Example"}' \
https://api.sitespy.app/api/v1/watch
# Get change history timestamps
curl -H "x-api-key: YOUR_KEY" \
https://api.sitespy.app/api/v1/watch/{uuid}/historyAuthentication
All API requests require an API key passed via the x-api-key header. You can also pass it as a key query parameter.
import requests
API_KEY = "your-api-key-here"
BASE = "https://api.sitespy.app/api/v1"
# List all watches
resp = requests.get(f"{BASE}/watch",
headers={"x-api-key": API_KEY})
watches = resp.json()
# Create a watch
resp = requests.post(f"{BASE}/watch",
headers={"x-api-key": API_KEY},
json={"url": "https://example.com", "title": "My Monitor"})
watch_uuid = list(resp.json().keys())[0]
print(f"Created watch: {watch_uuid}")const API_KEY = "your-api-key-here";
const BASE = "https://api.sitespy.app/api/v1";
// List all watches
const res = await fetch(`${BASE}/watch`, {
headers: { "x-api-key": API_KEY },
});
const watches = await res.json();
// Create a watch
const created = await fetch(`${BASE}/watch`, {
method: "POST",
headers: {
"x-api-key": API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
url: "https://example.com",
title: "My Monitor",
}),
});MCP Server
Site Spy has a native MCP (Model Context Protocol) server that lets AI assistants like Claude, Cursor, OpenCode, and Codex monitor websites directly — creating watches, reading diffs, and fetching pages without leaving the conversation.
# Claude Code
claude mcp add site-spy --env SITE_SPY_API_KEY=your-api-key-here -- \
npx -y @site-spy/mcp-server
# Or add to .mcp.json manually
{
"mcpServers": {
"site-spy": {
"command": "npx",
"args": ["-y", "@site-spy/mcp-server"],
"env": {
"SITE_SPY_API_KEY": "your-api-key-here"
}
}
}
}Available MCP Tools
list_watchesread
List all monitored websites
get_watchread
Get full details of a watch
get_change_historyread
Browse change timestamps
get_snapshotread
Read the page as captured
get_diffread
Compare content between timestamps
search_watchesread
Search by URL or title
get_rss_settingsread
Read RSS feed settings
get_notificationsread
Read notification settings
auth_statusread
Check the connection
create_watchwrite
Start monitoring a URL
update_watchwrite
Change watch settings
delete_watchwrite
Remove a watch
trigger_recheckwrite
Force immediate recheck
authenticatewrite
Connect with an API key
generate_rss_tokenwrite
Mint an RSS feed token
revoke_rss_tokenwrite
Disable RSS feed access
fetch_urlweb
Fetch any URL, browser backend included
web_searchweb
Search the web for URLs to fetch
get_ai_summaryPro
Plain-English summary of the last change
Rate Limits
API rate limits are enforced per API key. The MCP server uses the same limits. Exceeding the limit returns HTTP 429.
| Plan | Requests / day | MCP write access | Price |
|---|---|---|---|
| Free | 100 | Full, 2 watches | €0 |
| Starter | 1,000 | Full + bulk import, 25 watches | €4/mo |
| Pro | 10,000 | Full + bulk import, 100 watches | €8/mo |
| Business | 50,000 | Full + bulk import, 500 watches | €99/mo |
Webhooks
Site Spy uses Apprise for notifications, supporting 90+ services. For webhooks, configure a notification URL in the format:
# Generic webhook (POST with JSON payload) json://your-server.com/webhook # Slack slack://TokenA/TokenB/TokenC # Discord discord://WebhookID/WebhookToken # Telegram tgram://BotToken/ChatID # Email mailto://user:pass@smtp.gmail.com?to=you@example.com
The webhook payload includes the watch UUID, URL, title, diff content, and timestamps. Configure via the API: PUT /watch/{uuid} with notification_urls.
Full API Reference
The complete OpenAPI 3.0 specification covers all endpoints including watches, tags, notifications, search, history, diffs, screenshots, RSS feeds, billing, and user settings.
Key endpoints:
| Method | Endpoint | Description |
|---|---|---|
| GET | /watch | List all watches |
| POST | /watch | Create a watch |
| GET | /watch/{uuid} | Get watch details |
| PUT | /watch/{uuid} | Update watch config |
| DELETE | /watch/{uuid} | Delete a watch |
| GET | /watch/{uuid}/history | Change history timestamps |
| GET | /watch/{uuid}/history/{ts} | Snapshot at timestamp |
| GET | /watch/{uuid}/difference/{from}/{to} | Diff between timestamps |
| GET | /search?q=term | Search watches |
| GET | /tags | List all tags |
The full interactive API documentation is available at docs.sitespy.app/api-reference.
Ready to build?
Get your free API key and start monitoring websites in minutes.