---
title: "Export payment transactions"
method: GET
path: "/api/apps/{app_id}/payments/analytics/transactions/export"
---

# Export payment transactions

`GET /api/apps/{app_id}/payments/analytics/transactions/export`

## Request

- Base URL: `https://app.base44.com`
- URL: `https://app.base44.com/api/apps/{app_id}/payments/analytics/transactions/export`
- Auth: HTTP bearer

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

## Path parameters

- `app_id` string, required: ID of the Base44 app.

## Query parameters

- `start_date` string, date-time: Start of the window as an ISO 8601 timestamp. Send it with `end_date`, because a date sent on its own is ignored.
- `end_date` string, date-time: End of the window as an ISO 8601 timestamp. Send it with `start_date`.
- `period` '7d' | '30d' | '90d': 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.
- `currencies` string: Comma-separated currency codes, for example `usd,eur`. Defaults to no currency filter.
- `provider` 'stripe' | 'wix', required: 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.
- `status` string: Comma-separated statuses to include, from `succeeded`, `refunded`, and `failed`. For example, `succeeded,refunded` leaves out lost disputes. Defaults to every status.

## Response `200`

The CSV file, sent as an attachment named after the app and today's date.

## Other responses

- `400`: `status` has a value other than `succeeded`, `refunded`, or `failed`.
- `401`: Missing or invalid credentials.
- `403`: 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`: The app is outside the credential grant, or `provider` isn't connected to the app.
- `409`: The workspace requires an unlocked SSO session.
- `422`: `provider` is missing or isn't `stripe` or `wix`, or another parameter has the wrong type.
- `429`: 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.

## Changes

> 58 revisions in range; 1 not diffed.

- **2026-10-21** `c23775445de2`: 6 breaking, 8 info
  - the `query` request parameter `period` was restricted to a list of enum values
  - `query` request parameter `currencies` list-of-types was narrowed by removing types `null`
  - `query` request parameter `end_date` list-of-types was narrowed by removing types `null`
  - `query` request parameter `period` list-of-types was narrowed by removing types `null`
  - …10 more
- **2026-10-12** `5e139db2e643`: 1 info
  - the endpoint scheme security `PersonalAccessTokenAuth` was added to the API
- **2026-09-29** `d2b7ac8beb0c`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/adexad/apis/base44-app-management-api/changes/api/apps/:app_id/payments/analytics/transactions/export/get.md)

---

[API](https://skmtc.dev/adexad/apis/base44-app-management-api.md) · [All operations](https://skmtc.dev/adexad/apis/base44-app-management-api/llms.txt) · [OpenAPI document](https://skmtc.dev/adexad/apis/base44-app-management-api/revisions/fa29e915c226?raw)
