CrawlCheck Machine Record API

The Machine Record API from CrawlCheck — 1 operation(s) for machine record.

GitHub OpenAPI

Operations 1

GET /api/v1/machine-record The unified machine record for one observation: subject, grade, findings (top… #

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-machine-record-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-machine-record-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Crawlcheck Io Machine Record 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 Machine Record 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: Machine Record
paths:
  /api/v1/machine-record:
    get:
      operationId: getMachineRecordV1
      summary: 'The unified machine record for one observation: subject, grade, findings (top…'
      parameters:
      - name: id
        in: query
        schema:
          type: string
      - name: domain
        in: query
        schema:
          type: string
      - name: format
        in: query
        schema:
          type: string
          enum:
          - json
          - otel
          - openlineage
          - jsonld
        description: 'json (default, MachineRecordV1); otel = OTLP/JSON traces (scan, stage and rule spans; rule spans link to the fetch spans they read); openlineage = a START and a COMPLETE RunEvent (fetches as input datasets, the report as the output dataset; facets at /schemas/openlineage-facets.json); jsonld = PROV-O + schema.org JSON-LD. Built from the record this caller may see: locked findings are omitted and counted'
      responses:
        '200':
          description: MachineRecordV1
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MachineRecordV1'
              examples:
                worked:
                  summary: 'Without a key: the top finding in full, the rest counted and locked. Captured from production on 2026-09-30 (MDT).'
                  value:
                    schema: https://crawlcheck.io/api/v1/schema#MachineRecordV1
                    version: '1.0'
                    kind: crawlcheck-machine-record
                    subject:
                      domain: wikipedia.org
                      host: www.wikipedia.org
                      path: /
                      report_id: evuew4dyje
                      scanned_at: '2026-10-01T00:47:02.058Z'
                      score_version: 26
                    observation:
                      grade: D
                      overall: 53
                      refused: false
                      unscored_reason: null
                      trace_id: 0fc371afddbba3d58a9555fb798968c6
                      observer: {}
                      identity_basis: every identity was sent by CrawlCheck from its own network; none is the named o…
                    findings:
                    - {}
                    findings_summary:
                      total: 5
                      serious: 1
                      by_severity: {}
                    findings_withheld: Every finding is listed by title, severity and path. The top one carries its co…
                    capabilities:
                      observed: true
                      sources: []
                      declared: 0
                      by_safety_class: {}
                      by_verification: {}
                      verified: []
                      mismatches: []
                      verification: null
                      items: []
                      reading: verified means CrawlCheck called it and the response matched what the site decl…
                    observers:
                      registry: https://crawlcheck.io/.well-known/crawlcheck-observers.json
                      count_for_this_domain: 2
                      side_by_side: {}
                    freshness:
                      observed_at: '2026-10-01T00:47:02.058Z'
                      age_hours: 0
                      latest_report_id: evuew4dyje
                      is_latest: true
                      newer_scan_exists: false
                      last_second_reading_at: '2026-09-30T15:55:13.473Z'
                      note: observed_at is when CrawlCheck fetched the site; nothing here says the site is …
                    confidence:
                      v: 1
                      sections_scored: {}
                      identities_answered: {}
                      fetches_kept: {}
                      stage_failures: 0
                      non_observations: 14
                      non_observations_attempted: 8
                      vantages: 1
                      refused: false
                      note: counts and ratios only - there is no composite confidence number, because the p…
                      vantages_note: CrawlCheck’s network plus every independent observer that read this URL within …
                      levels: {}
                    contradictions:
                      site: []
                      between_networks_open: []
                      locked_findings_not_shown: 4
                    evidence:
                      manifest_sha256: 9bc892a9b74d9a116e5cc5bd992a7f71a28679d1508e91bf1d8cad2397c5be4a
                      manifest_version: 3
                      signed: true
                      signing_kid: hcIAczGf-8EFBnkunmZlvFWnD2nHHeHeC9cM4BTiBVo
                      roots: {}
                      experiences: 22
                      verify: https://crawlcheck.io/api/verify?id=evuew4dyje
                      bundle: https://crawlcheck.io/api/bundle?id=evuew4dyje
                      offline_verifier: https://crawlcheck.io/crawlcheck-verify.mjs
                      prov: null
                    score_ledger:
                      score: 53
                      letter: D
                      cap: C
                      capped: false
                      held_at_reach: false
                      matches_record: true
                      rows: []
                      rows_withheld: 26
                      method: 'Points per row: the score recomputed with that one row passing, minus the score…'
                    access:
                      level: public
                      rule: the top finding in full; the rest by title, severity and path (a licence for th…
        '404':
          description: no record
      x-codeSamples:
      - lang: Shell
        label: curl
        source: "curl -s \\\n  'https://crawlcheck.io/api/v1/machine-record?domain=wikipedia.org'"
      security: []
      x-auth: public; no credential read
      tags:
      - Machine Record
    servers:
    - url: https://crawlcheck.io
components:
  schemas:
    MachineRecordV1:
      type: object
      required:
      - kind
      - version
      - subject
      - observation
      - findings
      - capabilities
      - evidence
      - access
      description: 'One observation in one shape (GET /api/v1/machine-record, MCP machine_record): subject, observation, findings (top in full without a licence; the rest locked), capabilities with safety class and verification state, evidence roots and verifier links'
      properties:
        kind:
          const: crawlcheck-machine-record
          x-stability: stable
        version:
          type: string
          x-stability: stable
        subject:
          type: object
          x-stability: provisional
        observation:
          type: object
          x-stability: provisional
        findings:
          type: array
          description: each open finding carries trust {freshness, confidence {level, means, basis[]}, contradictions[]}
          x-stability: provisional
        freshness:
          type: object
          description: observed_at, age_hours, latest_report_id, is_latest, newer_scan_exists, last_second_reading_at
          x-stability: provisional
        fix_impact:
          type:
          - array
          - object
          - 'null'
          description: 'With a licence: one line per fix that would change this record, best first (findings and rows it clears, other fixes some rows also need, score and letter after, root causes closed, certificate criteria flipped). Without: {fixes_available, best_single_fix {letter_after, score_after, findings_cleared, rows_cleared}} and no names'
          x-stability: provisional
        score_ledger:
          type:
          - object
          - 'null'
          description: 'score, letter, cap and the points each failing row moves (rows open with a licence); each open finding carries score_effect {points: 0, cap, binding, letter_without_it, says}'
          x-stability: provisional
        confidence:
          type: object
          description: 'counts and ratios plus vantages; no composite number; levels: contested | cross_vantage_confirmed | reproduced | single_reading'
          x-stability: provisional
        contradictions:
          type: object
          description: site (the site contradicts itself) and between_networks_open (observers disagree), for findings this caller can open
          x-stability: provisional
        findings_summary:
          type:
          - object
          - 'null'
          x-stability: provisional
        findings_withheld:
          type:
          - string
          - 'null'
          x-stability: provisional
        capabilities:
          type: object
          x-stability: provisional
        evidence:
          type: object
          x-stability: provisional
        access:
          type: object
          x-stability: provisional
      x-stability: provisional
  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