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

# Export payment transactions

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

Downloads the app's payments, refunds, and lost disputes for one payment provider as a CSV file, newest first.

The file starts with a header row, then has one row per transaction with these columns:
- `Date`: The transaction time in UTC as the analytics store records it, for example `2026-08-25 10:00:00`
- `Customer`: The customer's name or email, or the provider's customer ID when neither can be resolved
- `Transaction ID`: The provider's ID for the transaction
- `Status`: Either `succeeded`, `refunded`, or `failed`
- `Amount`: In the currency's major unit, so `25.00` rather than `2500`
- `Currency`: An uppercase three-letter ISO 4217 code

Cells are quoted, and cells a spreadsheet would read as a formula start with `'`.

The file covers the app's whole history unless you pass `period` or both `start_date` and `end_date`. It stops at 10,000 rows without saying so in the file, so narrow the window when a download reaches that size.

Customer names are looked up from the provider within a 20-second budget for the whole file, so a large export can leave some `Customer` cells with only an ID, or empty.

The file includes one mode per provider:

- **Stripe**: Live when the app's stored key is a live key, test otherwise.
- **Wix Payments**: Live, unless test-mode reporting is enabled for your account. Then it follows the app's Wix Payments test-mode setting.

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

<Note>This endpoint accepts a personal access token belonging to a user with write access to the app. A read-only personal access token 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/export
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/export:
    get:
      summary: Export payment transactions
      description: >-
        <Info>This API is in beta. Endpoints, fields, and behavior may still
        change, so avoid depending on it in production.</Info>


        Downloads the app's payments, refunds, and lost disputes for one payment
        provider as a CSV file, newest first.


        The file starts with a header row, then has one row per transaction with
        these columns:

        - `Date`: The transaction time in UTC as the analytics store records it,
        for example `2026-08-25 10:00:00`

        - `Customer`: The customer's name or email, or the provider's customer
        ID when neither can be resolved

        - `Transaction ID`: The provider's ID for the transaction

        - `Status`: Either `succeeded`, `refunded`, or `failed`

        - `Amount`: In the currency's major unit, so `25.00` rather than `2500`

        - `Currency`: An uppercase three-letter ISO 4217 code


        Cells are quoted, and cells a spreadsheet would read as a formula start
        with `'`.


        The file covers the app's whole history unless you pass `period` or both
        `start_date` and `end_date`. It stops at 10,000 rows without saying so
        in the file, so narrow the window when a download reaches that size.


        Customer names are looked up from the provider within a 20-second budget
        for the whole file, so a large export can leave some `Customer` cells
        with only an ID, or empty.


        The file includes one mode per provider:


        - **Stripe**: Live when the app's stored key is a live key, test
        otherwise.

        - **Wix Payments**: Live, unless test-mode reporting is enabled for your
        account. Then it follows the app's Wix Payments test-mode setting.


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


        <Note>This endpoint accepts a personal access token belonging to a user
        with write access to the app. A read-only personal access token is
        refused, and so is a viewer.</Note>
      operationId: >-
        export_transactions_csv_api_apps__app_id__payments_analytics_transactions_export_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:
            type: string
            format: date-time
            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:
            type: string
            format: date-time
            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:
            enum:
              - 7d
              - 30d
              - 90d
            type: string
            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: currencies
          in: query
          required: false
          schema:
            type: string
            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
        - name: status
          in: query
          required: false
          schema:
            type: string
            description: >-
              Comma-separated statuses to include, from `succeeded`, `refunded`,
              and `failed`. For example, `succeeded,refunded` leaves out lost
              disputes. Defaults to every status.
            title: Status
          description: >-
            Comma-separated statuses to include, from `succeeded`, `refunded`,
            and `failed`. For example, `succeeded,refunded` leaves out lost
            disputes. Defaults to every status.
          example: succeeded,refunded
      responses:
        '200':
          description: >-
            The CSV file, sent as an attachment named after the app and today's
            date.
          content:
            text/csv:
              schema:
                type: string
              example: "\"Date\",\"Customer\",\"Transaction ID\",\"Status\",\"Amount\",\"Currency\"\r\n\"2026-08-25 10:00:00\",\"Jane Doe\",\"pi_T7mK2p9Q4r6S8v\",\"succeeded\",\"25.00\",\"USD\"\r\n"
        '400':
          description: >-
            `status` has a value other than `succeeded`, `refunded`, or
            `failed`.
        '401':
          description: Missing or invalid credentials.
        '403':
          description: >-
            You don't have write access to the app, it doesn't exist, or your
            personal access token is read-only. A missing app and an app you
            cannot reach are deliberately the same answer. Also returned when
            the app's workspace blocks payment management, with `error.code`
            `app_payment_management_not_allowed`.
        '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`, or another
            parameter has the wrong type.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
        '429':
          description: >-
            The base limit is 5 requests per hour, scoped to your account rather
            than the workspace. See [Rate
            limits](/developers/references/apps-api/get-started/rate-limits) for
            the multiplier your plan gets.
      security:
        - PersonalAccessTokenAuth:
            - full_access
components:
  schemas:
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    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>`. Each
        operation lists the permission it needs: `read_only` or `full_access`. A
        full-access token can call every operation. A read-only token can call
        only the operations that list `read_only`; anything else returns 403
        `read_only_credential_route_not_allowed`.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.