Choose checks
Name the checks you need: ?checks=ai,dns in the query of GET /sites/{domain}, or "checks": ["ai", "dns"] in the body of POST /scans. Leave it out to ask for every check.
A request costs credits for each check it asks for, and never more than every check at once: 3 credits from a stored result, or 15 credits with a new scan. A new scan runs only what its checks need, so fewer checks are also faster.
Available checks
| Check | Question | What it answers | Stored | New scan |
|---|---|---|---|---|
ai | Was it built with an AI builder? | Traces of Lovable, Bolt, v0 and other builders, each with the exact line. | 1 | 3 |
readiness | Is it ready for AI? | A score out of 100 for how well AI tools find, read and use it, with a prompt to fix each gap. | 1 | 4 |
popularity | How popular is it? | A band from public ranked lists, and each list’s rank. Never a visit count. | 1 | 1 |
tech | What does it run on? | Frameworks, site builders, shop systems, analytics and the network, with evidence. | 1 | 3 |
dns | Where does it point? | Its DNS records (A, MX, TXT, CAA and more), whether DNSSEC validated them, and its network. | 1 | 1 |
trust | How established does it look? | Contact and company details, policies, HTTPS, domain age, and a score out of 100 from them. Never a verdict. | 2 | 6 |
summary | What is it? | Its own words, its kind, who is behind it by independent sources, its profiles. | 2 | 5 |
history | How old is it? | Registration, first certificate and first web archive capture, each dated with its source. | 1 | 2 |
| (none named) | Everything | Every check above, from one scan | 3 | 15 |
What a result contains
A result has a field for each check you asked for (trust also fills score); the other fields are null. Its checks field lists the checks it contains. The result object describes every field.
Lookup and Scan
One key and one base URL give you two APIs. Use the Lookup API when you need an answer straight away, and the Scan API when you need the site checked now.
| Lookup API | Scan API | |
|---|---|---|
| Source | Our stored results | A live scan of the site |
| Speed | Immediate | First results in seconds; slower sources follow |
| One site | GET /v1/sites/{domain} | POST /v1/scans, then GET /v1/scans/{id} |
| Many sites | POST /v1/sites/batch, up to 50 | POST /v1/scans/batch, up to 10 |
| Cost | Each check’s stored price; nothing when there’s no result | Each check’s scan price; reading a scan is free |
- The Lookup API returns our latest stored result with the checks you asked for, however old it is. Use
maxAgeDaysto require a more recent one. It never scans: when there’s no stored result, it returns404no_result, free. An unknown query parameter returns400invalid_parameter. - The Scan API returns
202with the scan while it runs; itsLocationandRetry-Afterheaders say where and when to read it again. If a result from the last 24 hours has the checks you asked for, it returns that result with200, at the stored price. Read the scan at itslinks.self, which includes your checks. - The MCP server’s tools choose with their
sourceargument:stored, the default, uses the Lookup API and never scans, andscanuses the Scan API (MCP server). They acceptmaxAgeDaystoo.
Check a fix
The readiness check includes a prompt to fix each gap it finds. After you deploy a fix, scan the site again with "again": true in the body of POST /v1/scans. Once the previous answer is 3 minutes old, the check runs again instead of returning the last day’s result. Other checks ignore again.
Note
As with every POST, send an Idempotency-Key with the scan, so a retry returns the same scan (Idempotency). The MCP tool get_ai_readiness called with source: "scan" also checks again, so an agent that applied a fix can verify its own work.