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

# Download data checkpoint

> <Info>This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.</Info>

Returns every record one entity held at a checkpoint, as it was just before the change that created the checkpoint.

The response is the entity's whole table in one piece, with no paging. `fields` lists its columns at the time, so you can write `records` out as a CSV file with the header the entity had then. Row-level security doesn't apply, and the records are always production data.

Downloading changes nothing. To put the records back, use [Restore data to checkpoint](/api-reference/restore-data-to-checkpoint).

<Note>This endpoint accepts a personal API key belonging to a user with editor access to the app. A read-only key is refused, and workspace API keys are not accepted.</Note>



## OpenAPI

````yaml /developers/references/app-management/app-management-openapi.json get /api/apps/{app_id}/entities/{entity_name}/versions/checkpoints/{checkpoint_id}/snapshot
openapi: 3.1.0
info:
  title: Base44 App Management API
  version: 1.0.0
servers:
  - url: https://app.base44.com
security:
  - PersonalAccessTokenAuth: []
paths:
  /api/apps/{app_id}/entities/{entity_name}/versions/checkpoints/{checkpoint_id}/snapshot:
    get:
      summary: Download data checkpoint
      description: >-
        <Info>This API is in beta. Endpoints, fields, and behavior may still
        change, so avoid depending on it in production.</Info>


        Returns every record one entity held at a checkpoint, as it was just
        before the change that created the checkpoint.


        The response is the entity's whole table in one piece, with no paging.
        `fields` lists its columns at the time, so you can write `records` out
        as a CSV file with the header the entity had then. Row-level security
        doesn't apply, and the records are always production data.


        Downloading changes nothing. To put the records back, use [Restore data
        to checkpoint](/api-reference/restore-data-to-checkpoint).


        <Note>This endpoint accepts a personal API key belonging to a user with
        editor access to the app. A read-only key is refused, and workspace API
        keys are not accepted.</Note>
      operationId: >-
        download_version_checkpoint_snapshot_api_apps__app_id__entities__entity_name__versions_checkpoints__checkpoint_id__snapshot_get
      parameters:
        - name: checkpoint_id
          in: path
          required: true
          schema:
            type: string
            description: >-
              ID of the checkpoint, as `checkpoint_id` from [List data
              checkpoints](/api-reference/list-data-checkpoints).
            title: Checkpoint Id
          description: >-
            ID of the checkpoint, as `checkpoint_id` from [List data
            checkpoints](/api-reference/list-data-checkpoints).
          example: 68a1c2d3e4f5a6b7c8d9e0f1
        - name: app_id
          in: path
          required: true
          schema:
            type: string
            description: ID of the app.
            title: App Id
          description: ID of the app.
          example: 6820f3a4e7b91d003c45a1f2
        - name: entity_name
          in: path
          required: true
          schema:
            type: string
            description: >-
              Name of the entity, exactly as [List entity
              schemas](/api-reference/list-entity-schemas) reports it. Don't
              pass `User` here. It doesn't fail, but it reads and writes a
              separate, disconnected set of records stored under that name, not
              the app's real user accounts, which are managed through their own
              endpoints.
            title: Entity Name
          description: >-
            Name of the entity, exactly as [List entity
            schemas](/api-reference/list-entity-schemas) reports it. Don't pass
            `User` here. It doesn't fail, but it reads and writes a separate,
            disconnected set of records stored under that name, not the app's
            real user accounts, which are managed through their own endpoints.
          example: Invoice
      responses:
        '200':
          description: The entity's records at the checkpoint.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CheckpointSnapshotDownload'
        '401':
          description: Missing or invalid credentials.
        '403':
          description: >-
            You don't have editor access to this app, your API key is read-only,
            version history isn't on for the app, or the entity is `User`, which
            has no version history.
        '404':
          description: >-
            App not found, the app has no entity with this name, or the entity
            has no checkpoint with this ID that's still within the history.
        '409':
          description: >-
            Recent changes are still being saved to the history. Retry in a few
            seconds.
        '429':
          description: >-
            Rate limit exceeded. The base limit is 20 requests per minute. See
            [Rate
            limits](/developers/references/apps-api/get-started/rate-limits) for
            the multiplier your plan gets.
components:
  schemas:
    CheckpointSnapshotDownload:
      properties:
        fields:
          items:
            type: string
          type: array
          title: Fields
          description: >-
            The entity's columns at the checkpoint, in order. That's the fields
            its schema declared then, followed by the fields Base44 adds to
            every record. Use them as the header row when you write `records` to
            a CSV file.
          example:
            - amount
            - status
            - customer_email
            - id
            - created_date
            - updated_date
            - created_by_id
            - created_by
            - is_sample
        records:
          items:
            additionalProperties: true
            type: object
          type: array
          title: Records
          description: >-
            Every record the entity held at the checkpoint, in the same shape as
            [List entity records](/api-reference/list-entity-records) returns
            them.
          example:
            - amount: 4200
              created_by: jane@acme.com
              created_by_id: 6874b0c2e1a94d0031bb77de
              created_date: '2026-06-01T09:23:41.481000'
              customer_email: jane@acme.com
              id: 6886b8d390dc7e2f4a2c91b3
              is_sample: false
              status: draft
              updated_date: '2026-06-01T09:23:41.481000'
      type: object
      required:
        - fields
        - records
      title: CheckpointSnapshotDownload
      description: An entity's records as they stood at a checkpoint.
  securitySchemes:
    PersonalAccessTokenAuth:
      type: http
      scheme: bearer
      description: 'Personal access token, sent as `Authorization: Bearer <token>`.'

````