# Use CrawlCheck as a verifiable source

Before an agent reads, cites, connects to or transacts with a domain, it asks CrawlCheck what the domain claims, what it serves, who controls it, what is safe to do, what changed, and what evidence proves it.

Every answer is signed, logged and checkable offline, so an agent can rely on it and cite it without trusting CrawlCheck.

## Three calls

### 1 · Ask

`GET https://crawlcheck.io/api/v1/resolve?domain=example.com`

No key, no account. One JSON answer: what the domain claims, what it serves to named crawlers, who controls it, a decision for read, cite, connect and transact, what changed, and the evidence behind each.

### 2 · Verify

`node crawlcheck-verify.mjs answer.json --online`

Every answer is signed with Ed25519 against a published key and logged in an append-only transparency log. The verifier is one file with no dependencies; the SDKs carry the same check (npm i @crawlcheck/sdk, pip install crawlcheck).

### 3 · Cite

`Link: <https://crawlcheck.io/api/v1/resolve?domain=example.com&as_of=…>; rel="cite-as"`

Every answer carries a permanent URL for that exact answer (RFC 8574 cite-as). It returns the answer that was in force at that moment, signed as it was then, with its place in the log.

## Citation format

```
CrawlCheck. Resolve record for {domain}, answered {answered_at} (sha256 {sha256}). {cite_as}
```

Example:

```
CrawlCheck. Resolve record for github.com, answered 2026-10-09T15:37:51.090Z (sha256 a29fb7d9…). https://crawlcheck.io/api/v1/resolve?domain=github.com&as_of=2026-10-09T15:37:51.090Z
```

Attribute CrawlCheck when you show an answer to people (https://crawlcheck.io/api-terms). The daily snapshot is CC BY 4.0.

## Other ways to ask

- **Before an action**: `POST /api/v1/preflight` — allow, warn, require_confirmation or block for one action, with a signed receipt the site you visit can check (https://crawlcheck.io/docs/api#act)
- **From an MCP client**: `https://crawlcheck.io/mcp` — tools resolve_domain, preflight and mcp_servers; the same signed answers (https://crawlcheck.io/.well-known/mcp/server-card.json)
- **Over DNS**: `example.com._v.crawlcheck.io TXT` — a compact signed verdict through DNS-over-HTTPS at /dns-query (https://crawlcheck.io/spec/resolve-dns)
- **From the site itself**: `https://example.com/.well-known/crawlcheck-staple.json` — the signed verdict served by the site, so no call to CrawlCheck is needed (https://crawlcheck.io/spec/staple)
- **Without revealing the site**: `GET /api/v1/resolve-prefix/{2-8 hex of sha256(domain)}` — every answer in the bucket; you pick yours locally (https://crawlcheck.io/spec/resolve)
- **Fully offline**: `GET /api/v1/snapshot` — the daily signed snapshot, one signed answer per line, CC BY 4.0 (https://crawlcheck.io/data)
- **A business's own facts**: `GET /api/v1/business/record?domain=` — the signed, versioned record of what the business publishes about itself (https://crawlcheck.io/docs/api#business-record)
- **What changed**: `GET /api/v1/changes` — the change feed, also as a stream (https://crawlcheck.io/docs/api)

## What a cite decision covers

A cite decision covers access, permissions, identity and provenance: whether the page may be read and attributed, under what declared rights, from whom, observed when. It never says the content is true.

## What counts

Measured by verified agent actions backed by a fresh signed Resolve record, by action type (read · cite · connect · transact), with false positives, disputes, unknowns and reversals counted. Live: https://crawlcheck.io/metrics

## Machine-readable

- https://crawlcheck.io/.well-known/crawlcheck.json (signed manifest)
- https://crawlcheck.io/openapi.json
- https://crawlcheck.io/llms.txt
- https://crawlcheck.io/.well-known/mcp/server-card.json
- https://crawlcheck.io/spec/resolve

## What an answer is not

A signed answer says what CrawlCheck measured and decided, and when. It is not a guarantee about the site. Check fresh_until: past it the answer is stale. Disputes and corrections: https://crawlcheck.io/disputes
