> ## 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.

# List payment transactions

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

Returns one page of the app's payments, refunds, and lost disputes for one payment provider, newest first.

Unlike [Get recent payment transactions](/api-reference/get-recent-payment-transactions), this covers the app's whole history unless you pass `period` or both `start_date` and `end_date`. Each row carries the customer's name and email when the provider can resolve them, including for a guest checkout.

Pages use `offset` and `limit`. Pass the number of rows you've read so far as `offset`, and stop when `has_more` is `false`. New transactions are added at the top, so one recorded while you page shifts the rest down and can repeat a row at a page boundary.

For `stripe`, transactions come from live mode when the app uses a live Stripe key, and from test mode otherwise. For `wix`, they're live payments. While the app's Wix Payments checkout is in test mode, some accounts see its test payments instead. Read `is_live` on each row to tell them apart.

Results come from an analytics store and can lag behind the payment provider.

This is limited to 120 requests a minute per user. Some workspaces have a different limit.

<Note>This endpoint accepts a personal API key belonging to a user with write access to the app. A read-only key is refused, and so is a viewer.</Note>



## OpenAPI

````yaml /developers/references/app-management/app-management-openapi.json get /api/apps/{app_id}/payments/analytics/transactions
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}/payments/analytics/transactions:
    get:
      summary: List payment transactions
      description: >-
        <Info>This API is in beta. Endpoints, fields, and behavior may still
        change, so avoid depending on it in production.</Info>


        Returns one page of the app's payments, refunds, and lost disputes for
        one payment provider, newest first.


        Unlike [Get recent payment
        transactions](/api-reference/get-recent-payment-transactions), this
        covers the app's whole history unless you pass `period` or both
        `start_date` and `end_date`. Each row carries the customer's name and
        email when the provider can resolve them, including for a guest
        checkout.


        Pages use `offset` and `limit`. Pass the number of rows you've read so
        far as `offset`, and stop when `has_more` is `false`. New transactions
        are added at the top, so one recorded while you page shifts the rest
        down and can repeat a row at a page boundary.


        For `stripe`, transactions come from live mode when the app uses a live
        Stripe key, and from test mode otherwise. For `wix`, they're live
        payments. While the app's Wix Payments checkout is in test mode, some
        accounts see its test payments instead. Read `is_live` on each row to
        tell them apart.


        Results come from an analytics store and can lag behind the payment
        provider.


        This is limited to 120 requests a minute per user. Some workspaces have
        a different limit.


        <Note>This endpoint accepts a personal API key belonging to a user with
        write access to the app. A read-only key is refused, and so is a
        viewer.</Note>
      operationId: get_transactions_api_apps__app_id__payments_analytics_transactions_get
      parameters:
        - name: app_id
          in: path
          required: true
          schema:
            type: string
            description: ID of the Base44 app.
            title: App Id
          description: ID of the Base44 app.
          example: 6820f3a4e7b91d003c45a1f2
        - name: start_date
          in: query
          required: false
          schema:
            anyOf:
              - type: string
                format: date-time
              - type: 'null'
            description: >-
              Start of the window as an ISO 8601 timestamp. Send it with
              `end_date`, because a date sent on its own is ignored.
            title: Start Date
          description: >-
            Start of the window as an ISO 8601 timestamp. Send it with
            `end_date`, because a date sent on its own is ignored.
          example: '2026-08-01T00:00:00Z'
        - name: end_date
          in: query
          required: false
          schema:
            anyOf:
              - type: string
                format: date-time
              - type: 'null'
            description: >-
              End of the window as an ISO 8601 timestamp. Send it with
              `start_date`.
            title: End Date
          description: >-
            End of the window as an ISO 8601 timestamp. Send it with
            `start_date`.
          example: '2026-08-31T23:59:59Z'
        - name: period
          in: query
          required: false
          schema:
            anyOf:
              - enum:
                  - 7d
                  - 30d
                  - 90d
                type: string
              - type: 'null'
            description: >-
              Window to use when you don't send both dates, counted back over
              whole UTC days including today. Either `7d`, `30d`, or `90d`.
              Defaults to no window, which covers the app's whole history.
            title: Period
          description: >-
            Window to use when you don't send both dates, counted back over
            whole UTC days including today. Either `7d`, `30d`, or `90d`.
            Defaults to no window, which covers the app's whole history.
          example: 30d
        - name: offset
          in: query
          required: false
          schema:
            type: integer
            minimum: 0
            description: >-
              Number of rows to skip, which is the number you've already read.
              Defaults to 0.
            default: 0
            title: Offset
          description: >-
            Number of rows to skip, which is the number you've already read.
            Defaults to 0.
          example: 50
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            maximum: 100
            minimum: 1
            description: Items per page. Max 100. Defaults to 50.
            default: 50
            title: Limit
          description: Items per page. Max 100. Defaults to 50.
          example: 50
        - name: currencies
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              Comma-separated currency codes, for example `usd,eur`. Defaults to
              no currency filter.
            title: Currencies
          description: >-
            Comma-separated currency codes, for example `usd,eur`. Defaults to
            no currency filter.
          example: usd
        - name: provider
          in: query
          required: true
          schema:
            enum:
              - stripe
              - wix
            type: string
            description: >-
              Payment provider whose transactions to use. Either `stripe` or
              `wix`. `stripe` covers payments taken through the app's Stripe
              integration, and `wix` covers payments taken through Wix Payments
              (Base44 Payments). The provider has to be connected to the app.
            title: Provider
          description: >-
            Payment provider whose transactions to use. Either `stripe` or
            `wix`. `stripe` covers payments taken through the app's Stripe
            integration, and `wix` covers payments taken through Wix Payments
            (Base44 Payments). The provider has to be connected to the app.
          example: stripe
      responses:
        '200':
          description: One page of the app's transactions.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentTransactionsResponse'
        '401':
          description: Missing or invalid credentials.
        '403':
          description: >-
            You don't have write access to the app, it doesn't exist, or your
            API key is read-only. A missing app and an app you cannot reach are
            deliberately the same answer.
        '404':
          description: >-
            The app is outside the credential grant, or `provider` isn't
            connected to the app.
        '409':
          description: The workspace requires an unlocked SSO session.
        '422':
          description: >-
            `provider` is missing or isn't `stripe` or `wix`, `limit` or
            `offset` is out of range, or another parameter has the wrong type.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
        '429':
          description: Rate limit reached. Retry later.
components:
  schemas:
    PaymentTransactionsResponse:
      properties:
        transactions:
          items:
            $ref: '#/components/schemas/PaymentTransaction'
          type: array
          title: Transactions
          description: >-
            Transactions on this page, newest first. Empty when none match or
            `offset` is past the end.
          example:
            - action: payment
              amount: 2500
              currency: usd
              customer_email: jane@example.com
              customer_id: cus_T7mK2p9Q4r6S8v
              customer_name: Jane Doe
              is_live: true
              status: succeeded
              timestamp: '2026-08-25T10:00:00Z'
              transaction_id: pi_T7mK2p9Q4r6S8v
        total:
          type: integer
          title: Total
          description: Total number of matching transactions.
          default: 0
          example: 347
        has_more:
          type: boolean
          title: Has More
          description: Whether there are more items to fetch.
          default: false
          example: true
      type: object
      required:
        - transactions
      title: PaymentTransactionsResponse
      description: One page of an app's payment transactions.
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    PaymentTransaction:
      properties:
        timestamp:
          type: string
          title: Timestamp
          description: Transaction time as a UTC timestamp in ISO 8601 format.
          example: '2026-08-25T10:00:00Z'
        action:
          type: string
          title: Action
          description: >-
            What this entry represents. Either `payment`, `refund`, or
            `dispute_lost`.
          example: payment
        status:
          type: string
          title: Status
          description: >-
            Display status derived from the action. `payment` becomes
            `succeeded`, `refund` becomes `refunded`, and `dispute_lost` becomes
            `failed`. Other actions retain their action value. Defaults to an
            empty string.
          default: ''
          example: succeeded
        amount:
          type: integer
          title: Amount
          description: >-
            Amount in the currency's smallest unit. Read `action` to tell an
            incoming payment from an outgoing refund or dispute loss. Defaults
            to `0`.
          default: 0
          example: 2500
        currency:
          type: string
          title: Currency
          description: Currency code recorded with the transaction. Defaults to `usd`.
          default: usd
          example: usd
        customer_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Customer Id
          description: >-
            Provider customer ID, or `null` when none was recorded. Defaults to
            `null`.
          example: cus_T7mK2p9Q4r6S8v
        transaction_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Transaction Id
          description: >-
            Provider transaction ID, or `null` when none was recorded. Defaults
            to `null`.
          example: pi_T7mK2p9Q4r6S8v
        customer_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Customer Name
          description: >-
            Customer name when provider enrichment succeeds, or `null` when
            unavailable. Defaults to `null`.
          example: Jane Doe
        customer_email:
          anyOf:
            - type: string
            - type: 'null'
          title: Customer Email
          description: >-
            Customer email when provider enrichment succeeds, or `null` when
            unavailable. Defaults to `null`.
          example: jane@example.com
        is_live:
          type: boolean
          title: Is Live
          description: Whether this entry was recorded in live mode. Defaults to `true`.
          default: true
          example: true
      type: object
      required:
        - timestamp
        - action
      title: PaymentTransaction
      description: A payment, refund, or lost dispute with optional customer details.
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
  securitySchemes:
    PersonalAccessTokenAuth:
      type: http
      scheme: bearer
      description: 'Personal access token, sent as `Authorization: Bearer <token>`.'

````