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

# List payment transactions

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

## Request

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

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

New transactions are added at the top of the list, so one recorded while you're paging shifts the rest down and can cause a row to repeat at a page boundary.

Each row's `is_live` comes from the payment provider's own record of the payment, so it tells a real payment from a test one. Without `mode`, the list covers 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.

Pass `mode` to choose instead. To see both, list `live` and `test` separately.

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.
- `offset` integer: Number of rows to skip, which is the number you've already read. Defaults to 0.
- `limit` integer: Items per page. Max 100. Defaults to 50.
- `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.
- `mode` 'live' | 'test': Which payments to list. Either `live` for real payments or `test` for test payments. Defaults to one mode per provider, as the endpoint description explains.

## Response `200`

One page of the app's transactions.

- PaymentTransactionsResponse: One page of an app's payment transactions.
  - `transactions` PaymentTransaction[], required: Transactions on this page, newest first. Empty when none match or `offset` is past the end.
    - `timestamp` string, required: Transaction time as a UTC timestamp in ISO 8601 format.
    - `action` string, required: What this entry represents. Either `payment`, `refund`, or `dispute_lost`.
    - `status` string: 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.
    - `amount` integer: Amount in the currency's smallest unit. Read `action` to tell an incoming payment from an outgoing refund or dispute loss. Defaults to `0`.
    - `currency` string: Currency code recorded with the transaction. Defaults to `usd`.
    - `customer_id` string, nullable: Provider customer ID, or `null` when none was recorded. Defaults to `null`.
    - `transaction_id` string, nullable: Provider transaction ID, or `null` when none was recorded. Defaults to `null`.
    - `customer_name` string, nullable: Customer name when provider enrichment succeeds, or `null` when unavailable. Defaults to `null`.
    - `customer_email` string, nullable: Customer email when provider enrichment succeeds, or `null` when unavailable. Defaults to `null`.
    - `is_live` boolean, required: Whether this was a real payment (`true`) or a test one (`false`), as the payment provider recorded it. Stripe reports it on every event, and Wix Payments marks test payments on the transaction and its order.
  - `total` integer: Total number of matching transactions.
  - `has_more` boolean: Whether there are more items to fetch.

## Other responses

- `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`, `mode` isn't `live` or `test`, `limit` or `offset` is out of range, or another parameter has the wrong type.
- `429`: The base limit is 120 requests per minute, 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

- **2026-10-21** `c23775445de2`: 7 breaking, 10 info
  - the `query` request parameter `mode` was restricted to a list of enum values
  - 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`
  - …13 more
- **2026-10-15** `5026ff473275`: 3 info
  - added the new optional `query` request parameter `mode`
  - the response property `transactions/items/is_live` became required for the status `200`
  - the `is_live` response's property default value `true` was removed for the status `200`
- **2026-10-11** `80287813ab84`: 1 info
  - the endpoint scheme security `PersonalAccessTokenAuth` was added to the API
- **2026-09-30** `63675fa5257c`: 1 info
  - endpoint added

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

---

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