> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sitespy.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Site Spy API

> Automate watch management, retrieve change history, and integrate Site Spy into your own tools with the REST API.

The Site Spy API gives you programmatic access to everything the dashboard can do: create and manage watches, organize tags, read change history and snapshots, configure notifications, and more.

## Base URL

```text theme={null}
https://detect.coolify.vkuprin.com/api/v1
```

## Authentication

Almost all requests require an API key, sent in the `x-api-key` header:

```bash theme={null}
curl -H "x-api-key: YOUR_API_KEY" \
  https://detect.coolify.vkuprin.com/api/v1/watch
```

You can also pass it as a `key` query parameter (`?key=YOUR_API_KEY`) when setting headers isn't practical — for example in RSS readers.

<Note>
  Get your API key from [Settings → API & Monitoring](https://sitespy.app/dashboard/settings?tab=api) in the Site Spy dashboard and use the **Copy Key** button to copy it to your clipboard.
</Note>

## Quick examples

<CodeGroup>
  ```bash curl theme={null}
  # List all your watches
  curl -H "x-api-key: YOUR_API_KEY" \
    https://detect.coolify.vkuprin.com/api/v1/watch

  # Create a new watch
  curl -X POST -H "x-api-key: YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{"url": "https://example.com", "title": "Example"}' \
    https://detect.coolify.vkuprin.com/api/v1/watch
  ```

  ```python Python theme={null}
  import requests

  API_KEY = "YOUR_API_KEY"
  BASE = "https://detect.coolify.vkuprin.com/api/v1"

  # List all watches
  resp = requests.get(f"{BASE}/watch", headers={"x-api-key": API_KEY})
  watches = resp.json()
  ```

  ```javascript JavaScript theme={null}
  const API_KEY = "YOUR_API_KEY";
  const BASE = "https://detect.coolify.vkuprin.com/api/v1";

  // List all watches
  const res = await fetch(`${BASE}/watch`, {
    headers: { "x-api-key": API_KEY },
  });
  const watches = await res.json();
  ```
</CodeGroup>

## Rate limits

Rate limits are enforced per API key. Exceeding the limit returns HTTP `429`. The [MCP server](/docs/dashboard/mcp-integration) uses the same limits.

## MCP integration

Prefer talking to your watches from Claude, Cursor, or another AI assistant? Site Spy ships an MCP server that wraps this API — see [MCP Integration](/docs/dashboard/mcp-integration).

## Explore the endpoints

Every endpoint is documented in this section with an interactive playground — pick one from the sidebar, plug in your API key, and send real requests from the browser.
