---
title: "Checks · API docs · CheckAnySite"
description: "Ask only for the checks you need. Each check costs credits on its own, and a scan runs only what its checks need."
url: "https://docs.checkanysite.com/questions"
---

Concepts

# Checks

Ask only for the checks you need. Each check costs credits on its own, and a scan runs only what its checks need.

## Choose checks

Name the checks you need: `?checks=ai,dns` in the query of [GET /sites/{domain}](https://docs.checkanysite.com/api/get-site), or `"checks": ["ai", "dns"]` in the body of [POST /scans](https://docs.checkanysite.com/api/start-scan). 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](https://docs.checkanysite.com/api/result) 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}](https://docs.checkanysite.com/api/get-site) | [POST /v1/scans](https://docs.checkanysite.com/api/start-scan), then [GET /v1/scans/{id}](https://docs.checkanysite.com/api/get-scan) |
| Many sites | [POST /v1/sites/batch](https://docs.checkanysite.com/batches#lookup), up to 50 | [POST /v1/scans/batch](https://docs.checkanysite.com/batches#scan), 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 `maxAgeDays` to require a more recent one. It never scans: when there’s no stored result, it returns `404` [no\_result](https://docs.checkanysite.com/errors#no_result), free. An unknown query parameter returns `400` [invalid\_parameter](https://docs.checkanysite.com/errors#invalid_parameter).
- The Scan API returns `202` with the scan while it runs; its `Location` and `Retry-After` headers 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 with `200`, at the stored price. Read the scan at its `links.self`, which includes your checks.
- The MCP server’s tools choose with their `source` argument: `stored`, the default, uses the Lookup API and never scans, and `scan` uses the Scan API ([MCP server](https://docs.checkanysite.com/mcp#answers)). They accept `maxAgeDays` too.

## 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](https://docs.checkanysite.com/api/start-scan). 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](https://docs.checkanysite.com/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.
