On this pageEvidence bundles
Evidence bundles
DocImprint ·
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) - Action receipts — tools/responses include
rcpt_…; list withGET .../{id}/receipts, verify withGET .../receipts/{receipt_id}/verify(free, not owner-gated)
- GET
/v1/extract/{id}FreeBundle status
Fetch bundle metadata: status, manifest_sha256, artifact refs, and notarization fields without downloading the ZIP.
- GET
/v1/extract/{id}/verifyFreeVerify bundle
Recompute SHA-256 over stored artifacts and compare to the signed manifest. Returns verified:true or 409 if anything was tampered with.
- POST
/v1/extract/{id}/verify-citationFreeVerify citation
Prove a chunk_id + quoted text is included in the bundle Merkle tree. Body: { chunk_id, text }. Use after collections ask / search citations.
- GET
/v1/extract/{id}/historyFreeVersion history
Walk parent_bundle_id / superseded_by links for re-extracts of the same source. Useful when a page changed and you need the prior version.
- GET
/v1/extract/{id}/downloadFreeDownload ZIP
Stream the full evidence package (manifest.json, signature.json, screenshot, PDF, Markdown, OCR text) as one archive.
- GET
/v1/extract/{id}/manifestFreeGet manifest
Download raw manifest.json bytes with X-Manifest-SHA256 header. Prefer verify for integrity checks; use this for offline inspection.
- POST
/v1/extract/{id}/notarize$0.05Notarize
Anchor the bundle manifest hash on Base L2 (EAS attestation). Returns tx / attestation ids for public timestamping.
- PUT
/v1/extract/{id}/holdFreeLegal hold
Freeze a bundle so retention GC and DELETE cannot remove it. Use when litigation or investigation requires preservation.
- DELETE
/v1/extract/{id}/holdFreeRelease legal hold
Clear an existing hold so normal retention and delete are allowed again.
- DELETE
/v1/extract/{id}FreeDelete bundle
Permanently delete stored evidence and artifacts. Blocked while on legal hold or after notarization until policy allows.
- POST
/v1/extract/{id}/revokeFreeRevoke
Revoke an EAS attestation for a previously notarized bundle so auditors see it as withdrawn. Notarize first.
- GET
/v1/extract/{id}/provenanceFreeProvenance log
List application-layer events (agent_id, action, query, result_summary) appended to this bundle over time.
- POST
/v1/extract/{id}/provenanceFreeAppend provenance
Record what an agent did with this bundle (action + optional query/summary). Builds an audit trail beyond the signed ZIP.
- POST
/v1/extract/{id}/handoffFreeAgent handoff
Record a from_agent → to_agent custody transfer with an optional note. Call when ownership of the workflow moves between agents.
- GET
/v1/extract/{id}/chainFreeCustody chain
Ordered list of handoffs for a bundle — who held it and when. Pair with receipts for full chain-of-custody.
- GET
/v1/extract/{id}/receiptsFreeList action receipts
Signed receipts that bind a specific agent action to this bundle’s manifest_sha256. Proof the action ran against this exact evidence.
- GET
/v1/extract/receipts/{receipt_id}/verifyFreeVerify action receipt
Independently verify a receipt_id (capability token). Not owner-gated — anyone with the id can check signature + manifest binding.
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