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

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

## Path parameters

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

## Query parameters

- `start_date` string, date-time, nullable — 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, nullable — End of the window as an ISO 8601 timestamp. Send it with `start_date`.
- `period` '7d' | '30d' | '90d', nullable — 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, nullable — 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.

## 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 — Whether this entry was recorded in live mode. Defaults to `true`.
  - `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 API key is read-only. A missing app and an app you cannot reach are deliberately the same answer.
- `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`, `limit` or `offset` is out of range, or another parameter has the wrong type.
- `429` — Rate limit reached. Retry later.

## Changes

> 22 revisions in range; 1 not diffed.

- **2026-09-29** `d2b7ac8beb0c` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/adexad/apis/base44-app-management-api/changes/api/apps/:app_id/payments/analytics/transactions/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/862b46d283f0?raw)
