curl --request GET \
--url https://api.rolla.xyz/api/v1/external/accounts/transactionsimport requests
url = "https://api.rolla.xyz/api/v1/external/accounts/transactions"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.rolla.xyz/api/v1/external/accounts/transactions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.rolla.xyz/api/v1/external/accounts/transactions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.rolla.xyz/api/v1/external/accounts/transactions"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.rolla.xyz/api/v1/external/accounts/transactions")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.rolla.xyz/api/v1/external/accounts/transactions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"status": 200,
"message": "Transactions retrieved successfully",
"success": true,
"data": {
"transactions": [
{
"id": "b0a1c2d3-4e5f-4a6b-8c7d-9e0f1a2b3c4d",
"account_id": "eec3cbed-79d8-4370-87a0-b6be9e287337",
"account_name": "Beta Logistics LLC",
"transaction_type": "withdrawal",
"status": "completed",
"description": "Supplier payment",
"external_reference": "NG-J46RHHKV",
"fee_amount": 250,
"source_amount": 50000,
"destination_amount": 50000,
"source_currency": "NGN",
"destination_currency": "NGN",
"fee_transaction_id": "c1b2a3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"fee_reference": "FEE-8KD02M1X",
"created_at": "2026-08-19T10:00:00.000Z",
"updated_at": "2026-08-19T10:00:02.000Z"
},
{
"id": "c1b2a3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"account_id": "9f1e2d3c-4b5a-4968-8877-665544332211",
"account_name": "Your Company Ltd",
"transaction_type": "fee",
"status": "completed",
"description": "Payout fee",
"external_reference": "FEE-8KD02M1X",
"fee_amount": 0,
"source_amount": 250,
"destination_amount": 250,
"source_currency": "NGN",
"destination_currency": "NGN",
"related_transaction_id": "b0a1c2d3-4e5f-4a6b-8c7d-9e0f1a2b3c4d",
"related_reference": "NG-J46RHHKV",
"created_at": "2026-08-19T10:00:01.000Z",
"updated_at": "2026-08-19T10:00:01.000Z"
}
],
"totalCount": 4182,
"page": 1,
"pageSize": 100,
"totalPages": 42,
"hasMore": true
}
}{
"status": 401,
"message": "Authentication required"
}{
"status": 403,
"message": "This endpoint lists transactions across the accounts you manage, and is available to partner API keys only."
}{
"status": 400,
"message": "Validation failed",
"code": "ACCOUNT_RESTRICTED",
"errors": [
{
"path": [
"amount"
],
"message": "amount must be a whole number of smallest currency units (e.g. cents)"
}
]
}List Transactions Across Accounts
Every transaction across all the accounts you manage — your own and each account you have onboarded — newest first, with the account each row belongs to. Partner API keys only. Reconcile over a closed date range so the pages stay stable while you read them.
curl --request GET \
--url https://api.rolla.xyz/api/v1/external/accounts/transactionsimport requests
url = "https://api.rolla.xyz/api/v1/external/accounts/transactions"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.rolla.xyz/api/v1/external/accounts/transactions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.rolla.xyz/api/v1/external/accounts/transactions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.rolla.xyz/api/v1/external/accounts/transactions"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.rolla.xyz/api/v1/external/accounts/transactions")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.rolla.xyz/api/v1/external/accounts/transactions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"status": 200,
"message": "Transactions retrieved successfully",
"success": true,
"data": {
"transactions": [
{
"id": "b0a1c2d3-4e5f-4a6b-8c7d-9e0f1a2b3c4d",
"account_id": "eec3cbed-79d8-4370-87a0-b6be9e287337",
"account_name": "Beta Logistics LLC",
"transaction_type": "withdrawal",
"status": "completed",
"description": "Supplier payment",
"external_reference": "NG-J46RHHKV",
"fee_amount": 250,
"source_amount": 50000,
"destination_amount": 50000,
"source_currency": "NGN",
"destination_currency": "NGN",
"fee_transaction_id": "c1b2a3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"fee_reference": "FEE-8KD02M1X",
"created_at": "2026-08-19T10:00:00.000Z",
"updated_at": "2026-08-19T10:00:02.000Z"
},
{
"id": "c1b2a3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"account_id": "9f1e2d3c-4b5a-4968-8877-665544332211",
"account_name": "Your Company Ltd",
"transaction_type": "fee",
"status": "completed",
"description": "Payout fee",
"external_reference": "FEE-8KD02M1X",
"fee_amount": 0,
"source_amount": 250,
"destination_amount": 250,
"source_currency": "NGN",
"destination_currency": "NGN",
"related_transaction_id": "b0a1c2d3-4e5f-4a6b-8c7d-9e0f1a2b3c4d",
"related_reference": "NG-J46RHHKV",
"created_at": "2026-08-19T10:00:01.000Z",
"updated_at": "2026-08-19T10:00:01.000Z"
}
],
"totalCount": 4182,
"page": 1,
"pageSize": 100,
"totalPages": 42,
"hasMore": true
}
}{
"status": 401,
"message": "Authentication required"
}{
"status": 403,
"message": "This endpoint lists transactions across the accounts you manage, and is available to partner API keys only."
}{
"status": 400,
"message": "Validation failed",
"code": "ACCOUNT_RESTRICTED",
"errors": [
{
"path": [
"amount"
],
"message": "amount must be a whole number of smallest currency units (e.g. cents)"
}
]
}403:{
"status": 403,
"message": "This endpoint lists transactions across the accounts you manage, and is available to partner API keys only."
}
curl "https://api.rolla.xyz/api/v1/external/accounts/transactions?pageSize=100" \
-H "X-API-Key: your_api_key_here"
{
"status": 200,
"message": "Transactions retrieved successfully",
"success": true,
"data": {
"transactions": [
{
"id": "b0a1c2d3-4e5f-4a6b-8c7d-9e0f1a2b3c4d",
"account_id": "eec3cbed-79d8-4370-87a0-b6be9e287337",
"account_name": "Beta Logistics LLC",
"transaction_type": "withdrawal",
"status": "completed",
"description": "Supplier payment",
"external_reference": "NG-J46RHHKV",
"fee_amount": 250,
"source_amount": 50000,
"destination_amount": 50000,
"source_currency": "NGN",
"destination_currency": "NGN",
"fee_transaction_id": "c1b2a3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"fee_reference": "FEE-8KD02M1X",
"created_at": "2026-08-19T10:00:00.000Z",
"updated_at": "2026-08-19T10:00:02.000Z"
},
{
"id": "c1b2a3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"account_id": "9f1e2d3c-4b5a-4968-8877-665544332211",
"account_name": "Your Company Ltd",
"transaction_type": "fee",
"status": "completed",
"description": "Payout fee",
"external_reference": "FEE-8KD02M1X",
"fee_amount": 0,
"source_amount": 250,
"destination_amount": 250,
"source_currency": "NGN",
"destination_currency": "NGN",
"related_transaction_id": "b0a1c2d3-4e5f-4a6b-8c7d-9e0f1a2b3c4d",
"related_reference": "NG-J46RHHKV",
"created_at": "2026-08-19T10:00:01.000Z",
"updated_at": "2026-08-19T10:00:01.000Z"
}
],
"totalCount": 4182,
"page": 1,
"pageSize": 100,
"totalPages": 42,
"hasMore": true
}
}
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.
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.
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.
curl "https://api.rolla.xyz/api/v1/external/accounts/transactions?page=2&pageSize=100" \
-H "X-API-Key: your_api_key_here"
totalPages tells you how many pages to collect; hasMore is false on the last one.
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:
curl "https://api.rolla.xyz/api/v1/external/accounts/transactions?startDate=2026-08-19&endDate=2026-08-19" \
-H "X-API-Key: your_api_key_here"
curl "https://api.rolla.xyz/api/v1/external/accounts/transactions?transactionType=fee" \
-H "X-API-Key: your_api_key_here"
CSV
Addformat=csv for the same rows as a file, for a finance team that works in a spreadsheet:
curl "https://api.rolla.xyz/api/v1/external/accounts/transactions?format=csv&startDate=2026-08-19" \
-H "X-API-Key: your_api_key_here" -o transactions.csv
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:
| On | Field | Points to |
|---|---|---|
| the payout | fee_transaction_id, fee_reference | the fee row |
| the fee row | related_transaction_id, related_reference | the payout |
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 number, starting at 1.
x >= 1Rows per page. Caps at 100, matching the per-account listing.
1 <= x <= 100Filter by source currency, e.g. USD.
"USD"
Filter by type — deposit, withdrawal, fx_withdrawal, swap, transfer, reversal or fee. Use fee to list only the fees charged to you.
"fee"
Filter by status, e.g. completed. Omitted, every status is reported, including failed.
"completed"
Inclusive start, YYYY-MM-DD or a full ISO-8601 timestamp.
"2026-08-19"
Inclusive end, YYYY-MM-DD or a full ISO-8601 timestamp.
"2026-08-19"
Match on external reference, case-insensitive substring.
"FEE-"
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.
json, csv