CrawlCheck Rules API

The Rules API from CrawlCheck — 1 operation(s) for rules.

GitHub OpenAPI

Operations 1

GET /api/rules The rulebook: every finding code CrawlCheck can raise, with what it means, its… #

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-rules-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-rules-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Crawlcheck Io Rules 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 Rules 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: Rules
paths:
  /api/rules:
    get:
      operationId: rulebook
      summary: 'The rulebook: every finding code CrawlCheck can raise, with what it means, its…'
      parameters:
      - name: code
        in: query
        required: false
        schema:
          type: string
      responses:
        '200':
          description: crawlcheck-rulebook (RulebookV1)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RulebookV1'
              examples:
                worked:
                  summary: Production reads the scan counters live. Without ?code= the rules array carries every rule.
                  value:
                    ok: true
                    kind: crawlcheck-rulebook
                    v: 1
                    generated_at: '2026-10-02T03:55:01.445Z'
                    score_version: 26
                    schema: https://crawlcheck.io/schemas/rulebook.json
                    counts:
                      rules: 63
                      by_kind:
                        scan: 52
                        answer_correlation: 5
                        capability_mismatch: 6
                      by_family:
                        site: 8
                        headers: 4
                        mostly_code: 3
                        machine_files: 11
                        robots: 13
                        delivery: 8
                        jsonld: 3
                        nap: 2
                        answers: 5
                        capabilities: 6
                      revised: 7
                      scored: 48
                    scans_counted: 2518
                    severity_scale:
                    - level: info
                    - level: low
                    - level: medium
                    - level: high
                    - level: critical
                    method:
                      revisions: A rule that changes what it reports gets a new revision; a record keeps the revision that decided it, and a replay uses that revision, never today's.
                      share: Share of counted scans that carried the code at least once, the same numbers /data publishes. Self-scans and opted-out sites are never counted.
                      grade: Each finding has a level from info to critical. Open findings at medium and above lower the letter grade; fix them first.
                    rules:
                    - code: NO_LLMS_TXT
                      kind: scan
                      family:
                        id: machine_files
                        label: Machine files
                      title: No llms.txt
                      meaning: Not a defect. llms.txt is an emerging convention for telling AI systems what a site is and which pages matter.
                      severity:
                        level: info
                      scored: true
                      measured_on: every scan
                      revision:
                        current: 1
                        revised_at: null
                      fix:
                        advice: 'Publish /llms.txt: a short Markdown file naming the business, what it does, and the pages worth reading, served as text/plain or text/markdown.'
                        effort: content
                        endpoint: https://crawlcheck.io/api/tool/llms?domain={domain}&format=txt
                      share_of_scans:
                        pct: 24.8
                        scans: 625
                        of_scans: 2518
                        basis: share of counted scans that carried it; the same numbers /data publishes
                      links:
                        self: https://crawlcheck.io/rules#NO_LLMS_TXT
                        api: https://crawlcheck.io/api/rules?code=NO_LLMS_TXT
                        glossary:
                        - https://crawlcheck.io/glossary/llms-txt
                        - https://crawlcheck.io/glossary/machine-layer
                        workflow: https://crawlcheck.io/workflow/NO_LLMS_TXT
                        lineage: https://crawlcheck.io/docs/lineage-coverage
                        explain_template: https://crawlcheck.io/api/explain?id={report_id}&code=NO_LLMS_TXT
                    filter:
                      code: NO_LLMS_TXT
        '404':
          description: no rule with that code; the list of codes
      x-codeSamples:
      - lang: Shell
        label: curl
        source: curl -s 'https://crawlcheck.io/api/rules?code=NO_LLMS_TXT'
      security: []
      x-auth: public; no credential read
      tags:
      - Rules
    servers:
    - url: https://crawlcheck.io
components:
  schemas:
    RuleV1:
      type: object
      required:
      - code
      - kind
      - family
      - title
      - severity
      - revision
      - share_of_scans
      description: 'One rule: the code, what it means, its level, its current revision, its fix and its share of counted scans.'
      properties:
        code:
          type: string
          pattern: ^[A-Z][A-Z0-9_]+$
          x-stability: provisional
        kind:
          enum:
          - scan
          - answer_correlation
          - capability_mismatch
          - self_audit
          description: 'self_audit: a defect in CrawlCheck''s own record, never in the site'
          x-stability: provisional
        family:
          type: object
          required:
          - id
          - label
          properties:
            id:
              type: string
              x-stability: provisional
            label:
              type: string
              x-stability: provisional
          x-stability: provisional
        title:
          type:
          - string
          - 'null'
          x-stability: provisional
        meaning:
          type:
          - string
          - 'null'
          x-stability: provisional
        severity:
          type: object
          properties:
            level:
              type:
              - string
              - 'null'
              x-stability: provisional
          x-stability: provisional
        scored:
          type: boolean
          description: raised on a graded scan record; refusals, answer runs, capability mismatches and self-audit findings are not
          x-stability: provisional
        measured_on:
          type:
          - string
          - 'null'
          x-stability: provisional
        revision:
          type: object
          required:
          - current
          properties:
            current:
              type: integer
              minimum: 1
              x-stability: provisional
            revised_at:
              type:
              - string
              - 'null'
              description: when the current revision took effect; null while the rule is at revision 1
              x-stability: provisional
          x-stability: provisional
        fix:
          type: object
          properties:
            advice:
              type:
              - string
              - 'null'
              x-stability: provisional
            effort:
              type:
              - string
              - 'null'
              x-stability: provisional
            endpoint:
              type:
              - string
              - 'null'
              x-stability: provisional
          x-stability: provisional
        share_of_scans:
          type: object
          required:
          - pct
          - basis
          properties:
            pct:
              type:
              - number
              - 'null'
              x-stability: provisional
            scans:
              type:
              - integer
              - 'null'
              x-stability: provisional
            of_scans:
              type:
              - integer
              - 'null'
              x-stability: provisional
            basis:
              type: string
              x-stability: provisional
          x-stability: provisional
        links:
          type: object
          properties:
            self:
              type:
              - string
              - 'null'
              x-stability: provisional
            api:
              type:
              - string
              - 'null'
              x-stability: provisional
            glossary:
              type: array
              items:
                type: string
              x-stability: provisional
            workflow:
              type:
              - string
              - 'null'
              x-stability: provisional
            lineage:
              type:
              - string
              - 'null'
              x-stability: provisional
            explain_template:
              type:
              - string
              - 'null'
              x-stability: provisional
          x-stability: provisional
      x-stability: provisional
    RulebookV1:
      type: object
      required:
      - kind
      - v
      - generated_at
      - counts
      - severity_scale
      - rules
      description: 'Every finding CrawlCheck can raise (GET /api/rules): what it means, its level, its fix and its share of counted scans.'
      properties:
        ok:
          type: boolean
          x-stability: provisional
        kind:
          const: crawlcheck-rulebook
          x-stability: provisional
        v:
          const: 1
          x-stability: provisional
        generated_at:
          type: string
          x-stability: provisional
        score_version:
          type:
          - number
          - 'null'
          x-stability: provisional
        schema:
          type:
          - string
          - 'null'
          x-stability: provisional
        counts:
          type: object
          required:
          - rules
          properties:
            rules:
              type: integer
              x-stability: provisional
            by_kind:
              type: object
              additionalProperties:
                type: integer
              x-stability: provisional
            by_family:
              type: object
              additionalProperties:
                type: integer
              x-stability: provisional
            revised:
              type: integer
              x-stability: provisional
            scored:
              type: integer
              x-stability: provisional
          x-stability: provisional
        scans_counted:
          type:
          - integer
          - 'null'
          x-stability: provisional
        severity_scale:
          type: array
          items:
            type: object
            properties:
              level:
                type: string
                x-stability: provisional
          x-stability: provisional
        method:
          type: object
          properties:
            revisions:
              type:
              - string
              - 'null'
              x-stability: provisional
            share:
              type:
              - string
              - 'null'
              x-stability: provisional
            grade:
              type:
              - string
              - 'null'
              x-stability: provisional
          x-stability: provisional
        rules:
          type: array
          items:
            $ref: '#/components/schemas/RuleV1'
          description: every rule; with ?code= only that rule (counts still describe the whole rulebook)
          x-stability: provisional
        filter:
          type:
          - object
          - 'null'
          properties:
            code:
              type:
              - string
              - 'null'
              x-stability: provisional
          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