Esc

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 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:

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 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:

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, 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 lists the price of every check.

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 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 page covers every client.

Claude Code

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

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/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.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.

Connector URL
https://checkanysite.com/mcp

Windsurf

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

~/.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.

~/.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.

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