---
title: "List Entity Field Value History"
method: GET
path: "/v2/entities/{entity_id}/field-history"
tags: ["Entity API"]
---

# List Entity Field Value History

`GET /v2/entities/{entity_id}/field-history`

## Request

- Base URL: `https://public.api.serval.com`
- URL: `https://public.api.serval.com/v2/entities/{entity_id}/field-history`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/serval/apis/serval-public-api/docs/v2/entities/:entity_id/field-history/get.ts> (a function with typed inputs; its response is checked against the schema)

List the change history for an entity's field values. Returns historical and current values ordered by most recent first. Optionally filter by field ID or field key.

## Path parameters

- `entity_id` string, required: The ID of the entity.

## Query parameters

- `fieldId` string: Optional: filter by a specific field ID.
- `fieldKey` string: Optional: filter by a specific field key (alternative to field_id).
- `pageSize` integer: Maximum number of results to return. Default is 100, maximum is 1000.
- `pageToken` string: Token for pagination. Leave empty for the first request.

## Response `200`

Success

- SvstorePublicapiListEntityFieldValueHistoryResponse
  - `data` SvstoreEntityFieldValue[]: The list of field value history entries, ordered by most recent first.
    - `id` string: The EAV row id. NOT populated on entity read paths (Entity.field_values: search / list / get / create / update) since the v4 slim document_json dropped it — it has no consumer there. It IS populated on the listEntityFieldValueHistory RPC, which reads EAV rows directly.
    - `entityId` string
    - `fieldId` string
    - `fieldKey` string
    - `fieldName` string
    - `dataType` 'DATA_TYPE_UNSPECIFIED' | 'TEXT' | 'NUMBER' | 'BOOL' | 'TIMESTAMP' | 'ENUM' | 'ENTITY_REF' | 'USER_REF' | 'UNIQUE' | 'MULTI_SELECT' | 'FILE'
    - `value` union: `Value` represents a dynamically typed value which can be either null, a number, a string, a boolean, a recursive struct value, or a list of values. A producer of value is expected to set one of these variants. Absence of any variant indicates an error. The JSON representation for `Value` is JSON value.
      - number
      - string
      - boolean
      - unknown[]
        - unknown
      - object
    - `setByUserId` string, nullable: Attribution: who/what set this field value. Stored in the slim document_json and populated on ALL entity read paths (search / list / get / create / update) as well as field-value history.
    - `setByAppInstanceId` string, nullable
    - `createdAt` string, date-time: A timestamp in RFC 3339 format (e.g., "2025-01-15T01:30:15Z").
    - `deletedAt` string, date-time: A timestamp in RFC 3339 format (e.g., "2025-01-15T01:30:15Z").
    - `pinned` boolean: When true, ingestion cannot overwrite this user-set value. Stored in the slim document_json and populated on ALL entity read paths.
  - `nextPageToken` string, nullable: Token for retrieving the next page of results. Empty if no more results.

## Other responses

- `default`: Error

---

[API](https://skmtc.dev/serval/apis/serval-public-api.md) - [All operations](https://skmtc.dev/serval/apis/serval-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/serval/apis/serval-public-api/revisions/0549515e9384?raw)
