CrawlCheck Supply API
The Supply API from CrawlCheck — 1 operation(s) for supply.
The Supply API from CrawlCheck — 1 operation(s) for supply.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/crawlcheck-io:crawlcheck-io-supply-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Crawlcheck Io Supply API
version: '1'
contact:
name: CrawlCheck
url: https://crawlcheck.io/policy
email: hello@crawlcheck.io
license:
name: Terms
url: https://crawlcheck.io/policy
x-core-contract:
promise: 'These operations are the core contract. They stay at /api/v1 and keep answering for at least 180 days after any /api/v2 is announced; their stable fields change only in a new major version, and their provisional fields only after 30 days'' notice, per /docs/api/compatibility. Verifying what they return needs none of these calls: crawlcheck-verify.mjs checks a document on your machine against the published keys (/.well-known/http-message-signatures-directory) and the rotation record, read once with --online or saved for --keys. Everything else documented here is useful but secondary, and may change with the notice its fields'' tags promise.'
operations:
- method: GET
path: /api/v1/resolve
operationId: resolveDomainV1
- method: POST
path: /api/v1/resolve
operationId: resolveBatchV1
- method: POST
path: /api/v1/preflight
operationId: preflightV1
- method: GET
path: /api/v1/decisions/{sha256}
operationId: decisionCheckV1
- method: GET
path: /api/v1/revocations
operationId: revocations
- method: GET
path: /api/v1/visitor
operationId: visitorResolveV1
- method: POST
path: /api/v1/visitor
operationId: visitorResolveBatchV1
- method: GET
path: /api/v1/mcp/scan
operationId: mcpScanUrl
- method: POST
path: /api/v1/mcp/lock/check
operationId: mcpLockCheck
list: https://crawlcheck.io/api/v1/core
description: 'Operations tagged Supply across 2 of this provider''s published API definitions: crawlcheck-io-openapi.json, crawlcheck-io-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://crawlcheck.io
tags:
- name: Supply
paths:
/api/supply:
get:
operationId: pageSupply
summary: 'One page, three ledgers (supply1): the page''s content version with the day its…'
parameters:
- name: domain
in: query
required: true
schema:
type: string
- name: path
in: query
required: false
schema:
type: string
default: /
- name: days
in: query
required: false
schema:
type: integer
default: 28
maximum: 90
- name: scope
in: query
required: false
schema:
type: string
enum:
- cited
description: 'cited: every page a stored answer has cited on the domain, flagged first'
responses:
'200':
description: crawlcheck-supply (one page, with per-answer verdicts and flags) or crawlcheck-supply-cited (scope=cited)
content:
application/json:
examples:
worked:
summary: Shape from the build harness on 2026-10-15; owner data, so the example is illustrative.
value:
kind: crawlcheck-supply
v: 2
generated_at: '2026-10-15T23:40:00.000Z'
domain: example.com
path: /pricing
url: https://example.com/pricing
window_days: 28
page:
observed: true
read_now: false
content_sha256: c41a…
content_chars: 5120
version_since: '2026-10-14T03:40:00.000Z'
first_observed: '2026-10-07T04:30:00.000Z'
observations: 38
changes_observed: 1
seal:
day: '2026-10-14'
leaf_id: clk-3f9a…-c41a0f2e
sealed: true
leaf_index: 1412
root: 9b1e…
state: in the sealed Merkle root for 2026-10-14, timestamped with OpenTimestamps
lookup: https://crawlcheck.io/api/seal/lookup?id=clk-3f9a…-c41a0f2e&day=2026-10-14
proof: https://crawlcheck.io/proof/2026-10-14
previous_versions:
- content_sha256: 77d0…
from: '2026-10-07T04:30:00.000Z'
to: '2026-10-14T03:10:00.000Z'
seal_day: '2026-10-07'
declared:
json_ld_date_modified: '2026-10-14T00:00:00.000Z'
clock: https://crawlcheck.io/api/v1/content-clock?url=https%3A%2F%2Fexample.com%2Fpricing
crawlers:
measured: true
bots:
GPTBot:
hits: 3
verified: 3
forged: 0
unverifiable: 0
days: 2
last_seen: '2026-10-15'
last_verified: '2026-10-15'
verified_days:
- '2026-10-15'
- '2026-10-14'
PerplexityBot:
hits: 1
verified: 1
forged: 0
unverifiable: 0
days: 1
last_seen: '2026-10-12'
last_verified: '2026-10-12'
verified_days:
- '2026-10-12'
reading: Fetches of this exact path recorded at the site's own edge; verified means the address was inside the operator's published ranges.
answers:
indexed_runs_for_domain: 6
cited_this_page: 2
runs:
- at: '2026-10-15T14:17:00.000Z'
prompt: example pricing plans
model: gemini-3.5-flash-lite
mode: grounded
config: worker-cron-search
reading: Stored answer runs whose grounding cited this page, newest first.
verdicts:
- at: '2026-10-15T14:17:00.000Z'
prompt: example pricing plans
model: gemini-3.5-flash-lite
mode: grounded
flags: []
version:
content_sha256: c41a…
live_from: '2026-10-14T03:40:00.000Z'
still_live: true
seal_day: '2026-10-14'
verified_fetch_before_answer:
- GPTBot
flags: []
reading: 'One page, three ledgers: the content version CrawlCheck sealed, the crawlers that verifiably fetched it, and the answers that cited it. When an answer cites a version a crawler never fetched, or a version that changed after the fetch, this record says so.'
schema:
type:
- object
- 'null'
properties:
kind:
type:
- string
- 'null'
v:
type:
- number
- 'null'
generated_at:
type:
- string
- 'null'
domain:
type:
- string
- 'null'
path:
type:
- string
- 'null'
url:
type:
- string
- 'null'
window_days:
type:
- number
- 'null'
page:
type:
- object
- 'null'
properties:
observed:
type:
- boolean
- 'null'
read_now:
type:
- boolean
- 'null'
content_sha256: {}
content_chars:
type:
- number
- 'null'
version_since:
type:
- string
- 'null'
first_observed:
type:
- string
- 'null'
observations:
type:
- number
- 'null'
changes_observed:
type:
- number
- 'null'
seal:
type:
- object
- 'null'
properties:
day:
type:
- string
- 'null'
leaf_id: {}
sealed:
type:
- boolean
- 'null'
leaf_index:
type:
- number
- 'null'
root: {}
state:
type:
- string
- 'null'
lookup: {}
proof:
type:
- string
- 'null'
additionalProperties: true
previous_versions:
type:
- array
- 'null'
items:
type:
- object
- 'null'
properties:
content_sha256: {}
from:
type:
- string
- 'null'
to:
type:
- string
- 'null'
seal_day:
type:
- string
- 'null'
additionalProperties: true
declared:
type:
- object
- 'null'
properties:
json_ld_date_modified:
type:
- string
- 'null'
additionalProperties: true
clock:
type:
- string
- 'null'
additionalProperties: true
crawlers:
type:
- object
- 'null'
properties:
measured:
type:
- boolean
- 'null'
bots:
type:
- object
- 'null'
properties:
GPTBot:
type:
- object
- 'null'
properties:
hits:
type:
- number
- 'null'
verified:
type:
- number
- 'null'
forged:
type:
- number
- 'null'
unverifiable:
type:
- number
- 'null'
days:
type:
- number
- 'null'
last_seen:
type:
- string
- 'null'
last_verified:
type:
- string
- 'null'
verified_days:
type:
- array
- 'null'
items:
type:
- string
- 'null'
additionalProperties: true
PerplexityBot:
type:
- object
- 'null'
properties:
hits:
type:
- number
- 'null'
verified:
type:
- number
- 'null'
forged:
type:
- number
- 'null'
unverifiable:
type:
- number
- 'null'
days:
type:
- number
- 'null'
last_seen:
type:
- string
- 'null'
last_verified:
type:
- string
- 'null'
verified_days:
type:
- array
- 'null'
items:
type:
- string
- 'null'
additionalProperties: true
additionalProperties: true
reading:
type:
- string
- 'null'
additionalProperties: true
answers:
type:
- object
- 'null'
properties:
indexed_runs_for_domain:
type:
- number
- 'null'
cited_this_page:
type:
- number
- 'null'
runs:
type:
- array
- 'null'
items:
type:
- object
- 'null'
properties:
at:
type:
- string
- 'null'
prompt:
type:
- string
- 'null'
model:
type:
- string
- 'null'
mode:
type:
- string
- 'null'
config:
type:
- string
- 'null'
additionalProperties: true
reading:
type:
- string
- 'null'
additionalProperties: true
verdicts:
type:
- array
- 'null'
items:
type:
- object
- 'null'
properties:
at:
type:
- string
- 'null'
prompt:
type:
- string
- 'null'
model:
type:
- string
- 'null'
mode:
type:
- string
- 'null'
flags:
type:
- array
- 'null'
items: {}
version:
type:
- object
- 'null'
properties:
content_sha256: {}
live_from:
type:
- string
- 'null'
still_live:
type:
- boolean
- 'null'
seal_day:
type:
- string
- 'null'
additionalProperties: true
verified_fetch_before_answer:
type:
- array
- 'null'
items:
type:
- string
- 'null'
additionalProperties: true
flags:
type:
- array
- 'null'
items: {}
reading:
type:
- string
- 'null'
additionalProperties: true
x-schema-source: worked-example
'404':
description: not yours to read
x-codeSamples:
- lang: Shell
label: curl
source: 'curl -s -H ''x-crawlcheck-key: cc_…'' ''https://crawlcheck.io/api/supply?domain=example.com&path=/pricing'''
security: []
x-auth: public; no credential read
tags:
- Supply
servers:
- url: https://crawlcheck.io
components:
securitySchemes:
licenceKey:
type: apiKey
in: header
name: x-crawlcheck-key
description: 'Your licence key: cc_ followed by 32 hex characters. Sent on every keyed call.'
bearer:
type: http
scheme: bearer
description: The same licence key as a Bearer token. Accepted on /api/v1/* and /api/usage.
externalDocs:
url: https://crawlcheck.io/docs/api
description: Human-readable reference
x-refined-from:
- crawlcheck-io-openapi.json
- crawlcheck-io-openapi.yml