Skip to main content
Every action an AI agent takes is captured as a ProvenLogEvent. Events follow a versioned schema (v1.0) designed for forward compatibility.

Event structure

Field reference

Identity fields

Source fields

Action fields

Timing fields

Integrity fields (server-assigned)

Dimension fields

Action types

Labels vs Metadata

Both are key-value pairs included in the hash chain, but they serve different purposes: Use labels for values you need to filter on, scope policies to, or group in dashboards — for example env, dept, loan_id, or user_id. Use metadata for informational fields you want hashed into the audit record but don’t need to query — model name, SDK version, prompt token counts, etc.

Label context

Labels are short identifiers (e.g. loan_id = "LN-2024-4821"), but dashboards often need richer information — the borrower name, the loan amount, the origination date. Label context lets you attach that business data to a label value so it can appear alongside events in the UI without being stored on every event. Both SDKs expose a set_context / setContext method that sends a fire-and-forget PUT to store the context:
Context is keyed by (label_key, label_value) and upserted — calling set_context again for the same pair replaces the previous data. Transport errors are logged as warnings and never raise, so context pushes won’t interrupt your agent. See the Python SDK and TypeScript SDK guides for full usage details.

Validation

ProvenLog uses best-effort validation. Only a missing agent_id is fatal — all other issues are stored as validation_warnings on the event. The philosophy: audit gaps are worse than imperfect records.