> ## Documentation Index
> Fetch the complete documentation index at: https://docs.getdialed.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Get a store record's history

> Returns one record's audit history, oldest first: every version of every source's layer, with the period it was in force and what moved when it was written. A version is appended only when a source's values actually change, so a sync that re-asserts identical values adds nothing. Cursor-paged; `total` is null.



## OpenAPI

````yaml /openapi.json get /data/stores/{store}/records/{key}/history
openapi: 3.1.0
info:
  title: GetDialed API
  version: 0.1.0
servers:
  - url: https://api.getdialed.ai/v1
    description: Production
security: []
paths:
  /data/stores/{store}/records/{key}/history:
    get:
      tags:
        - data-stores
      summary: Get a store record's history
      description: >-
        Returns one record's audit history, oldest first: every version of every
        source's layer, with the period it was in force and what moved when it
        was written. A version is appended only when a source's values actually
        change, so a sync that re-asserts identical values adds nothing.
        Cursor-paged; `total` is null.
      operationId: get_store_record_history_data_stores__store__records__key__history_get
      parameters:
        - name: store
          in: path
          required: true
          schema:
            type: string
            title: Store
        - name: key
          in: path
          required: true
          schema:
            type: string
            title: Key
        - name: cursor
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Cursor
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            maximum: 200
            minimum: 1
            default: 50
            title: Limit
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Page_StoreHistoryResponse_'
        '400':
          description: Malformed pagination cursor
          content:
            application/json:
              example:
                detail: Invalid cursor
        '401':
          description: Missing or invalid authentication
          content:
            application/json:
              example:
                detail: Authentication required
        '404':
          description: Not found — also returned on cross-tenant access (never 403)
          content:
            application/json:
              example:
                detail: Store not found
        '422':
          description: Validation error (see body for field details)
          content:
            application/json:
              example:
                detail: Validation error
        '429':
          description: Rate limit exceeded — retry after the Retry-After header
          content:
            application/json:
              example:
                detail: Rate limit exceeded
      security:
        - APIKeyHeader: []
        - HTTPBearer: []
components:
  schemas:
    Page_StoreHistoryResponse_:
      properties:
        items:
          items:
            $ref: '#/components/schemas/StoreHistoryResponse'
          type: array
          title: Items
        total:
          anyOf:
            - type: integer
            - type: 'null'
          title: Total
        limit:
          type: integer
          title: Limit
        skip:
          type: integer
          title: Skip
        next_cursor:
          anyOf:
            - type: string
            - type: 'null'
          title: Next Cursor
      type: object
      required:
        - items
        - limit
        - skip
      title: Page[StoreHistoryResponse]
    StoreHistoryResponse:
      properties:
        id:
          type: string
          title: Id
          description: Identifies this history row.
        source:
          type: string
          title: Source
          description: Which source wrote this version.
        version:
          type: integer
          title: Version
          description: >-
            Version number within this record and source. Each source has its
            own independent sequence.
        layer_data:
          additionalProperties: true
          type: object
          title: Layer Data
          description: >-
            What this source asserted in this version — the layer, never the
            resolved view, so a version can be replayed against any precedence.
        changed_fields:
          items:
            type: string
          type: array
          title: Changed Fields
          description: Which resolved fields moved when this version was written.
        valid_from:
          type: string
          format: date-time
          title: Valid From
          description: When this version came into force.
        valid_to:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Valid To
          description: >-
            When this version was superseded. Null on the version currently in
            force.
        written_by:
          $ref: '#/components/schemas/LayerWrittenBy'
      type: object
      required:
        - id
        - source
        - version
        - layer_data
        - changed_fields
        - valid_from
        - written_by
      title: StoreHistoryResponse
      description: >-
        One version of one source's layer, kept for audit.


        A version is appended when a source's values actually change, so a sync
        that

        re-asserts identical values adds nothing. `valid_from` and `valid_to`
        bound

        the period this version was in force; a null `valid_to` marks the
        version

        currently in force.
    LayerWrittenBy:
      properties:
        kind:
          type: string
          enum:
            - flow
            - csv_upload
            - user
            - seed
          title: Kind
        execution_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Execution Id
        definition_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Definition Id
        trigger_type:
          anyOf:
            - type: string
            - type: 'null'
          title: Trigger Type
        record_set_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Record Set Id
        filename:
          anyOf:
            - type: string
            - type: 'null'
          title: Filename
        user_id:
          anyOf:
            - type: string
            - type: 'null'
          title: User Id
        report_folder:
          anyOf:
            - type: string
            - type: 'null'
          title: Report Folder
        report_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Report Name
      additionalProperties: false
      type: object
      required:
        - kind
      title: LayerWrittenBy
      description: >-
        Who or what wrote a layer, and from where.


        `kind` says which door the write came through; the remaining fields are
        the

        detail that door can supply — the flow execution and definition behind a

        scheduled sync, the file and record set behind an upload, the user
        behind a

        manual edit. Unknown keys are refused so provenance never quietly loses
        a

        field it was meant to carry.
  securitySchemes:
    APIKeyHeader:
      type: apiKey
      in: header
      name: X-API-Key
    HTTPBearer:
      type: http
      scheme: bearer
      bearerFormat: JWT

````