---
title: "One evidence bundle that verifies offline: signed manifest + public key, record digest, Merkle path, the day's .ots bytes; the sealed subject with a licence covering the domain. Verify with /crawlcheck-verify.mjs. Public"
method: GET
path: "/api/bundle"
---

# One evidence bundle that verifies offline: signed manifest + public key, record digest, Merkle path, the day's .ots bytes; the sealed subject with a licence covering the domain. Verify with /crawlcheck-verify.mjs. Public

`GET /api/bundle`

## Request

- Base URL: `https://crawlcheck.io`
- URL: `https://crawlcheck.io/api/bundle`
- Auth: none required

## Query parameters

- `id` string, required
- `download` '0'

## Response `200`

{kind, version, report, verifier, manifest, record, seal}

- EvidenceBundleV1: GET /api/bundle: one file that checks offline with /crawlcheck-verify.mjs. A field that cannot be filled (an anonymous download, an unsealed day, a record from before manifests) is null with a *_withheld / *_missing / why reason, never omitted
  - `kind` 'crawlcheck-evidence-bundle', required
  - `version` integer, required
  - `generated_at` string
  - `report` object, required
    - `id` string, nullable, required
    - `domain` string, nullable, required
    - `path` string, nullable
    - `scanned_at` string, nullable, required
    - `score_version` number, nullable
    - `archived` boolean
  - `verifier` object, required
    - `url` string, required
    - `sha256` string, required
    - `run` string
    - `page` string
  - `proves` string[]
  - `does_not_prove` string[]
  - `manifest` object, nullable, required
    - `sha256` string, required
    - `body` string, nullable, required
    - `body_missing` string, nullable
    - `signature` object, nullable
      - `alg` string, nullable
      - `kid` string, nullable
      - `message` string, nullable
      - `sig` string, nullable
      - `signed_at` string, nullable
    - `key` object, nullable
      - `jwk` object
        - `kty` 'OKP', required
        - `crv` 'Ed25519', required
        - `x` string, required
      - `kid` string
      - `published_in` string
    - `key_missing` string, nullable
  - `record` object, nullable, required
    - `digest` string, nullable, required
    - `subject` string, nullable, required
    - `subject_withheld` string, nullable
    - `recipe` string, nullable
    - `decision_leaves` object[], nullable
    - `lineage_leaves` object[], nullable
    - `leaves_withheld` string, nullable
  - `seal` object, nullable, required
    - `state` 'sealed' | 'pending' | 'unsealed' | 'unverifiable' | 'unknown', required
    - `day` string, nullable
    - `root` string, nullable
    - `path` object[]
      - `side` 'left' | 'right', required
      - `hash` string, required
    - `leaves_that_day` number, nullable
    - `sealed_at` string, nullable
    - `calendars` string[]
    - `ots_base64` string, nullable
    - `bitcoin_block` number, nullable
    - `recipe` string, nullable
    - `why` string, nullable
  - `publish_guard` object: sec8: every bundle is scanned before it is served; a section that matched is null and carries <section>_withheld
    - `checked` string[]
    - `withheld` object[]
      - `section` string
      - `matched` string[]
  - `disclosure` string: Who can read which representation of a scan: /docs/api#disclosure

## Other responses

- `404`: No record for that id

---

[API](https://skmtc.dev/crawlcheck/apis/crawlcheck-api.md) · [All operations](https://skmtc.dev/crawlcheck/apis/crawlcheck-api/llms.txt) · [OpenAPI document](https://skmtc.dev/crawlcheck/apis/crawlcheck-api/revisions/57acbd6d4489?raw)
