Skip to content

Get Audit Trail

GET
/api/canvas/{deal_id}/audit-trail
curl --request GET \
--url https://example.com/api/canvas/example/audit-trail \
--header 'Authorization: Bearer <token>'

Return the full Decision Audit Trail for deal_id.

Response shape::

{
    "deal_id": "...",
    "finalization": {...} | None,
    "summary": {
        "total_events": N,
        "retrievals": N,
        "agent_discourse_entries": N,
        "user_actions": N,
        "readiness_snapshots": N,
        "llm_calls": N
    },
    "timeline": [
        {"kind": "retrieval", "ts": "ISO", ...},
        {"kind": "discourse", "ts": "ISO", ...},
        {"kind": "activity", "ts": "ISO", ...},
        {"kind": "readiness", "ts": "ISO", ...},
        {"kind": "llm_call", "ts": "ISO", ...}
    ]
}

Empty-warehouse case (no events recorded yet for this deal): returns a well-formed body with finalization=null, timeline=[], and all summary counts at 0. Status is 200.

Stateless: each call opens a fresh DuckDB connection and runs 6 parameter-bound queries against the Parquet glob. Typical latency is sub-100ms for deals with <10k events.

deal_id
required
Deal Id
string

Successful Response

Media type application/json
Response Get Audit Trail Api Canvas Deal Id Audit Trail Get
object
key
additional properties
any
Example generated
{}

Validation Error

Media type application/json
HTTPValidationError
object
detail
Detail
Array<object>
ValidationError
object
loc
required
Location
Array
msg
required
Message
string
type
required
Error Type
string
input
Input
ctx
Context
object
Example generated
{
"detail": [
{
"loc": [
"example"
],
"msg": "example",
"type": "example",
"input": "example",
"ctx": {}
}
]
}