List Transactions
curl --request GET \
--url https://api.rolla.xyz/api/v1/external/transactions \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.rolla.xyz/api/v1/external/transactions"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.rolla.xyz/api/v1/external/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/transactions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$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/transactions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
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/transactions")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.rolla.xyz/api/v1/external/transactions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"status": 200,
"message": "Transactions retrieved successfully",
"success": true,
"data": {
"transactions": [
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"transaction_type": "withdrawal",
"status": "completed",
"description": "Vendor payment",
"external_reference": "ref-abc123",
"fee_amount": 53,
"source_amount": 500000,
"destination_amount": 499947,
"source_currency": "NGN",
"destination_currency": "NGN",
"created_at": "2024-01-15T10:30:00.000Z",
"updated_at": "2024-01-15T10:30:45.000Z"
},
{
"id": "5f1c9d0a-2b73-4e86-9a5c-3d8f1e6b0c42",
"transaction_type": "deposit",
"status": "completed",
"description": "Deposit from Acme Trading Ltd",
"external_reference": "US-DEP-7K4M2B",
"fee_amount": 0,
"source_amount": 2500000,
"destination_amount": 2500000,
"source_currency": "USD",
"destination_currency": "USD",
"payment_rail": "wire_international",
"virtual_account": {
"id": "9c4e1f77-3a25-4d80-b6f1-0e7a2b5c8d93",
"currency": "USD",
"method": "bank_transfer",
"bank_name": "Lead Bank",
"account_number": "9876543210",
"account_name": "Acme Ltd / Rolla",
"routing_number": "021000021",
"swift_code": "LEADUS33"
},
"payer": {
"name": "Acme Trading Ltd",
"account_number": "5551234567",
"bank_name": "HSBC",
"country": "Hong Kong"
},
"created_at": "2024-01-15T11:02:00.000Z",
"updated_at": "2024-01-15T11:02:10.000Z"
}
],
"totalCount": 150,
"page": 1,
"pageSize": 20,
"totalPages": 8
}
}{
"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)"
}
]
}{
"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)"
}
]
}Transactions & Statements
List Transactions
A page of your transactions, newest first. Filters on status and a date range only; use GET /wallet/transactions to also filter by currency, type or reference.
Transactions with status failed are left out unless you ask for them with status=failed.
GET
/
transactions
List Transactions
curl --request GET \
--url https://api.rolla.xyz/api/v1/external/transactions \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.rolla.xyz/api/v1/external/transactions"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.rolla.xyz/api/v1/external/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/transactions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$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/transactions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
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/transactions")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.rolla.xyz/api/v1/external/transactions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"status": 200,
"message": "Transactions retrieved successfully",
"success": true,
"data": {
"transactions": [
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"transaction_type": "withdrawal",
"status": "completed",
"description": "Vendor payment",
"external_reference": "ref-abc123",
"fee_amount": 53,
"source_amount": 500000,
"destination_amount": 499947,
"source_currency": "NGN",
"destination_currency": "NGN",
"created_at": "2024-01-15T10:30:00.000Z",
"updated_at": "2024-01-15T10:30:45.000Z"
},
{
"id": "5f1c9d0a-2b73-4e86-9a5c-3d8f1e6b0c42",
"transaction_type": "deposit",
"status": "completed",
"description": "Deposit from Acme Trading Ltd",
"external_reference": "US-DEP-7K4M2B",
"fee_amount": 0,
"source_amount": 2500000,
"destination_amount": 2500000,
"source_currency": "USD",
"destination_currency": "USD",
"payment_rail": "wire_international",
"virtual_account": {
"id": "9c4e1f77-3a25-4d80-b6f1-0e7a2b5c8d93",
"currency": "USD",
"method": "bank_transfer",
"bank_name": "Lead Bank",
"account_number": "9876543210",
"account_name": "Acme Ltd / Rolla",
"routing_number": "021000021",
"swift_code": "LEADUS33"
},
"payer": {
"name": "Acme Trading Ltd",
"account_number": "5551234567",
"bank_name": "HSBC",
"country": "Hong Kong"
},
"created_at": "2024-01-15T11:02:00.000Z",
"updated_at": "2024-01-15T11:02:10.000Z"
}
],
"totalCount": 150,
"page": 1,
"pageSize": 20,
"totalPages": 8
}
}{
"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)"
}
]
}{
"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)"
}
]
}Retrieve a paginated list of your transactions, newest first, with optional filtering by status and date range.
Transactions with status
Amounts are in minor units —
There is no
Example Request
curl -X GET "https://api.rolla.xyz/api/v1/external/transactions?page=1&pageSize=20&status=completed" \
-H "X-API-Key: your_api_key_here"
Query Parameters
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number, starting at 1 (default: 1) |
pageSize | integer | Results per page (default: 20) |
status | string | Filter by status: pending, processing, completed, sent, failed, rejected, refunded, negotiating, cancelled |
startDate | string | Inclusive start, YYYY-MM-DD or a full ISO 8601 timestamp |
endDate | string | Inclusive end, YYYY-MM-DD or a full ISO 8601 timestamp |
This endpoint filters on status and date only. To also filter by currency, type or reference,
use List Wallet Transactions, which reads the
same transactions.
failed are left out unless you ask for them with status=failed.
Example Response
{
"status": 200,
"message": "Transactions retrieved successfully",
"success": true,
"data": {
"transactions": [
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"transaction_type": "withdrawal",
"status": "completed",
"description": "Vendor payment",
"external_reference": "ref-abc123",
"fee_amount": 53,
"source_amount": 500000,
"destination_amount": 499947,
"source_currency": "NGN",
"destination_currency": "NGN",
"created_at": "2024-01-15T10:30:00.000Z",
"updated_at": "2024-01-15T10:30:45.000Z"
},
{
"id": "5f1c9d0a-2b73-4e86-9a5c-3d8f1e6b0c42",
"transaction_type": "deposit",
"status": "completed",
"description": "Deposit from Acme Trading Ltd",
"external_reference": "US-DEP-7K4M2B",
"fee_amount": 0,
"source_amount": 2500000,
"destination_amount": 2500000,
"source_currency": "USD",
"destination_currency": "USD",
"payment_rail": "wire_international",
"virtual_account": {
"id": "9c4e1f77-3a25-4d80-b6f1-0e7a2b5c8d93",
"currency": "USD",
"method": "bank_transfer",
"bank_name": "Lead Bank",
"account_number": "9876543210",
"account_name": "Acme Ltd / Rolla",
"routing_number": "021000021",
"swift_code": "LEADUS33"
},
"payer": {
"name": "Acme Trading Ltd",
"account_number": "5551234567",
"bank_name": "HSBC",
"country": "Hong Kong"
},
"created_at": "2024-01-15T11:02:00.000Z",
"updated_at": "2024-01-15T11:02:10.000Z"
}
],
"totalCount": 150,
"page": 1,
"pageSize": 20,
"totalPages": 8
}
}
500000 is ₦5,000.00. Fields that do not apply to a
transaction are omitted rather than returned as null.
Payment tracking references
A cross-border payout carriesuetr and tracking_codes once the SWIFT network returns
them — the references a beneficiary’s bank is chased with.
{
"id": "9a56d01f-dc72-4ace-bbbc-a237bdb1c599",
"transaction_type": "withdrawal",
"status": "sent",
"uetr": "97ed4827-7b6f-4491-a06f-b548d5a7512d",
"tracking_codes": {
"UETR": "97ed4827-7b6f-4491-a06f-b548d5a7512d",
"IMAD": "20260818B1QGC01C000123"
}
}
| Field | Description |
|---|---|
uetr | The payout’s UETR (Unique End-to-end Transaction Reference) — the UUID that identifies the payment across every bank that touches it. Quote it when tracing or recalling a payment. |
tracking_codes | Every reference recorded against the payout, keyed by name — the UETR, plus IMAD on corridors that produce one. Read uetr for the UETR; use this if you also surface the others. |
Both fields are omitted until the reference exists — they are not returned as
null. The UETR is assigned by the correspondent network after the payout is sent,
typically within minutes but sometimes hours later, so a payout read back immediately
after you create it will not carry one. Local-rail and stablecoin payouts never get one.
Branch on the field’s presence; never block your flow waiting for it.To be told the moment a UETR lands rather than polling for it, subscribe to the
transaction.uetr.assigned
webhook. It carries the same value.Identifying the transfer method on deposits
Incoming deposits carry apayment_rail field saying how the money arrived, so you can reconcile per channel rather than parsing the description.
| Value | Meaning |
|---|---|
ach | US domestic ACH |
wire_domestic | US domestic wire (Fedwire) |
wire_international | International wire — this is the SWIFT case |
mobile_money | Mobile money collection |
swift value; an international wire is the SWIFT case. The field is omitted (not null) when the provider does not report a transfer method, and never appears on payouts or crypto deposits — treat its absence as “rail unknown”.
The same field is delivered on the deposit webhook.
Use date range filters to export transaction data for specific periods. Combine with status filter to find failed transactions that may need to be retried.
Authorizations
Your Rolla API key
Query Parameters
Page number, starting at 1.
Required range:
x >= 1Rows per page.
Required range:
x >= 1Filter by status. completed also returns pending transactions operations have already claimed, which are reported as completed.
Available options:
draft, pending, processing, completed, sent, failed, rejected, refunded, negotiating, cancelled, exception Example:
"completed"
Inclusive start, YYYY-MM-DD or a full ISO-8601 timestamp.
Example:
"2024-01-01"
Inclusive end, YYYY-MM-DD or a full ISO-8601 timestamp.
Example:
"2024-01-31"