How lineage establishes chain of custody
Every record stores its full lineage. When you retrieve lineage via the API, the system returns:- Origin: Where the record came from with
origin_feature,origin_source_id, andsource_details. - Transform chain: Each transform that produced or enriched the record, with
transform_name,connector_name,executed_at, andexecuted_by. This links data to the specific connector and user. - Transitions: When data moved between features with
from_feature,to_feature,trigger_type, anduser_id. - Field updates: Every modification to record fields, with
field_path,old_value,new_value,source, anduser_id.
Retrieving lineage
chain (records from root to current) and a unified timeline of events.
Export integrity
When exporting a report to PDF withinclude_provenance: true, the export captures:
- Exported at: UTC timestamp of export generation
- Exported by: User ID who triggered the export
- Data fingerprints: SHA-256 hash of each section’s data at export time
What the chain of custody proves
A complete lineage record establishes:- Where the data came from: Origin feature and source ID, with optional source details
- How it was produced: Transform name, connector name, and who executed it
- When each step occurred: Timestamps on origin, transforms, transitions, and updates
- Who handled the data:
created_by,executed_by,updated_by(with display names when available) - What changed: Field update history with old and new values
Sharing reports externally
When providing a report to a third party (legal counsel, regulator, court):- Export the report to PDF with
include_provenance: true - Provide the PDF; the provenance section and fingerprints are embedded in the document
- The recipient can verify the export timestamp and exporter identity from the provenance section
- If the recipient has access to the source data, they can recompute the fingerprints to confirm the exported data matches what was in the report at export time