---
title: "List History"
method: GET
path: "/api/v1/funds/assignments/{user_id}/history"
tags: ["Fund Assignments"]
---

# List History

`GET /api/v1/funds/assignments/{user_id}/history`

## Request

- Base URL: `https://example.conductor.one`
- URL: `https://example.conductor.one/api/v1/funds/assignments/{user_id}/history`
- Auth: HTTP bearer and OAuth 2
  - Client credentials
  - Token URL: `/auth/v1/token`

List the change history for one subject's assignment, newest first.

## Path parameters

- `user_id` string, required: The userId field.

## Query parameters

- `page_size` integer: The pageSize field.
- `page_token` string: The pageToken field.

## Response `200`

Successful response

- C1ApiFundsV1FundAssignmentServiceListHistoryResponse: The FundAssignmentServiceListHistoryResponse message.
  - `list` C1ApiFundsV1FundAssignmentHistoryEntry[], nullable: The list field.
    - `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 identifies the actor's service; 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': 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` C1ApiFundsV1FundAssignment: FundAssignment is one principal's fund exception as the API renders it.
      - `controls` C1ApiFundsV1SpendControls: SpendControls retains coexisting base, extension and suspension state.
        - `extension` C1ApiFundsV1SpendExtension: SpendExtension replaces the base total temporarily; it is not additive credit.
          - `expiresAt` string, date-time, nullable
          - `limit` C1ApiFundsV1SpendLimit: SpendLimit distinguishes an amount, unlimited tracking and blocked supply. This message contains a oneof named kind. Only a single field of the following list may be set at a time: - unlimited - amount - blocked
            - `amount` C1ApiFundsV1SpendLimitAmount: The SpendLimitAmount message.
              - …
            - `blocked` C1ApiFundsV1SpendLimitBlocked: The SpendLimitBlocked message.
            - `unlimited` C1ApiFundsV1SpendLimitUnlimited: The SpendLimitUnlimited message.
          - `reason` string: The reason field.
        - `limit` C1ApiFundsV1SpendLimit: SpendLimit distinguishes an amount, unlimited tracking and blocked supply. This message contains a oneof named kind. Only a single field of the following list may be set at a time: - unlimited - amount - blocked
          - `amount` C1ApiFundsV1SpendLimitAmount: The SpendLimitAmount message.
            - `money` C1ApiFundsV1Money: Money is a non-negative monetary value used by spending controls.
              - …
          - `blocked` C1ApiFundsV1SpendLimitBlocked: The SpendLimitBlocked message.
          - `unlimited` C1ApiFundsV1SpendLimitUnlimited: The SpendLimitUnlimited message.
        - `period` 'PERIOD_KIND_UNSPECIFIED' | 'PERIOD_KIND_DAILY' | 'PERIOD_KIND_WEEKLY' | 'PERIOD_KIND_MONTHLY' | 'PERIOD_KIND_QUARTERLY' | 'PERIOD_KIND_YEARLY': The period field.
        - `suspension` C1ApiFundsV1SpendSuspension: SpendSuspension preserves the underlying controls while refusing new spend.
          - `reason` string: The reason field.
          - `suspendedAt` string, date-time, nullable
      - `createdAt` string, date-time, nullable
      - `tenantId` string: The tenantId field.
      - `updatedAt` string, date-time, nullable
      - `userId` string: Canonical c1.models.user.v2.User id, every UserType.
  - `nextPageToken` string: The nextPageToken field.

## Changes

- **2026-10-20** `fe943bedf41b`: 1 breaking, 1 info
  - added `#/components/schemas/c1.api.funds.v1.SpendControls` to the `list/items/snapshot/oneOf[subschema #1: Fund Assignment]/controls` response property `oneOf` list for the response status `200`
  - removed `#/components/schemas/c1.models.funds.v1.SpendControls` from the `list/items/snapshot/oneOf[subschema #1: Fund Assignment]/controls` response property `oneOf` list for the response status `200`
- **2026-09-01** `f76d07868c0c`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/conductorone/apis/c1-api/changes/api/v1/funds/assignments/:user_id/history/get.md)

---

[API](https://skmtc.dev/conductorone/apis/c1-api.md) - [All operations](https://skmtc.dev/conductorone/apis/c1-api/llms.txt) - [OpenAPI document](https://skmtc.dev/conductorone/apis/c1-api/revisions/fe943bedf41b?raw)
