sawftware-apps

docimprint-sdk

Community sawftware-apps
Updated

Document memory agents can prove — SDK for tamper-evident evidence bundles, citations, and on-chain attestation

Document memory agents can prove. PDFs & URLs → cited answers · evidence bundles · on-chain attestation

Table of contents

  • At a glance
  • Choose your integration
  • See what you get
  • How it works
  • Why not plain OCR or RAG?
  • Use cases
  • Install
  • Quick start
  • Features
  • Why DocImprint?
  • Agent-native features
  • CrewAI integration
  • MCP server
  • API reference
  • Error handling
  • Authentication
  • TypeScript
  • Pricing
  • Community
  • Links

At a glance

DocImprint turns any PDF or URL into a tamper-evident evidence bundle — structured data, AI-cited answers, and a cryptographic proof your agents can verify independently.

Input PDF or URL
Output ev_... evidence bundle — cited answers, artifact hashes, EIP-191 signature
Verify client.verify() — free, no auth; optional Base L2 notarization via EAS

Choose your integration

Path Best for Start here
TypeScript SDK Node agents, typed apps Quick start
Python SDK CrewAI, scripts Quick start · CrewAI
MCP server Claude, Cursor MCP server
x402 USDC Autonomous agents, no account x402 USDC payments

See what you get

Every response includes a verifiable bundle ID, manifest hash, and cited answers tied to exact source quotes.

{
  "bundle_id": "ev_01jqv8k3m2x",
  "manifest_sha256": "a3f2c1d8e9b0476f8a2b1c0d9e8f7a6b5c4d3e2f1a0b9c8d7e6f5a4b3c2d1e0f",
  "signature": {
    "signature": "0x8f4e2a1b9c3d5e7f0a2b4c6d8e0f1a3b5c7d9e1f3a5b7c9d1e3f5a7b9c1d3e5f71c",
    "signer_address": "0x742d35Cc6634C0532925a3b844Bc9e7595f0EbE",
    "algorithm": "secp256k1-eip191"
  },
  "answer_cited": {
    "value": "Section 4.2 does not permit unilateral termination without 90 days written notice.",
    "citations": [
      {
        "quote": "Neither party may terminate this Agreement unilaterally except upon ninety (90) days prior written notice to the other party.",
        "paragraphs": [42],
        "page": 4,
        "confidence": "high"
      }
    ]
  },
  "artifacts": {
    "markdown": { "sha256": "b4e5f6a79876543210fedcba9876543210fedcba9876543210fedcba9876543210ab" },
    "manifest": { "sha256": "a3f2c1d8e9b0476f8a2b1c0d9e8f7a6b5c4d3e2f1a0b9c8d7e6f5a4b3c2d1e0f" }
  }
}

How it works

flowchart LR
  source[PDF or URL] --> extract[extract / qa / checkClaims]
  extract --> bundle[Evidence bundle ev_...]
  bundle --> artifacts[Artifacts + manifest SHA-256]
  bundle --> citations[Cited answers with quotes]
  artifacts --> verify[verify - free]
  verify --> notarize[notarize on Base L2 - optional]

Why not plain OCR or RAG?

Plain OCR Vector RAG DocImprint
Exact source quotes No Approximate Yes, with paragraph refs
Tamper evidence No No SHA-256 manifest + EIP-191 sig
Independent verify No No verify() without API key
On-chain attestation No No EAS on Base L2
Agent audit trail No No Provenance + handoff (Python)

Use cases

Scenario Method Result
Contract Q&A client.qa() Cited answer with confidence score
Claim verification client.checkClaims() Per-claim verdict: supported / contradicted / not_found
Invoice intake client.extract({ mode: 'invoice' }) Structured merchant, line items, totals — all cited
Compliance archive legal_hold: true + notarize() Immutable on-chain record, deletion blocked

Install

npm install docimprint           # TypeScript / Node.js
pip install docimprint           # Python REST client
pip install "docimprint[crewai]" # + 10 CrewAI tools & ProvenanceTracker

Python source lives in python/. PyPI: docimprint.

Quick start

Get an API key at docimprint.com — free tier available, no credit card required.

TypeScript

import { DocImprintClient } from 'docimprint'

const client = new DocImprintClient({ apiKey: 'dr_live_...' })

const result = await client.extract({
  source: 'https://example.com/contract.pdf',
  include: ['markdown', 'summary'],
})

console.log(result.bundle_id)        // ev_01j...
console.log(result.summary)          // AI-generated summary
console.log(result.manifest_sha256)  // tamper-evident hash
console.log(result.key_points_cited[0].citations[0].quote)

Python

from docimprint import DocImprintClient

client = DocImprintClient(api_key="dr_live_...")

result = client.extract(
    url="https://example.com/contract.pdf",
    include=["markdown", "summary"],
)
print(result["bundle_id"])         # ev_01j...
print(result["summary"])           # AI-generated summary
print(result["manifest_sha256"])   # tamper-evident hash

REST API (cURL)

curl -X POST https://api.docimprint.com/v1/extract \
  -H "Authorization: Bearer dr_live_..." \
  -H "Content-Type: application/json" \
  -d '{"source": "https://example.com/contract.pdf", "include": ["markdown", "summary"]}'

Features

Capability Method / Mode Description
Extract extract() Full evidence bundle — markdown, summary, cited key points, artifacts, manifest SHA-256
Invoice parsing mode: 'invoice' Structured InvoiceResult: merchant, date, line items, subtotal, tax, total — all with citations
Document comparison mode: 'compare' Diff two documents; supply previous_bundle_id to track changes
Structured extraction mode: 'extract-structured' Extract typed fields using a caller-defined JSON Schema
Summarize summarize() Prose summary + key points, each with cited paragraph references
Q&A qa() Single-question answer with inline citations and confidence score
Claim-check checkClaims() Per-claim verdict: supported / contradicted / not_found with evidence quotes
Translate translate() Source-cited translation to any language
Describe describe() AI description of image or PDF page contents
Collections createCollection() + searchCollection() + askCollection() Semantic search + cross-document RAG Q&A across multiple bundles
Verify verify() Cryptographic integrity check — manifest hash, EIP-191 signature, artifact hashes. Free, no auth
Notarize notarize() Write manifest SHA-256 to Base L2 via EAS — permanent, immutable attestation
MCP server 20 tools · 2 prompts Native MCP for Claude, Cursor, and any MCP-compatible client
x402 REST X-Payment header Pay per call in USDC — no account required

Why DocImprint?

  • 🔏 Cryptographic provenance — every bundle is EIP-191 signed at creation; optionally notarized on Base L2 via EAS for an immutable on-chain audit trail
  • 🤖 Agent-native by design — async jobs, webhooks, idempotency keys, and legal hold built into every request, not bolted on
  • 📎 Beyond OCR — citations carry exact quotes, paragraph indices, and confidence scores (high/medium/low), not just raw text
  • 🛠️ 10 CrewAI tools out of the boxresearch_tools(), legal_tools(), collection_tools() pre-grouped for common agent workflows
  • ⚖️ Compliance-readylegal_hold, provenance logging, multi-agent handoff tracking, and on-chain notarization designed for legal and regulated industries
  • 💳 Flexible payment — monthly credit plans or pay-per-call USDC via x402, no account required

Agent-native features

DocImprint is designed for autonomous agent workflows, not just synchronous API calls.

// Fire-and-forget async extraction — returns job_id immediately
const job = await client.extract({
  source: 'https://example.com/large-report.pdf',
  async: true,
  webhook: 'https://your-agent.io/callback',
  idempotency_key: 'report-2025-q4',
  legal_hold: true,
})

const status = await client.getJob(job.job_id)
// { status: 'complete', bundle_id: 'ev_...', progress_pct: 100 }

// Monitor a URL for changes — get notified on diff
await client.extract({
  source: 'https://example.com/terms.html',
  monitor: { webhook: 'https://your-agent.io/changes', mode: 'diff' },
})

Python: provenance & multi-agent handoff tracking

client.log_provenance(bundle_id="ev_...", agent_id="agent-research", action="extracted")
client.handoff(bundle_id="ev_...", from_agent="agent-research", to_agent="agent-legal", note="ready for claim check")

CrewAI integration

10 purpose-built tools for CrewAI agents, organized into preset groups.

from docimprint.crewai import DocImprintToolkit

toolkit = DocImprintToolkit(
    api_key="dr_live_...",
    collection_id="col_...",  # required for collection tools
)

toolkit.research_tools()      # extract, summarize, qa, check_claims
toolkit.legal_tools()         # check_claims, verify, notarize
toolkit.collection_tools()    # search, ask, add_to_collection
toolkit.all_tools()           # all 10 tools
Tool What it does
ExtractEvidenceTool Full evidence bundle with citations and manifest hash
SummarizeTool Key points with cited paragraph references
QATool Cited answer with confidence score
CheckClaimsTool Per-claim verdict: supported / contradicted / not_found
TranslateTool Source-cited translation
VerifyBundleTool Cryptographic integrity check — manifest, hash, signature
NotarizeTool On-chain EAS attestation on Base L2
SearchCollectionTool Semantic vector search across document collection
AskCollectionTool Cross-document RAG Q&A with cited sources
AddToCollectionTool Add bundle to collection and trigger async indexing

ProvenanceTracker wraps all tools to automatically log agent actions and bundle handoffs.

from docimprint.crewai import DocImprintToolkit, ProvenanceTracker

tracker = ProvenanceTracker(client=toolkit.client)
trackable = toolkit.trackable_tools()

DocImprintKnowledgeSource integrates with CrewAI's knowledge system for retrieval-augmented agents.

MCP server

DocImprint exposes a native MCP server for use with Claude, Cursor, and any MCP-compatible client.

Install via Smithery (one command):

npx @smithery/cli install docimprint --client claude

Manual config:

{
  "mcpServers": {
    "docimprint": {
      "type": "streamable-http",
      "url": "https://api.docimprint.com/mcp",
      "headers": {
        "Authorization": "Bearer dr_live_..."
      }
    }
  }
}

Transport: streamable-http · Auth: Bearer token · Listed on Smithery ·

MCP tools

URL tools — lean mode, no bundle stored:

Tool Description
extract_url Fetch URL → text + metadata
summarize_url Fetch URL → prose summary + key points
qa_url Fetch URL → cited answer to a specific question
translate_url Fetch URL → translated content

Document tools — accepts base64 PDF or image:

Tool Description
extract_text OCR plain text from PDF / image
extract_tables OCR tables as Markdown from PDF / image
parse_invoice Structured invoice fields: merchant, line items, totals + citations
summarize_document Prose summary + cited key points
check_claims Per-claim verdict with evidence quotes
extract_structured Extract typed fields using a caller-defined schema

Bundle & collections:

Tool Description
verify_bundle Cryptographic integrity check
get_bundle Bundle metadata and notarization status
notarize_bundle On-chain EAS attestation on Base L2
create_collection Create a named document collection
list_collections List your collections
add_document_to_collection Add bundle + trigger async indexing
search_collection Semantic vector search
ask_collection Cross-document RAG Q&A
get_job_status Poll async job (extract, indexing, batch)
get_quota Check credit balance and plan status

Guided prompts: claim_check_workflow · invoice_intake

Resource: bundle://{bundle_id} — read bundle metadata directly

API reference

Full typed reference: docimprint.com/docs · OpenAPI

Category Methods
Core extract, verify, download, notarize, deleteBundle
Focused summarize, qa, translate, checkClaims, describe
Extract modes invoice, extract-structured, compare, store: false (lean)
Collections createCollection, listCollections, addToCollection, searchCollection, askCollection
Jobs getJob, listJobs, getQuota

Error handling

import { DocImprintClient, DocImprintError } from 'docimprint'

try {
  const result = await client.extract({ source: 'https://example.com/doc.pdf' })
} catch (err) {
  if (err instanceof DocImprintError) {
    console.error(err.message)    // human-readable error
    console.error(err.status)     // HTTP status code
    console.error(err.requestId)  // x-request-id for support
  }
}

Authentication

API key

Monthly credits via Stripe — sign up at docimprint.com, free tier available:

const client = new DocImprintClient({ apiKey: 'dr_live_...' })

x402 USDC payments

DocImprint supports the x402 open standard — pay per call in USDC on Base, straight from any EVM wallet. No account. No sign-up. No API key. Your agent can call the API autonomously without any human-managed credentials.

The API is x402-native: it returns a standard 402 Payment Required response with on-chain payment details, your client settles in USDC, and the request completes automatically. From $0.01 / call.

With @x402/fetch (automatic payment handling):

import { wrapFetchWithPayment } from '@x402/fetch'
import { createWalletClient, http } from 'viem'
import { privateKeyToAccount } from 'viem/accounts'
import { base } from 'viem/chains'

const account = privateKeyToAccount('0x...')
const wallet = createWalletClient({ account, chain: base, transport: http() })

const fetchWithPayment = wrapFetchWithPayment(fetch, wallet)

const res = await fetchWithPayment('https://api.docimprint.com/v1/summarize', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ source: 'https://example.com/report.pdf' }),
})
const data = await res.json()

Identity on owner routes: For GET/DELETE operations that require ownership (e.g. fetching your bundle), pass the payment-signature header from a prior payment response so the API can verify your wallet address without a separate login.

TypeScript

All request and response types are exported:

import type {
  ExtractRequest,
  ExtractResponse,
  Citation,
  CitedField,
  InvoiceResult,
  Job,
  Collection,
  SearchResult,
} from 'docimprint'

Pricing

Free tier available — no credit card required. Monthly credit plans via Stripe, or pay per call in USDC via x402. See pricing →

Community

Questions, integrations, and announcements: GitHub Discussions.

Links

MCP Server · Populars

MCP Server · New

    adelinamart

    RoBrain

    Shared memory across your team and your AI agents — with judgment about what's worth keeping.

    Community adelinamart
    Lyellr88

    MARM: Local-First Persistent Multi-Agent Memory Layer for MCP Clients v2.20.0

    Self-hosted, local-first MCP memory server for AI agents. Sub-20ms recall at 10k memories, hybrid semantic + exact-syntax search (RAG), code & concept knowledge graphs (158 languages). All local in SQLite: no cloud, no vector DB, no API keys. Works with Claude Code, Codex, Cursor, Gemini & any MCP client.

    Community Lyellr88
    Bumblebiber

    hmem — Humanlike Memory for AI Agents

    Persistent memory and agent lifecycle for Claude Code — because sessions shouldn't start from zero.

    Community Bumblebiber
    firish

    Claude Code for Visual Studio

    Bring Claude Code to Visual Studio 2026: A native diff with accept/reject, a live debugger Claude can drive autonomously, Roslyn code navigation, and Test Explorer integration. The IDE half of Claude Code's integration protocol. Community-built, unofficial.

    Community firish
    uiNerd16

    @aicanvas/mcp

    Open-source React and Tailwind component marketplace. Install via the shadcn CLI or your AI editor over MCP, with reproduction prompts for Claude Code, Lovable, and V0.

    Community uiNerd16