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

# List an account's statements

> Returns the account's closed billing statements, newest first. A
statement appears here once its cycle has closed; the cycle in progress
is not a statement yet — read the account itself for where the customer
stands today.

Amounts follow the convention on a card statement: what the customer was
charged is positive and what was credited back to them is negative. So
`purchases`, `interest`, and `fees` are positive, while `payments`,
`credits`, and `refunds` are negative.

Each statement carries a `pdf_url`: a short-lived link to the statement
document as the cardholder sees it. Fetch it promptly rather than storing
it — see the field description for how long it lasts.

Results are paginated. When `has_more` is `true`, pass the response's
`next_page_token` back as `starting_after` to retrieve the next page.

**Required scope:** `STATEMENT_READ`




## OpenAPI

````yaml /api-reference/openapi.yaml get /v2/customers/{customer_id}/accounts/{account_id}/statements
openapi: 3.1.0
info:
  title: Public Imprint API
  version: '2.0'
servers:
  - url: https://dev.sbx.imprint.co
    description: Imprint public api sandbox
security:
  - basicAuth: []
  - bearerAuth: []
paths:
  /v2/customers/{customer_id}/accounts/{account_id}/statements:
    get:
      tags:
        - Customers
      summary: List an account's statements
      description: >
        Returns the account's closed billing statements, newest first. A

        statement appears here once its cycle has closed; the cycle in progress

        is not a statement yet — read the account itself for where the customer

        stands today.


        Amounts follow the convention on a card statement: what the customer was

        charged is positive and what was credited back to them is negative. So

        `purchases`, `interest`, and `fees` are positive, while `payments`,

        `credits`, and `refunds` are negative.


        Each statement carries a `pdf_url`: a short-lived link to the statement

        document as the cardholder sees it. Fetch it promptly rather than
        storing

        it — see the field description for how long it lasts.


        Results are paginated. When `has_more` is `true`, pass the response's

        `next_page_token` back as `starting_after` to retrieve the next page.


        **Required scope:** `STATEMENT_READ`
      operationId: listStatements
      parameters:
        - $ref: '#/components/parameters/customerIdParam'
          name: customer_id
          in: path
        - $ref: '#/components/parameters/accountIdParam'
          name: account_id
          in: path
        - name: limit
          in: query
          description: Limits the number of returned statements
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 10
            format: int32
        - name: starting_after
          in: query
          description: |
            A cursor for use in pagination. Unlike other list endpoints, this
            takes the opaque `next_page_token` from the previous response rather
            than a statement id. Omit it for the first page.
          schema:
            type: string
      responses:
        '200':
          description: List of customer statements
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatementListResponse'
        '400':
          description: >
            `starting_after` is not a token this endpoint issued. Page tokens
            are

            opaque and are only valid as returned in a previous

            `next_page_token`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InvalidRequestError'
        '403':
          description: API key is missing the required `STATEMENT_READ` scope
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '404':
          description: >
            The customer was not found, or the account does not belong to them.

            `type` distinguishes the two: `CUSTOMER_NOT_FOUND_ERROR` means we
            hold

            no record of the customer, `ACCOUNT_NOT_FOUND_ERROR` means the

            `account_id` is not one of theirs.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerNotFoundError'
components:
  parameters:
    customerIdParam:
      name: customer_id
      in: path
      required: true
      description: The unique identifier for the Imprint customer
      schema:
        type: string
        example: 2EE24580-B97B-4949-A65C-929CCB9B9B8D
    accountIdParam:
      name: account_id
      in: path
      required: true
      description: The unique identifier for the account, as returned by list accounts
      schema:
        type: string
        example: 7C1F9A34-2D6B-4E58-8A03-B15E7D9C4620
  schemas:
    StatementListResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Statement'
        has_more:
          type: boolean
        next_page_token:
          type: string
          description: >
            Opaque cursor for the next page, present only when `has_more` is

            `true`. Pass it back as `starting_after` to fetch the following
            page.

            Treat it as opaque — its contents are not a statement id and may

            change.
          example: eyJsYXN0X3N0YXRlbWVudF9pZCI6MTAzfQ
    InvalidRequestError:
      type: object
      properties:
        path:
          type: string
          description: The path of the endpoint returning the error
          example: /v2/customers
        details:
          type: array
          items:
            type: string
          description: The details of the error being returned
          example:
            - 'email: must be a well-formed email address'
        error:
          type: string
          description: The category of error being returned
          example: Bad Request
        status:
          type: integer
          description: The HTTP status code of the error
          example: 400
        timestamp:
          type: string
          description: The timestamp that the error occurred
          example: '2025-01-20T18:18:22.923+00:00'
    ApiError:
      type: object
      required:
        - error
      properties:
        error:
          type: object
          required:
            - type
            - message
          properties:
            type:
              type: string
              description: The category of error being returned
              example: BAD_REQUEST_ERROR
            message:
              type: string
              description: A message describing the cause of the error
              example: 'unsupported reward_type: INVALID, must be STATEMENT or DELAYED'
    CustomerNotFoundError:
      type: object
      required:
        - type
        - message
      properties:
        type:
          type: string
          description: The category of error being returned
          example: CUSTOMER_NOT_FOUND_ERROR
        message:
          type: string
          description: A message describing the cause of the error
          example: 'Customer not found for provided ID: CSMR-v1-123'
        param:
          type: string
          description: The param causing the error
          example: customer_id
    Statement:
      type: object
      description: >
        One closed billing cycle. Amounts are integers in the smallest currency

        unit and are signed the way a card statement reads: charges to the

        customer are positive, money credited back to them is negative.


        Every amount is optional. Ledger records only the lines that had
        activity

        in the cycle, so a quiet month omits most of them rather than reporting

        them as `0`.
      required:
        - statement_id
        - customer_id
        - account_id
      properties:
        statement_id:
          type: string
          description: The unique identifier for the statement
          example: 8A31B2C0-4F6D-4A21-9E3B-5C1D0F7A2B84
        customer_id:
          type: string
          description: The unique identifier for the customer
          example: 2EE24580-B97B-4949-A65C-929CCB9B9B8D
        account_id:
          type: string
          description: The unique identifier for the account the statement belongs to
          example: 7C1F9A34-2D6B-4E58-8A03-B15E7D9C4620
        period_start_date:
          type: string
          description: RFC-3339 timestamp of the first day of the billing cycle
          example: '2026-05-16T00:00:00Z'
        period_end_date:
          type: string
          description: |
            RFC-3339 timestamp when the billing cycle closed. This is the
            statement date.
          example: '2026-06-15T00:00:00Z'
        due_date:
          type: string
          description: RFC-3339 timestamp when payment for this statement is due
          example: '2026-07-10T00:00:00Z'
        pdf_url:
          type: string
          description: |
            A pre-signed link to the statement PDF — the same document the
            cardholder sees. The link expires one hour after this response is
            issued, so treat it as a redirect target or an immediate download
            rather than something to persist: a stored copy will stop working,
            and re-reading the statement is how you get a fresh one.

            Omitted when the document is not available. A statement's PDF is
            rendered shortly after its cycle closes, so the newest statement can
            appear here before its document does; the rest of the statement is
            still accurate.
          example: >-
            https://imprint-statements.s3.us-east-1.amazonaws.com/statements/8A31B2C0.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=3600
        currency:
          $ref: '#/components/schemas/TransactionCurrency'
        statement_balance:
          allOf:
            - $ref: '#/components/schemas/CurrencyAmount'
          description: |
            The balance owed when the cycle closed. Negative if the customer had
            paid ahead.
        minimum_due:
          allOf:
            - $ref: '#/components/schemas/CurrencyAmount'
          description: |
            The minimum payment required by `due_date` to keep the account
            current.
        previous_balance:
          allOf:
            - $ref: '#/components/schemas/CurrencyAmount'
          description: The balance carried over from the previous cycle.
        purchases:
          allOf:
            - $ref: '#/components/schemas/CurrencyAmount'
          description: Total purchases posted during the cycle.
        payments:
          allOf:
            - $ref: '#/components/schemas/CurrencyAmount'
          description: >
            Total payments received during the cycle. Negative, because a
            payment

            reduces what the customer owes.
        credits:
          allOf:
            - $ref: '#/components/schemas/CurrencyAmount'
          description: Total credits applied during the cycle. Negative.
        refunds:
          allOf:
            - $ref: '#/components/schemas/CurrencyAmount'
          description: Total refunds posted during the cycle. Negative.
        interest:
          allOf:
            - $ref: '#/components/schemas/CurrencyAmount'
          description: Interest charged during the cycle.
        fees:
          allOf:
            - $ref: '#/components/schemas/CurrencyAmount'
          description: Fees charged during the cycle.
        overdue_amount:
          allOf:
            - $ref: '#/components/schemas/CurrencyAmount'
          description: >
            The portion of `statement_balance` that was already past due when
            the

            cycle closed. `0` on a current account.
    TransactionCurrency:
      type: string
      description: >-
        The 3-character currency code of the amount in ISO 4217 format (e.g.,
        "USD")
      example: USD
    CurrencyAmount:
      type: integer
      description: Amount in the smallest currency unit (e.g., cents for USD)
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
      description: >-
        Basic HTTP authentication. Allowed headers-- Authorization: Basic
        <base64(api_key_id:api_key_secret)>
    bearerAuth:
      bearerFormat: auth-scheme
      description: >-
        Bearer HTTP authentication. Allowed headers-- Authorization: Bearer
        <api_key>
      scheme: bearer
      type: http

````