Skip to main content
GET
List Transactions Across Accounts
Every transaction across all the accounts you manage — your own and each account you have onboarded — newest first, in one call. This is the endpoint to reconcile against. List Wallet Transactions returns one account at a time, so reconciling a book of accounts through it means one request per account and then working out yourself which rows came from where. Here, each row names the account it belongs to.
Available to partner API keys — a key that manages onboarded accounts. An ordinary key receives 403:
Every row carries the same fields as the per-account listings, plus account_id and account_name. Fields that do not apply are omitted rather than returned as null.

What it includes

Everything that happened, so a reconciliation balances:
  • Failed movements. A payout that failed still debited and returned the money. The per-account endpoints leave these out of their default view — this one reports them, because a ledger that never sees the reversal cannot be balanced against ours.
  • Deposits still awaiting confirmation, reported with status: "pending". Funds have been detected but are not yet final, so treat them as expected rather than settled.
Pass status to narrow it yourself — status=completed for settled activity only.

Amounts

Amounts on this endpoint are in minor units — 1250 means $12.50 — matching every other amount on the API, including the webhook payloads.
This changed on 9 September 2026. These amounts were previously reported in major units (12.50 for $12.50). If your integration multiplied them by 100 to line them up with the webhooks, remove that conversion. See Amounts & Currencies.

Paging

page and pageSize, the same as every other transaction listing on this API. pageSize defaults to 20 and caps at 100.
totalPages tells you how many pages to collect; hasMore is false on the last one.
Reconcile over a closed date range. Ask for a day that has finished — startDate=2026-08-19&endDate=2026-08-19 — and then page through it. Paging an open-ended list while transactions are still arriving means new rows land at the top and shift everything down, so a row can move past a page boundary between two calls and never be returned. A range that is already closed cannot take new rows, so the pages are stable while you read them.

Filtering

currency, transactionType, status, startDate, endDate and search all apply across every account, not just your own. A daily run typically filters by date:
To pull only the fees charged to you, filter on the type:

CSV

Add format=csv for the same rows as a file, for a finance team that works in a spreadsheet:
The file has one header row and these columns: transaction_id, account_id, account_name, transaction_type, status, source_amount, source_currency, destination_amount, destination_currency, fee_amount, external_reference, fee_reference, related_reference, created_at, updated_at. It is sent as an attachment named transactions.csv. Paging comes back in the X-Total-Count and X-Total-Pages response headers, since a CSV body has nowhere to carry it. page and pageSize still apply, so a full export means walking the pages.

Reconciling fees

When a fee is charged to your account rather than to the account that incurred it, it is a transaction on your account in its own right — transaction_type: "fee", reference FEE-XXXXXXXX — and it appears in this feed alongside the movement that caused it. The two are linked in both directions: So a fee never has to be matched by amount or timing. A fee appears here as soon as it is held, with status: "pending" — that is when your available balance moves, not when the fee posts. It reaches completed when the money is actually taken, or failed if the transaction that incurred it was unwound and the hold released. To be told at each of those points rather than discovering them on the next run, subscribe to fee.pending, fee.charged and fee.released.
transaction_id is the stable identifier. external_reference is yours to recognise a transaction by, but id is what we guarantee for the life of the transaction — key your records on it.

Query Parameters

page
integer
default:1

Page number, starting at 1.

Required range: x >= 1
pageSize
integer
default:20

Rows per page. Caps at 100, matching the per-account listing.

Required range: 1 <= x <= 100
currency
string

Filter by source currency, e.g. USD.

Example:

"USD"

transactionType
string

Filter by type — deposit, withdrawal, fx_withdrawal, swap, transfer, reversal or fee. Use fee to list only the fees charged to you.

Example:

"fee"

status
string

Filter by status, e.g. completed. Omitted, every status is reported, including failed.

Example:

"completed"

startDate
string

Inclusive start, YYYY-MM-DD or a full ISO-8601 timestamp.

Example:

"2026-08-19"

endDate
string

Inclusive end, YYYY-MM-DD or a full ISO-8601 timestamp.

Example:

"2026-08-19"

Match on external reference, case-insensitive substring.

Example:

"FEE-"

format
enum<string>
default:json

csv returns the same rows as a file rather than JSON; paging comes back in the X-Total-Count and X-Total-Pages response headers.

Available options:
json,
csv

Response

A page of transactions across every account you manage

status
integer
required
Example:

200

message
string
required
Example:

"Transactions retrieved successfully"

success
boolean
required
Example:

true

data
object
required