---
title: "List History"
method: GET
path: "/api/v1/settings/ai-governance/history"
tags: ["AI Governance Settings"]
---

# List History

`GET /api/v1/settings/ai-governance/history`

List the change history for AI governance settings (newest first).
 Singleton: scoped to the caller's tenant. Admin-tier per object-history convention.

## Response `200`

ListAIGovernanceSettingsHistoryResponse contains a page of AI governance
 settings change-history entries, newest first.

- C1ApiAiGovernanceV1ListAIGovernanceSettingsHistoryResponse — ListAIGovernanceSettingsHistoryResponse contains a page of AI governance settings change-history entries, newest first.
  - `list` C1ApiAiGovernanceV1AIGovernanceSettingsHistoryEntry[], nullable — The page of history entries, newest first.
    - `metadata` C1ApiHistoryV1HistoryEntryMetadata — HistoryEntryMetadata is the shared metadata envelope embedded on every per-service HistoryEntry. The strongly-typed snapshot lives on the per-service entry message alongside this envelope.
      - `actor` C1ApiHistoryV1HistoryActor — HistoryActor is a typed reference to whoever performed the change. kind mirrors the storage-model ActorKind enum; user_id is set when kind corresponds to a user principal (API / SUPPORT) so the frontend can resolve the user via its own avatar / lookup hooks. Protos reference objects by id; the frontend renders / caches itself. The raw passport fields (token_id / principal_id) intentionally do not leave the server. Non-user actors (workflow, connector, internal) are identified by `kind` alone; correlating IDs (workflow_run_id, etc.) flow through `HistoryAnnotation` instead of being plucked into the actor message.
        - `kind` 'ACTOR_KIND_UNSPECIFIED' | 'ACTOR_KIND_API' | 'ACTOR_KIND_SLACK' | 'ACTOR_KIND_MSTEAMS' | 'ACTOR_KIND_JIRA_CLOUD' | 'ACTOR_KIND_INTERNAL' | 'ACTOR_KIND_SUPPORT' | 'ACTOR_KIND_WORKFLOW' — The kind field.
        - `userId` string — Bare KSUID. Set when kind = ACTOR_KIND_API or ACTOR_KIND_SUPPORT. Empty otherwise. The frontend resolves user_id → display name via the same lookup paths it uses elsewhere (avatars, mentions, ...).
      - `annotations` C1ApiHistoryV1HistoryAnnotation[], nullable — Server-rendered annotations: known keys carry display_label and (for ticket_id, etc.) display_url resolved from tenant config. Cap mirrors the per-object annotation ceiling (16).
        - `displayLabel` string — Server-rendered label, e.g. "Ticket".
        - `displayUrl` string — Resolved from tenant config; "" if none. Frontend applies its own scheme allowlist.
        - `displayValue` string — UI-friendly rendering (truncated / reshaped from raw_value).
        - `key` string — Storage-side key. Bounds: ^[a-z][a-z0-9_.-]{0,63}$.
        - `kind` 'ANNOTATION_KIND_UNSPECIFIED' | 'ANNOTATION_KIND_GENERIC' | 'ANNOTATION_KIND_TICKET' | 'ANNOTATION_KIND_REASON' | 'ANNOTATION_KIND_WORKFLOW' | 'ANNOTATION_KIND_BATCH' | 'ANNOTATION_KIND_CORRELATION' | 'ANNOTATION_KIND_AUTOMATION' — The kind field.
        - `rawValue` string — Raw value as stored in ObjectHistory.annotations; storage-side values are capped at 512 bytes.
      - `changeKind` 'CHANGE_KIND_UNSPECIFIED' | 'CHANGE_KIND_CREATE' | 'CHANGE_KIND_PUT' | 'CHANGE_KIND_HARD_DELETE' — Storage-model enum re-exported here for wire compatibility with the storage row. UNSPECIFIED should never appear on the wire.
      - `createdAt` string, date-time, nullable
      - `id` string — KSUID. Same value as c1.models.history.v1.ObjectHistory.id.
      - `syslogEventId` string — System Log event id — KSUID of the OCSF event recorded for this write. Empty for non-RPC writes (workflows, cron). Customer-facing copy says "System Log event"; the underlying format is OCSF.
      - `traceId` string — OTel trace correlation. Empty when no valid span at write time. 32-hex-char otel trace id or empty.
    - `snapshot` C1ApiAiGovernanceV1AIGovernanceSettings — AIGovernanceSettings holds the tenant-wide AI governance policy that controls MCP client access, tool approval, classification defaults, audit detail, and automatic tool discovery. There is one settings object per tenant.
      - `allowedClientTypes` string[], nullable — MCP client types permitted to connect. An empty list allows all types.
      - `auditVerbosity` 'AUDIT_VERBOSITY_UNSPECIFIED' | 'AUDIT_VERBOSITY_MINIMAL' | 'AUDIT_VERBOSITY_STANDARD' | 'AUDIT_VERBOSITY_FULL' — How much detail is captured in the audit log for MCP tool calls.
      - `autoDiscoveryEnabled` boolean — When true, C1 periodically re-discovers tools from registered MCP servers on the discovery_interval schedule.
      - `c1awAutospillDisabled` boolean — Deprecated. Set QUOTA_REF_TENANT_C1AW_AUTOSPILL_THRESHOLD_KB to 0 to disable C1AW autospill.
      - `c1awAutospillThresholdBytes` integer — Deprecated. C1AW autospill is configured with QUOTA_REF_TENANT_C1AW_AUTOSPILL_THRESHOLD_KB.
      - `codeModeConcurrency` integer — Number of pre-warmed Lambda instances for the per-tenant code-mode function. 0 (default) leaves the Lambda cold-started on first call; > 0 keeps that many execution environments warm via AWS Lambda provisioned concurrency, redeploying the function on change.
      - `createdAt` string, date-time, nullable
      - `defaultClientLifecycle` C1ApiAiGovernanceV1MCPClientLifecycleConfig — MCPClientLifecycleConfig controls how long inactive MCP clients remain visible, when their access is closed, and when their records are removed. Durations are measured from the client's last activity. Any duration left at zero disables that transition.
        - `inactivityCloseAfter` string, duration, nullable
        - `inactivityHideAfter` string, duration, nullable
        - `retentionDeleteAfter` string, duration, nullable
      - `defaultToolClassification` 'TOOL_CLASSIFICATION_UNSPECIFIED' | 'TOOL_CLASSIFICATION_READ' | 'TOOL_CLASSIFICATION_WRITE' | 'TOOL_CLASSIFICATION_DESTRUCTIVE' | 'TOOL_CLASSIFICATION_SENSITIVE' | 'TOOL_CLASSIFICATION_DANGEROUS' — Classification assigned to newly discovered tools that do not declare their own classification (for example, read, write, or destructive).
      - `discoveryInterval` string, duration, nullable
      - `enabled` boolean — Legacy master switch.
      - `preferCodeModeOverDirectTools` boolean — When true, the MCP server hides direct tool listings from capable clients whenever the code-mode entrypoints (describe + execute) are registered, so agents discover and invoke MCP tools through TypeScript code mode instead of direct tool calls. A small allowlist of high-traffic direct tools remains exposed. Incapable clients (e.g. SERVICE, EPHEMERAL) see the normal tool set regardless. Defaults to false.
      - `requireToolApproval` boolean — When true, newly discovered tools start in a pending state and must be approved by an admin before they can be granted or invoked.
      - `surfaceRequestableTools` boolean — When true, MCP discovery surfaces tools the caller could request (no active grant, but reachable through a request catalog) alongside granted tools — both on the classic tools/list path and inside the code-mode describe entrypoint. Invoking such a tool opens (or reuses) an access-request ticket and returns a request_created envelope instead of executing. Defaults to true.
      - `untrustedJudgeDisable` boolean — When true, the A2 (untrusted-content) judge is skipped and the untrusted dimension always scores LOW. When false (the default), the judge scores agent turn input and tool output for prompt-injection risk on every turn. Defaults to false, so the judge runs by default.
      - `updatedAt` string, date-time, nullable
  - `nextPageToken` string — Pagination token for the next page, or empty if there are no more results.

---

[API](https://skmtc.net/conductorone/apis/c1-api.md) · [All operations](https://skmtc.net/conductorone/apis/c1-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/conductorone/c1-api/revisions/f2cf3228f366/schema)
