---
title: "Quickstart · API docs · CheckAnySite"
description: "Make your first requests: create an API key, look up a site and scan one. It takes about five minutes."
url: "https://docs.checkanysite.com/quickstart"
---

Get started

# Quickstart

Make your first requests: create an API key, look up a site and scan one. It takes about five minutes.

## 1. Create an API key

Sign in, open [API keys](https://checkanysite.com/account/keys) and create a key. You see the key only once, so store it in an environment variable. Every example in these docs reads it from there:

```bash Terminal
export CHECKANYSITE_API_KEY="cas_live_…"
```

All requests go to `https://api.checkanysite.com/v1`. To follow along in Python, install the [Python SDK](https://docs.checkanysite.com/sdks/python) with `pip install checkanysite`.

## 2. Look up a site

The Lookup API returns our latest stored result for a site straight away; it never starts a scan. The following request asks only for the `ai` check, which costs 1 credit:

```bash cURL
curl "https://api.checkanysite.com/v1/sites/wikipedia.org?checks=ai" \
  -H "Authorization: Bearer $CHECKANYSITE_API_KEY"
```

```python
from checkanysite import CheckAnySite

client = CheckAnySite()  # Reads the key from CHECKANYSITE_API_KEY.

site = client.sites.retrieve("wikipedia.org", checks=["ai"])
print(site.ai.level)
```

```javascript
const url = 'https://api.checkanysite.com/v1/sites/wikipedia.org?checks=ai';
const response = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.CHECKANYSITE_API_KEY}` },
});
const site = await response.json();
if (!response.ok) {
  throw new Error(`${site.error.code}: ${site.error.message}`);
}

console.log(site.ai.level);
```

If we haven’t checked the site yet, the API returns `404` with the code [no\_result](https://docs.checkanysite.com/errors#no_result), and the request costs nothing. Scan the site instead.

## 3. Scan a site

The Scan API checks a site live. Start a scan, then read it every 3 seconds until `complete` is `true`. The first results arrive within seconds, and slower sources follow. A new scan for the `ai` check costs 3 credits; reading a scan is free. [Credits](https://docs.checkanysite.com/credits) lists the price of every check.

```bash cURL
# Start a scan for the ai check (3 credits).
curl -X POST "https://api.checkanysite.com/v1/scans" \
  -H "Authorization: Bearer $CHECKANYSITE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"domain": "wikipedia.org", "checks": ["ai"]}'

# Read it every 3 seconds until "complete" is true. Reading is free.
curl "https://api.checkanysite.com/v1/scans/SCAN_ID?checks=ai" \
  -H "Authorization: Bearer $CHECKANYSITE_API_KEY"
```

```python
from checkanysite import CheckAnySite

client = CheckAnySite()  # Reads the key from CHECKANYSITE_API_KEY.

# Start the scan and poll it until it is complete.
scan = client.scans.create_and_wait("wikipedia.org", checks=["ai"])

if scan.status == "completed":
    print(scan.result.ai.level)
else:
    print(f"The scan failed: {scan.failure.message}")
```

```javascript
const headers = {
  Authorization: `Bearer ${process.env.CHECKANYSITE_API_KEY}`,
  'Content-Type': 'application/json',
};

const response = await fetch('https://api.checkanysite.com/v1/scans', {
  method: 'POST',
  headers,
  body: JSON.stringify({ domain: 'wikipedia.org', checks: ['ai'] }),
});
let scan = await response.json();
if (!response.ok) {
  throw new Error(`${scan.error.code}: ${scan.error.message}`);
}

// Read the scan every 3 seconds until it is complete. Reading is free.
while (!scan.complete) {
  await new Promise((resolve) => setTimeout(resolve, 3000));
  scan = await fetch(scan.links.self, { headers }).then((res) => res.json());
}

if (scan.status === 'completed') {
  console.log(scan.result.ai.level);
} else {
  console.error(`The scan failed: ${scan.failure.message}`);
}
```

Show the evidence

Every finding includes `evidence`: where we saw it and the exact line. Show it next to the finding, so people can check it for themselves. [The result object](https://docs.checkanysite.com/api/result) describes every field.

## Connect an agent instead

To ask from Claude, Cursor or VS Code, add the MCP server with the same key, then ask about any website. The [MCP server](https://docs.checkanysite.com/mcp) page covers every client.

### Claude Code

Run this in a terminal, then ask Claude about any website: “Was this site built with AI?”

```bash Terminal
claude mcp add --transport http checkanysite https://checkanysite.com/mcp \
  --header "Authorization: Bearer $CHECKANYSITE_API_KEY"
```

### Cursor

Add the server with one click, then put your key in its place, or add it to ~/.cursor/mcp.json yourself.

[Add to Cursor](cursor://anysphere.cursor-deeplink/mcp/install?name=checkanysite&config=eyJ1cmwiOiJodHRwczovL2NoZWNrYW55c2l0ZS5jb20vbWNwIiwiaGVhZGVycyI6eyJBdXRob3JpemF0aW9uIjoiQmVhcmVyIFlPVVJfQVBJX0tFWSJ9fQ%3D%3D)

```json ~/.cursor/mcp.json
{
  "mcpServers": {
    "checkanysite": {
      "url": "https://checkanysite.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}
```

### VS Code

Add the server with one click, then put your key in its place, or add it to .vscode/mcp.json; Copilot’s agent mode can then use it.

[Add to VS Code](vscode:mcp/install?%7B%22name%22%3A%22checkanysite%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fcheckanysite.com%2Fmcp%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20YOUR_API_KEY%22%7D%7D)

```json .vscode/mcp.json
{
  "servers": {
    "checkanysite": {
      "type": "http",
      "url": "https://checkanysite.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}
```

### Claude app

In Claude (desktop or web), open Settings › Connectors › Add custom connector, paste this address and choose Connect. Sign in to CheckAnySite and choose Allow: no key to copy.

```text Connector URL
https://checkanysite.com/mcp
```

### Windsurf

Add the server to Windsurf’s MCP settings, then refresh its MCP list.

```json ~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "checkanysite": {
      "serverUrl": "https://checkanysite.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}
```

### Codex CLI

Add the server to Codex’s settings; it reads your key from CHECKANYSITE\_API\_KEY.

```toml ~/.codex/config.toml
[mcp_servers.checkanysite]
url = "https://checkanysite.com/mcp"
bearer_token_env_var = "CHECKANYSITE_API_KEY"
```

### Any MCP client

Connect over Streamable HTTP and send your key in the Authorization header. Clients that can’t send headers can add ?key= to the address instead.

```text Connection
URL:     https://checkanysite.com/mcp
Type:    Streamable HTTP
Header:  Authorization: Bearer YOUR_API_KEY
```
