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:
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 "https://api.checkanysite.com/v1/sites/wikipedia.org?checks=ai" \
-H "Authorization: Bearer $CHECKANYSITE_API_KEY"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)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.
# 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"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}")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?”
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{
"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{
"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.
https://checkanysite.com/mcpWindsurf
Add the server to Windsurf’s MCP settings, then refresh its MCP list.
{
"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.
[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.
URL: https://checkanysite.com/mcp
Type: Streamable HTTP
Header: Authorization: Bearer YOUR_API_KEY