This is the Lookup API: it never starts a scan. Check scannedAt, use maxAgeDays to require a more recent result, and scan the site with POST /scans when you need a new one. Every response has an ETag: send it back in If-None-Match, and while the result is unchanged you get a free 304 with no body.
Credits
Each check you ask for costs its stored price, up to 3 for every check, when a result is found. A no_result error or a 304 costs nothing.
Request
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"])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();Parameters
domainstringrequiredpathThe site’s domain, such as
example.com.checksstringqueryThe checks to answer, separated by commas. Leave it out to ask for every check.
One of:
ai,readiness,popularity,tech,dns,trust,summary,history.maxAgeDaysintegerqueryReturn a result only if it is at most this many days old (1 to 3650); otherwise the API returns
no_result.If-None-MatchstringheaderThe
ETagof a response you already have. While the result is unchanged, the API returns a 304 with no body, for free.
Response
| Status | Body | When |
|---|---|---|
| 200 OK | SiteResult | The stored result, with its ETag. |
| 304 Not Modified | None | The result hasn’t changed since the ETag you sent. No body, and no credits. |
{
"domain": "wikipedia.org",
"checks": [
"ai"
],
"scanId": "0b5a7a6e-1f7e-4d7c-9a4e-2f0d8b1c6a11",
"scannedAt": "2026-11-10T09:30:06.000Z",
"complete": true,
"pending": [],
"limited": null,
"finalUrl": "https://www.wikipedia.org/",
"resultUrl": "https://checkanysite.com/site/wikipedia.org?focus=ai",
"versions": {
"signatures": "0.6.1",
"score": "1.1"
},
"ai": {
"level": "none",
"builders": [],
"patterns": []
},
"readiness": null,
"popularity": null,
"tech": null,
"dns": null,
"trust": null,
"score": null,
"summary": null,
"history": null,
"notes": []
}A site’s result: every field is on the result object.
Errors
| Status | Code | What happened |
|---|---|---|
| 400 | invalid_domain | Not a public domain |
| 400 | invalid_parameter | Invalid parameter |
| 401 | missing_api_key | No API key |
| 401 | invalid_api_key | Unknown API key |
| 401 | revoked_api_key | Revoked API key |
| 401 | expired_api_key | Expired API key |
| 429 | rate_limited | Too many requests |
| 404 | no_result | No stored result |
| 429 | quota_exceeded | Monthly credits used up |
| 429 | key_limit_reached | Key limit reached |
| 500 | internal_error | Internal error |