---
title: "Get the interaction session containing an audit log entry"
method: GET
path: "/admin/audit/conversation"
tags: ["admin"]
---

# Get the interaction session containing an audit log entry

`GET /admin/audit/conversation`

Thread entries carry the request/response bodies the
transcript is built from; attempts, request revisions, and
response headers are omitted; redacted request headers and
per-request usage summaries are retained for continuation
and prompt-cache visualization.

## Query parameters

- `log_id` string, required
- `limit` integer

## Response `200`

OK

- AdminAuditConversationResponse
  - `anchor_id` string
  - `entries` AdminAuditLogEntryResponse[]
    - `alias_used` boolean
    - `auth_key_id` string
    - `auth_method` string
    - `bodies_omitted` boolean — BodiesOmitted marks a list entry whose request/response bodies (and other heavy payloads) were stripped server-side; the full entry is available from GET /admin/audit/detail. It also tells the dashboard the entry is persisted — a slim entry is never an in-flight request.
    - `cache_type` string
    - `client_ip` string
    - `conversation_payload` boolean — ConversationPayload reports that the entry's (stripped) bodies were shaped like a conversation, preserving the Interactions-drawer eligibility signal the dashboard otherwise sniffs from the bodies.
    - `data` AuditlogLogData
      - `api_key_hash` string
      - `attempts` AuditlogAttemptSnapshot[] — Attempts captures provider calls made for this logical request. SQL stores split this into audit_log_attempts; Mongo stores it embedded.
        - `duration_ns` integer
        - `error_code` string
        - `error_message` string
        - `error_type` string
        - `kind` string
        - `model` string
        - `provider_name` string
        - `provider_type` string
        - `response_body` unknown
        - `response_headers` object
        - `seq` integer
        - `started_at` string
        - `status_code` integer
        - `success` boolean
      - `error_code` string
      - `error_message` string — Error details (message can be long, so kept in JSON)
      - `failover` AuditlogFailoverSnapshot
        - `target_model` string
      - `labels` string[] — Labels are request labels extracted from configured tagging headers.
      - `max_tokens` integer
      - `request_body` unknown
      - `request_body_too_big_to_handle` boolean — Body capture status flags (set when body exceeds 1MB limit)
      - `request_headers` object — Optional headers (when LOGGING_LOG_HEADERS=true) Sensitive headers are auto-redacted
      - `request_revisions` AuditlogRequestRevisionSnapshot[] — RequestRevisions captures the ingress request-rewrite chain: one entry per registered rewriter that ran, in application order. Rewriters that changed the body carry the rewritten body; those that left it alone are recorded with NoChange so the audit trail still shows the step ran. RequestBody always remains the original client request; the last changed revision is what was forwarded downstream — when every rewriter was a no-op there is no such revision and the original body is what went upstream.
        - `body` unknown
        - `bytes_after` integer
        - `bytes_before` integer
        - `detail` unknown
        - `no_change` boolean — NoChange marks a rewriter that ran and left the body untouched. Such revisions record the step for operators — BytesAfter equals BytesBefore, Body is empty and TokensSaved is zero, though Detail may explain why nothing changed — but are not part of the chain that produced the forwarded request. Absent on entries written before no-change steps were tracked, which is why the flag is positive: an old revision always changed the body.
        - `rewriter` string
        - `seq` integer
        - `tokens_saved` integer — TokensSaved is the rewriter-reported estimate of prompt tokens this revision saved (e.g. token compression); zero when the rewriter does not report savings.
      - `response_body` unknown
      - `response_body_too_big_to_handle` boolean
      - `response_headers` object
      - `temperature` number — Request parameters
      - `user_agent` string — Identity
      - `workflow_features` AuditlogWorkflowFeaturesSnapshot
        - `audit` boolean
        - `budget` boolean
        - `cache` boolean
        - `failover` boolean
        - `guardrails` boolean
        - `usage` boolean
    - `duration_ns` integer — DurationNs is the request duration in nanoseconds
    - `error_type` string
    - `id` string — ID is a unique identifier for this log entry (UUID)
    - `method` string
    - `path` string
    - `provider` string — canonical provider type used for routing and filters
    - `provider_name` string
    - `request_id` string — Extracted fields for efficient filtering (indexed in relational DBs)
    - `requested_model` string — Core fields (indexed for queries)
    - `resolved_model` string
    - `session_id` string
    - `status_code` integer
    - `stream` boolean
    - `timestamp` string — Timestamp is when the request started
    - `usage` UsageRequestUsageSummary
      - `cache_write_input_tokens` integer
      - `cached_input_ratio` number
      - `cached_input_tokens` integer
      - `entries` integer
      - `estimated_cached_characters` integer
      - `input_tokens` integer
      - `output_tokens` integer
      - `rewrite_cost_saved` number
      - `rewrite_tokens_saved` integer
      - `total_tokens` integer
      - `uncached_input_tokens` integer
    - `user_path` string
    - `workflow_version_id` string
  - `truncated` boolean — Truncated reports that more session or linkage entries exist than were returned.

## Other responses

- `400` — Bad Request
- `401` — Unauthorized

---

[API](https://skmtc.net/enterpilot/apis/gomodel-api.md) · [All operations](https://skmtc.net/enterpilot/apis/gomodel-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/enterpilot/gomodel-api/versions/4c27ea61fcfe/schema)
