Get Transaction
curl --request GET \
--url https://api.rolla.xyz/api/v1/external/wallet/transaction/{transactionId} \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.rolla.xyz/api/v1/external/wallet/transaction/{transactionId}"
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/wallet/transaction/{transactionId}', 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/wallet/transaction/{transactionId}",
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/wallet/transaction/{transactionId}"
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/wallet/transaction/{transactionId}")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.rolla.xyz/api/v1/external/wallet/transaction/{transactionId}")
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": "Transaction retrieved successfully",
"success": true,
"data": {
"transaction": {
"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",
"beneficiary": {
"account_name": "JOHN DOE",
"bank_name": "Access Bank",
"bank_code": "000014",
"account_number": "0123456789"
}
}
}
}{
"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)"
}
]
}{
"status": 404,
"message": "Transaction not found: a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}{
"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
Get Transaction
Retrieves a specific wallet transaction by either Rolla’s transaction ID (a UUID) or the externalReference you set when creating it. A non-UUID path segment is matched against the transaction’s external_reference; if it matches more than one transaction in scope, the most recent is returned.
Partner (white-label tenant) keys read across their whole tenancy, so a transaction found in GET /accounts/transactions can be fetched here directly. Send the X-Account-Id header to narrow the lookup to a single account.
GET
/
wallet
/
transaction
/
{transactionId}
Get Transaction
curl --request GET \
--url https://api.rolla.xyz/api/v1/external/wallet/transaction/{transactionId} \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.rolla.xyz/api/v1/external/wallet/transaction/{transactionId}"
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/wallet/transaction/{transactionId}', 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/wallet/transaction/{transactionId}",
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/wallet/transaction/{transactionId}"
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/wallet/transaction/{transactionId}")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.rolla.xyz/api/v1/external/wallet/transaction/{transactionId}")
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": "Transaction retrieved successfully",
"success": true,
"data": {
"transaction": {
"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",
"beneficiary": {
"account_name": "JOHN DOE",
"bank_name": "Access Bank",
"bank_code": "000014",
"account_number": "0123456789"
}
}
}
}{
"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)"
}
]
}{
"status": 404,
"message": "Transaction not found: a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}{
"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 the full details of a specific wallet transaction, by either Rolla’s transaction ID or the
Amounts are in minor units —
So if you kept only your own reference, you can read the transaction back without ever storing our ID:
externalReference you set when you created it.
Example Request
curl -X GET "https://api.rolla.xyz/api/v1/external/wallet/transaction/a1b2c3d4-e5f6-7890-abcd-ef1234567890" \
-H "X-API-Key: your_api_key_here"
Example Response
{
"status": 200,
"message": "Transaction retrieved successfully",
"success": true,
"data": {
"transaction": {
"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",
"beneficiary": {
"account_name": "JOHN DOE",
"bank_name": "Access Bank",
"bank_code": "000014",
"account_number": "0123456789"
}
}
}
}
500000 is ₦5,000.00. Fields that do not apply are
omitted rather than returned as null: beneficiary only when the payout went to one,
exchange_rate on swaps only, and virtual_account, payer and payment_rail on deposits only.
Looking one up by your own reference
The path segment accepts two things, and Rolla picks by shape:| What you pass | What it matches |
|---|---|
| A UUID | Rolla’s transaction id |
| Anything else | The external_reference on the transaction — the externalReference you sent when creating the payout, transfer or swap |
curl -X GET "https://api.rolla.xyz/api/v1/external/wallet/transaction/invoice-8842" \
-H "X-API-Key: your_api_key_here"
An
external_reference is only unique within the account that set it. If the same reference exists on more than one transaction in scope, the most recent one is returned. Pass the transaction id when you need an exact, single row — for example when reconciling.Transaction IDs and references both come back from the
/wallet/transactions and /accounts/transactions list endpoints, and from every webhook payload.What you can read
The lookup is scoped to what your key can see:- An ordinary key reads transactions belonging to its own business.
- A partner (white-label tenant) key reads any transaction across its whole tenancy — its own account and every account it has onboarded. A row you found in List Transactions Across Accounts is fetchable by ID here directly; you do not need to work out which account owns it first.
- Adding the
X-Account-Idheader narrows the lookup to that one account, as it does on every other endpoint.
404, so IDs can’t be probed:
{
"status": 404,
"message": "Transaction not found: a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
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.Authorizations
Your Rolla API key
Path Parameters
Rolla's transaction ID (UUID), or the externalReference you set when creating the transaction.