CrawlCheck Explain API

The Explain API from CrawlCheck — 1 operation(s) for explain.

GitHub OpenAPI

Operations 1

GET /api/explain One finding explained: rule and revision, compared fetches, valid time, Merkle… #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/crawlcheck-io:crawlcheck-io-explain-api"
All apis
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.

Get an API 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 Specification

crawlcheck-io-explain-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Crawlcheck Io Explain 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 Explain 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: Explain
paths:
  /api/explain:
    get:
      operationId: explainFinding
      summary: 'One finding explained: rule and revision, compared fetches, valid time, Merkle…'
      parameters:
      - name: id
        in: query
        schema:
          type: string
      - name: domain
        in: query
        schema:
          type: string
      - name: code
        in: query
        schema:
          type: string
      - name: path
        in: query
        schema:
          type: string
      responses:
        '200':
          description: explanation
          content:
            application/json:
              examples:
                worked:
                  summary: With only a domain, the top finding is explained. Captured from production on 2026-09-30 (MDT).
                  value:
                    ok: true
                    kind: crawlcheck-finding-explanation
                    version: '1.0'
                    subject:
                      domain: wikipedia.org
                      host: www.wikipedia.org
                      report_id: evuew4dyje
                      scanned_at: '2026-10-01T00:47:02.058Z'
                    finding:
                      fid: f1:c0040fbedf9413f7da88
                      decision_id: d1:e30ed813b0b16dd37c57
                      code: ROBOTS_RULES_SHADOWED
                      severity: 3
                      path: /robots.txt
                      title: robots.txt rules do not apply to named agents
                      detail: 1 named User-agent group (1 agent) do not repeat 428 of the Disallow rules the `*` group carries. A crawler obeys only …
                      meaning: A crawler reads only the User-agent group that matches it best and ignores every other group, including `*`. Naming an …
                    rule:
                      code: ROBOTS_RULES_SHADOWED
                      revision: 1
                      revision_note: null
                      score_version: 26
                      decided_in:
                        trace_id: 0fc371afddbba3d58a9555fb798968c6
                        span_id: 9bd0a15870b1043d
                    observed:
                      evidence:
                        shadowed_groups: 1
                        agents_affected: 1
                        search_engines_affected: 0
                        sample:
                        - {}
                      compared_fetches: null
                      support_scope: 'scan: the decision rests on the whole scan, not on named fetches'
                    corroboration:
                      status: not_applicable
                      reading: this finding does not depend on the requesting identity or network
                    trust:
                      freshness:
                        observed_at: '2026-10-01T00:47:02.058Z'
                        last_observed: '2026-10-01T00:47:02.058Z'
                        held_since: '2026-08-24T03:17:42.851Z'
                        state: persisted
                      confidence:
                        level: reproduced
                        means: 'seen again: repeated on CrawlCheck''s own network, or in more than one scan'
                        basis:
                        - seen in 51 scans since 2026-08-24
                      contradictions: []
                    score_effect:
                      decision_id: d1:e30ed813b0b16dd37c57
                      code: ROBOTS_RULES_SHADOWED
                      path: /robots.txt
                      severity: 3
                      level: medium
                      points: 0
                      cap: C
                      binding: false
                      letter_now: D
                      letter_without_it: D
                      same_level_others: 0
                      says: Would cap the letter at C, but the score (53) already reads D, so the letter is the same without it. Moves no points.
                    held:
                      state: persisted
                      first_seen: '2026-08-24T03:17:42.851Z'
                      scans_seen: 51
                      valid_time:
                        valid_from:
                          after: null
                          by: '2026-08-24T03:17:42.851Z'
                        valid_to: null
                        recorded_at: '2026-08-24T03:17:42.851Z'
                        superseded_at: null
                        superseded_by: null
                        earlier_intervals: 0
                        before_bt1: true
                      history: https://crawlcheck.io/api/findings?domain=wikipedia.org
                    proof:
                      in_signed_manifest: true
                      manifest_sha256: 9bc892a9b74d9a116e5cc5bd992a7f71a28679d1508e91bf1d8cad2397c5be4a
                      decision_root: bbf3a9f8f9eb7b8b9c52abbd85d3b11d3250d8e2b60699bee89218a31d60bd24
                      leaf: fcefc792db0371caa735052cbd0201e7adc42c3ee0546243876e33e0c22d9312
                      path:
                      - side: right
                        hash: fcefc792db0371caa735052cbd0201e7adc42c3ee0546243876e33e0c22d9312
                      - side: right
                        hash: 047bc9f5fdbb2e7c4c008d47856b12220e57733356f34b4c8495804f72d4f31b
                      how: leaf = sha256(canonical JSON of leaf_object); fold along path (side:right = sibling on the right) to the root; the root…
                    check:
                      verify: https://crawlcheck.io/api/verify?id=d1:e30ed813b0b16dd37c57
                      bundle: https://crawlcheck.io/api/bundle?id=evuew4dyje
                      offline_verifier: https://crawlcheck.io/crawlcheck-verify.mjs
                    access: public
              schema:
                type:
                - object
                - 'null'
                properties:
                  ok:
                    type:
                    - boolean
                    - 'null'
                  kind:
                    type:
                    - string
                    - 'null'
                  version:
                    type:
                    - string
                    - 'null'
                  subject:
                    type:
                    - object
                    - 'null'
                    properties:
                      domain:
                        type:
                        - string
                        - 'null'
                      host:
                        type:
                        - string
                        - 'null'
                      report_id:
                        type:
                        - string
                        - 'null'
                      scanned_at:
                        type:
                        - string
                        - 'null'
                    additionalProperties: true
                  finding:
                    type:
                    - object
                    - 'null'
                    properties:
                      fid:
                        type:
                        - string
                        - 'null'
                      decision_id:
                        type:
                        - string
                        - 'null'
                      code:
                        type:
                        - string
                        - 'null'
                      severity:
                        type:
                        - number
                        - 'null'
                      path:
                        type:
                        - string
                        - 'null'
                      title:
                        type:
                        - string
                        - 'null'
                      detail: {}
                      meaning: {}
                    additionalProperties: true
                  rule:
                    type:
                    - object
                    - 'null'
                    properties:
                      code:
                        type:
                        - string
                        - 'null'
                      revision:
                        type:
                        - number
                        - 'null'
                      revision_note: {}
                      score_version:
                        type:
                        - number
                        - 'null'
                      decided_in:
                        type:
                        - object
                        - 'null'
                        properties:
                          trace_id:
                            type:
                            - string
                            - 'null'
                          span_id:
                            type:
                            - string
                            - 'null'
                        additionalProperties: true
                    additionalProperties: true
                  observed:
                    type:
                    - object
                    - 'null'
                    properties:
                      evidence:
                        type:
                        - object
                        - 'null'
                        properties:
                          shadowed_groups:
                            type:
                            - number
                            - 'null'
                          agents_affected:
                            type:
                            - number
                            - 'null'
                          search_engines_affected:
                            type:
                            - number
                            - 'null'
                          sample:
                            type:
                            - array
                            - 'null'
                            items:
                              type:
                              - object
                              - 'null'
                              properties: {}
                              additionalProperties: true
                        additionalProperties: true
                      compared_fetches: {}
                      support_scope:
                        type:
                        - string
                        - 'null'
                    additionalProperties: true
                  corroboration:
                    type:
                    - object
                    - 'null'
                    properties:
                      status:
                        type:
                        - string
                        - 'null'
                      reading:
                        type:
                        - string
                        - 'null'
                    additionalProperties: true
                  trust:
                    type:
                    - object
                    - 'null'
                    properties:
                      freshness:
                        type:
                        - object
                        - 'null'
                        properties:
                          observed_at:
                            type:
                            - string
                            - 'null'
                          last_observed:
                            type:
                            - string
                            - 'null'
                          held_since:
                            type:
                            - string
                            - 'null'
                          state:
                            type:
                            - string
                            - 'null'
                        additionalProperties: true
                      confidence:
                        type:
                        - object
                        - 'null'
                        properties:
                          level:
                            type:
                            - string
                            - 'null'
                          means:
                            type:
                            - string
                            - 'null'
                          basis:
                            type:
                            - array
                            - 'null'
                            items:
                              type:
                              - string
                              - 'null'
                        additionalProperties: true
                      contradictions:
                        type:
                        - array
                        - 'null'
                        items: {}
                    additionalProperties: true
                  score_effect:
                    type:
                    - object
                    - 'null'
                    properties:
                      decision_id:
                        type:
                        - string
                        - 'null'
                      code:
                        type:
                        - string
                        - 'null'
                      path:
                        type:
                        - string
                        - 'null'
                      severity:
                        type:
                        - number
                        - 'null'
                      level:
                        type:
                        - string
                        - 'null'
                      points:
                        type:
                        - number
                        - 'null'
                      cap:
                        type:
                        - string
                        - 'null'
                      binding:
                        type:
                        - boolean
                        - 'null'
                      letter_now:
                        type:
                        - string
                        - 'null'
                      letter_without_it:
                        type:
                        - string
                        - 'null'
                      same_level_others:
                        type:
                        - number
                        - 'null'
                      says:
                        type:
                        - string
                        - 'null'
                    additionalProperties: true
                  held:
                    type:
                    - object
                    - 'null'
                    properties:
                      state:
                        type:
                        - string
                        - 'null'
                      first_seen:
                        type:
                        - string
                        - 'null'
                      scans_seen:
                        type:
                        - number
                        - 'null'
                      valid_time:
                        type:
                        - object
                        - 'null'
                        properties:
                          valid_from:
                            type:
                            - object
                            - 'null'
                            properties:
                              after: {}
                              by:
                                type:
                                - string
                                - 'null'
                            additionalProperties: true
                          valid_to: {}
                          recorded_at:
                            type:
                            - string
                            - 'null'
                          superseded_at: {}
                          superseded_by: {}
                          earlier_intervals:
                            type:
                            - number
                            - 'null'
                          before_bt1:
                            type:
                            - boolean
                            - 'null'
                        additionalProperties: true
                      history:
                        type:
                        - string
                        - 'null'
                    additionalProperties: true
                  proof:
                    type:
                    - object
                    - 'null'
                    properties:
                      in_signed_manifest:
                        type:
                        - boolean
                        - 'null'
                      manifest_sha256:
                        type:
                        - string
                        - 'null'
                      decision_root:
                        type:
                        - string
                        - 'null'
                      leaf:
                        type:
                        - string
                        - 'null'
                      path:
                        type:
                        - array
                        - 'null'
                        items:
                          type:
                          - object
                          - 'null'
                          properties:
                            side:
                              type:
                              - string
                              - 'null'
                            hash:
                              type:
                              - string
                              - 'null'
                          additionalProperties: true
                      how: {}
                    additionalProperties: true
                  check:
                    type:
                    - object
                    - 'null'
                    properties:
                      verify:
                        type:
                        - string
                        - 'null'
                      bundle:
                        type:
                        - string
                        - 'null'
                      offline_verifier:
                        type:
                        - string
                        - 'null'
                    additionalProperties: true
                  access:
                    type:
                    - string
                    - 'null'
                additionalProperties: true
                x-schema-source: worked-example
        '403':
          description: 'locked: needs a licence for the domain'
        '404':
          description: no record or finding
      x-codeSamples:
      - lang: Shell
        label: curl
        source: "curl -s \\\n  'https://crawlcheck.io/api/explain?domain=wikipedia.org'"
      security: []
      x-auth: public; no credential read
      tags:
      - Explain
    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