July 1, 2026
Cross-document analysis: compare information across multiple files with one API call
Your agent has 5 documents. It needs to find contradictions, track changes, and reconcile data. Here's how to do it without orchestrating dozens of tool calls.
Your AI agent just pulled three documents: a contract, an amendment, and an invoice. The contract says payment terms are Net-30. The amendment changed it to Net-45. The invoice says Net-60. Which one is correct?
This is the multi-document problem. Single-document extraction is solved — every API can pull fields from one file. But production workflows rarely involve just one document. Due diligence involves dozens of filings. Contract review involves original + amendments. Invoice processing involves POs + receipts + contracts.
Until now, handling this required your agent to extract from each document separately, hold all results in context, then write custom logic to compare, reconcile, and flag conflicts. That's dozens of tool calls, complex state management, and brittle comparison code.
Cross-analysis in one API call
The /cross-analyze endpoint handles this natively. Send multiple files, define what you need to know across them, get a unified answer:
POST /api/v1/cross-analyze
{
"files": [
"master_agreement.pdf",
"amendment_1.pdf",
"amendment_2.pdf",
"latest_invoice.pdf"
],
"schema": {
"effective_payment_terms": {
"type": "string",
"description": "Current payment terms after all amendments"
},
"payment_term_history": {
"type": "array",
"description": "How payment terms changed across documents"
},
"invoice_matches_contract": {
"type": "boolean",
"description": "Does the invoice use the correct payment terms?"
},
"discrepancies": {
"type": "array",
"description": "Any conflicts between documents"
}
}
}
What you get back
{
"data": {
"effective_payment_terms": "Net-45",
"payment_term_history": [
{"document": "master_agreement.pdf", "terms": "Net-30", "date": "2024-01-15"},
{"document": "amendment_1.pdf", "terms": "Net-45", "date": "2024-06-01"},
{"document": "amendment_2.pdf", "terms": "Net-45 (unchanged)", "date": "2025-01-10"}
],
"invoice_matches_contract": false,
"discrepancies": [
"Invoice states Net-60 but effective terms are Net-45 per Amendment 1"
]
},
"reasoning": {
"effective_payment_terms": "Master agreement set Net-30. Amendment 1 (dated June 2024)
superseded with Net-45. Amendment 2 modified scope but did not change payment terms.
Net-45 is the current effective term.",
"invoice_matches_contract": "Invoice #8842 states 'Payment due within 60 days'
which implies Net-60. This contradicts the contractually agreed Net-45."
},
"sources": {
"effective_payment_terms": [
"Payment shall be made within 30 days (master_agreement.pdf, p.8)",
"Section 4.2 is amended to read: Payment within 45 days (amendment_1.pdf, p.2)"
]
},
"confidence": {
"effective_payment_terms": 0.97,
"invoice_matches_contract": 0.99
}
}
One API call. Four documents analyzed. The contradiction caught. Every claim cited with document name and page number. Your agent didn't need to orchestrate anything — the API handled the cross-referencing internally.
Use cases where cross-analysis matters
Financial due diligence
Compare a company's 10-K filing, investor presentation, and internal spreadsheet. Do the revenue numbers match? Are there claims in the deck that the filing doesn't support?
schema: {
"revenue_consistent": {"type": "boolean",
"description": "Does reported revenue match across all sources?"},
"unsupported_claims": {"type": "array",
"description": "Claims in the investor deck not supported by the 10-K"},
"growth_rate_discrepancy": {"type": "number",
"description": "Difference in stated growth rate between sources"}
}
Contract management
Track changes across contract versions. Find which clauses changed, which stayed the same, and whether the latest version is internally consistent.
Insurance claims
Cross-reference the claim form, the policy document, and supporting evidence. Does the claim fall within coverage? Do the dates and amounts match?
Regulatory compliance
Compare a company's public disclosures against regulatory filings. Are there inconsistencies between what was reported to the SEC vs. what's on the website?
Invoice reconciliation
Match invoices against purchase orders and delivery receipts. Flag invoices where quantities, prices, or terms don't match the PO.
How it works internally
Cross-analysis isn't just "extract from each, then compare." The API:
- Indexes all documents — builds a navigable map of each file's structure and content
- Identifies corresponding sections — finds where the same topic is discussed across documents
- Extracts and compares — pulls relevant data from each source and compares values
- Reasons over conflicts — when values differ, determines which is authoritative (e.g., amendments supersede originals)
- Returns unified answers — synthesizes across all sources into your schema with full citations
This is what your agent would need to do manually with 10-20 individual API calls, complex state management, and custom comparison logic. Cross-analyze does it in one request.
Pricing
Cross-analysis costs 5 credits per document plus 3 credits per page analyzed. For a set of 4 documents totaling 30 pages:
4 documents × 5 credits = 20 credits
30 pages × 3 credits = 90 credits
Total: 110 credits = $1.10 at $0.01/credit
Compare that to the engineering cost of building, maintaining, and debugging a multi-document comparison pipeline. Or the token cost of sending all four documents into a single LLM context window (assuming they fit).
When to use cross-analyze vs. individual analysis
Use /analyze when
- Working with a single document
- Questions are about one file's content
- You need speed over breadth
Use /cross-analyze when
- Comparing 2+ documents
- Finding contradictions or changes
- Reconciling data across sources
- Verifying consistency
Try cross-analysis in the playground — upload two versions of a contract and ask what changed.