On this pageEvidence bundles
Evidence bundles
Aly Sawft · Founder & Engineer, Sawftware LLC ·
What is in a DocImprint evidence bundle?
manifest.json listing artifact SHA-256 hashes, EIP-191 signature, screenshot PNG, PDF, Markdown, OCR text, and optional Merkle root for citation proofs. Verify free with GET /v1/extract/{id}/verify.
Evidence bundle
Every stored extract produces a verifiable evidence bundle: Markdown, screenshot, OCR text, structured data, a SHA-256 manifest, signature.json (EIP-191 metadata), and optional Base L2 attestation. Complete bundles require a platform signature for valid: true on deep verify. Auditors can verify offline: download the ZIP, recompute manifest.json SHA-256, verify the signature against GET /v1/keys (active and retired keys), and check Merkle citation proofs — without trusting our database.
- Deep verify —
GET /v1/extract/:id/verifyre-fetches R2 and recomputes every hash (409 on tamper; unsigned complete bundles fail) - Citation proofs —
POST .../verify-citationreturns Merkleproof[] - Version history — pass
parent_bundle_id; queryGET .../history - Legal hold —
PUT .../holdblocks delete/GC; hold and handoff events are audit-logged (handoffs are application-layer, not cryptographically signed)
GET /v1/extract/{id}FreeBundle status
Retrieve manifest and artifact references.
GET /v1/extract/{id}/verifyFreeVerify bundle
Deep-verify: recompute manifest + artifact SHA-256 from storage; 409 on tamper.
POST /v1/extract/{id}/verify-citationFreeVerify citation
Merkle inclusion proof for a chunk_id + quoted text.
GET /v1/extract/{id}/historyFreeVersion history
Document version chain via parent_bundle_id / superseded_by.
PUT /v1/extract/{id}/holdFreeLegal hold
Block retention GC on a bundle (law-firm compliance).
GET /v1/extract/{id}/downloadFreeDownload ZIP
Stream all artifacts as a single archive.
POST /v1/extract/{id}/notarize$0.05Notarize
Anchor manifest hash on Base L2.
curl https://api.docimprint.com/v1/extract/ev_abc123/verify
# Deep verify (default): re-hashes manifest + artifacts from R2
# Add ?quick=true for status-only checkcurl https://api.docimprint.com/v1/keys
# Returns active and retired secp256k1 keys (key_id, signer_address, retired_at)
# Use with manifest signature + signature.json from the bundle ZIP for offline verifycurl https://api.docimprint.com/v1/extract/ev_abc123/historycurl -X POST https://api.docimprint.com/v1/extract/ev_abc123/notarize \
-H "X-Payment: <eip712-signed-usdc-transfer>"Bundle output details: Extract guide → Outputs