Every value should be able to explain itself.
Each lineage document is a graph of where data came from. Append to it as you modify data to never lose track of source and confidence. OpenParser returns lineage with every extraction.
{ "format": "lineage@1", "id": "invoice-demo-1", "profiles": [ "https://docs.openparser.dev/lineage/openparser" ], "entities": { "invoice": { "kind": "artifact", "name": "demo-invoice.pdf", "locator": { "uri": "file:demo-invoice.pdf", "mediaType": "application/pdf" }, "digest": { "algorithm": "sha256", "value": "9f2c…" } }, "tax_rate": { "kind": "value", "name": "tax_rate", "value": 0.2, "path": "/tax_rate", "attributes": { "source": "workflow-input" } }, "parsed_invoice": { "kind": "artifact", "name": "parsed-document.json", "attributes": { "pageCount": 1, "blockCount": 35 } }, "evid_net_amount": { "kind": "evidence", "name": "net_amount region", "value": "€1.200,00", "selector": { "type": "openparser.document-region", "value": { "elementId": "net_amount", "pageNumber": 1, "bbox": [ 473, 409, 529, 425 ], "sourceType": "text", "granularity": "region" } }, "confidence": [ { "score": 0.99, "scale": { "min": 0, "max": 1 }, "kind": "reported", "scope": "recognition", "granularity": "region", "calibrated": false, "sources": [ { "type": "activity", "id": "parse" } ] } ] }, "evid_description": { "kind": "evidence", "name": "description region", "value": "Cloud hosting subscription", "selector": { "type": "openparser.document-region", "value": { "elementId": "description", "pageNumber": 1, "bbox": [ 53, 273, 202, 290 ], "sourceType": "text", "granularity": "region" } }, "confidence": [ { "score": 0.98, "scale": { "min": 0, "max": 1 }, "kind": "reported", "scope": "recognition", "granularity": "region", "calibrated": false, "sources": [ { "type": "activity", "id": "parse" } ] } ] }, "amount": { "kind": "value", "name": "amount", "value": "€1.200,00", "path": "/amount", "confidence": [ { "score": 0.97, "scale": { "min": 0, "max": 1 }, "kind": "reported", "scope": "extraction", "calibrated": false, "sources": [ { "type": "activity", "id": "extract_amount" } ] } ] }, "description": { "kind": "value", "name": "description", "value": "Cloud hosting subscription", "path": "/description", "confidence": [ { "score": 0.94, "scale": { "min": 0, "max": 1 }, "kind": "reported", "scope": "extraction", "calibrated": false, "sources": [ { "type": "activity", "id": "extract_description" } ] } ] }, "amount_n": { "kind": "value", "name": "amount_n", "value": 1200, "path": "/amount" }, "tax": { "kind": "value", "name": "tax", "value": 240, "path": "/tax" }, "total": { "kind": "value", "name": "total", "value": 1440, "path": "/total" }, "category": { "kind": "value", "name": "category", "value": "IT services", "path": "/category", "confidence": [ { "score": 0.82, "scale": { "min": 0, "max": 1 }, "kind": "reported", "scope": "classification", "calibrated": true, "sources": [ { "type": "activity", "id": "classify" } ], "method": "class_probability", "attributes": { "distribution": { "IT services": 0.82, "Software": 0.11, "Consulting": 0.05, "Other": 0.02 } } } ] }, "category_reviewed": { "kind": "value", "name": "category_reviewed", "value": "IT services", "path": "/category", "confidence": [ { "score": 1, "scale": { "min": 0, "max": 1 }, "kind": "assessed", "scope": "review", "calibrated": true, "sources": [ { "type": "agent", "id": "reviewer" } ] } ], "attributions": [ { "agent": "reviewer", "role": "reviewer" } ] } }, "activities": { "parse": { "type": "parse", "name": "Parse invoice PDF", "status": "ended", "implementation": { "type": "software", "name": "openparser-parse", "version": "1.42.0" }, "associations": [ { "agent": "parser", "role": "executor" } ] }, "extract_amount": { "type": "ai.extract", "name": "Extract amount", "status": "ended", "implementation": { "type": "software", "name": "openparser-extract", "version": "1.42.0" }, "associations": [ { "agent": "extractor", "role": "executor" } ] }, "extract_description": { "type": "ai.extract", "name": "Extract description", "status": "ended", "implementation": { "type": "software", "name": "openparser-extract", "version": "1.42.0" }, "associations": [ { "agent": "extractor", "role": "executor" } ] }, "normalize_amount": { "type": "compute", "name": "Normalize currency", "status": "ended", "parameters": { "expr": "parseCurrency(amount, 'de-DE')" } }, "compute_tax": { "type": "compute", "name": "Compute tax", "status": "ended", "parameters": { "expr": "amount_n * tax_rate" }, "associations": [ { "agent": "billing-service", "role": "executor" } ] }, "compute_total": { "type": "compute", "name": "Compute total", "status": "ended", "parameters": { "expr": "amount_n + tax" } }, "classify": { "type": "infer", "name": "Classify category", "status": "ended", "implementation": { "type": "model", "name": "classifier", "version": "finance-v3" }, "associations": [ { "agent": "classifier", "role": "executor" } ] }, "review_category": { "type": "review.confirm", "name": "Confirm category", "status": "ended", "associations": [ { "agent": "reviewer", "role": "reviewer" } ] } }, "agents": { "parser": { "type": "software", "name": "openparser-parse@1.42.0" }, "extractor": { "type": "software", "name": "openparser-extract@1.42.0" }, "classifier": { "type": "software", "name": "classifier@finance-v3" }, "billing-service": { "type": "software", "name": "Billing service" }, "reviewer": { "type": "person", "name": "analyst@acme" } }, "derivations": [ { "id": "d-parsed", "output": "parsed_invoice", "activity": "parse", "inputs": [ { "entity": "invoice", "role": "document", "effect": "direct" } ] }, { "id": "d-evid-amount", "output": "evid_net_amount", "activity": "parse", "inputs": [ { "entity": "invoice", "role": "document", "effect": "direct" }, { "entity": "parsed_invoice", "role": "parsed", "effect": "direct" } ] }, { "id": "d-evid-description", "output": "evid_description", "activity": "parse", "inputs": [ { "entity": "invoice", "role": "document", "effect": "direct" }, { "entity": "parsed_invoice", "role": "parsed", "effect": "direct" } ] }, { "id": "d-amount", "output": "amount", "activity": "extract_amount", "inputs": [ { "entity": "evid_net_amount", "role": "evidence", "effect": "direct" }, { "entity": "parsed_invoice", "role": "document", "effect": "indirect" } ] }, { "id": "d-description", "output": "description", "activity": "extract_description", "inputs": [ { "entity": "evid_description", "role": "evidence", "effect": "direct" }, { "entity": "parsed_invoice", "role": "document", "effect": "indirect" } ] }, { "id": "d-amount-n", "output": "amount_n", "activity": "normalize_amount", "inputs": [ { "entity": "amount", "role": "amount", "effect": "direct" } ], "transformation": { "type": "transformation", "expression": "parseCurrency(amount, 'de-DE')" } }, { "id": "d-tax", "output": "tax", "activity": "compute_tax", "inputs": [ { "entity": "amount_n", "role": "amount", "effect": "direct" }, { "entity": "tax_rate", "role": "rate", "effect": "direct" } ], "transformation": { "type": "transformation", "expression": "amount_n * tax_rate" } }, { "id": "d-total", "output": "total", "activity": "compute_total", "inputs": [ { "entity": "amount_n", "role": "amount", "effect": "direct" }, { "entity": "tax", "role": "tax", "effect": "direct" } ], "transformation": { "type": "transformation", "expression": "amount_n + tax" } }, { "id": "d-category", "output": "category", "activity": "classify", "inputs": [ { "entity": "description", "role": "text", "effect": "direct" } ] }, { "id": "d-category-reviewed", "output": "category_reviewed", "activity": "review_category", "inputs": [ { "entity": "category", "role": "prior", "effect": "direct" } ], "transformation": { "type": "identity", "description": "Human reviewer confirmed the classifier label" } } ], "relations": [], "outputs": [ "amount_n", "tax", "total", "category_reviewed" ]} 
amount_n + taxFour primitives, one sentence.
The billing service (agent) ran compute_tax (activity), using amount and tax rate (input entities) to produce tax (an output entity). That complete production record is one derivation.
01
Entities
Values, artifacts, evidence, decisions, and collections.
02
Activities
Operations that use or produce entities, such as parsing or reviewing.
03
Agents
People, organizations, software, services, or models responsible for work.
04
Derivations
One output entity, the activity that produced it, and its exact inputs.
One derivation
Read it like a sentence.
The compute_tax activity produced tax 240 from amount 1200 and tax rate 20%, with a readable transformation expression.
{
"id": "d-tax",
"output": "tax",
"activity": "compute_tax",
"inputs": [
{ "entity": "amount_n", "role": "amount", "effect": "direct" },
{ "entity": "tax_rate", "role": "rate", "effect": "direct" }
],
"transformation": {
"type": "transformation",
"expression": "amount_n * tax_rate"
}
}Nothing hidden behind the vocabulary.
A lineage document maps entities, activities, and agents, plus output-centric derivations.
formatProtocol version in the document.entitiesValues, artifacts, evidence, decisions, and collections.activitiesProcesses that used and/or generated entities.agentsPeople, organizations, software, services, or models.derivationsOutput-centric edges: one activity produced one output from typed inputs.outputsEntity ids that are the primary results of this document.profilesOptional URIs declaring domain vocabulary and selectors.confidenceFirst-class assertions with score, scale, kind, and scope. Never multiplied across steps.Hard rules
- IDs are globally unique across entities, activities, agents, and derivations.
- Every reference resolves; the derivation graph is acyclic.
- Each derived entity has at most one producer.
- Entity paths use RFC 6901 JSON Pointer.
Composition rules
- Services preserve existing entities and append new ones.
- Services may replace the outputs projection.
- Confidence assertions stay scoped. They are never multiplied across steps.
- Profiles extend vocabulary without changing
lineage.
Make data explain itself.
Copy the lineage example, pass it to another service, and keep appending.
Parse one of your PDFs in Studio
Upload a PDF in Studio and inspect blocks, markdown, and extracted JSON. New accounts get $10 in free credits.