Transactions
Every movement on your balances, from the ledger: collections credited, payouts and settlements debited, card funding, card payments, fees. Use them for reconciliation.
The transaction object
Attributes
Unique identifier (UUID).
true for live objects, false for test objects.
Always transaction.
What moved the money.
collectionpayoutsettlementpayout_reversalsettlement_reversalcards_balance_topupcard_fundingcard_withdrawalcard_paymentcard_refundcard_reversalcard_feecard_fee_refundcard_issuing_feecard_funding_reversalconversion_debitconversion_creditconversion_reversalSigned effect on your balance (or on the card, for card movements), in minor units. Negative means money out.
Currency of the balance that moved. Card movements are in USD.
Gross amount of the underlying operation, before fees.
pending while a payout or settlement is on its way.
pendingsucceededfailedreversedShort label.
Customer, recipient or merchant name.
ID of the card, for card movements.
The collection, payout or settlement behind this transaction: { object, id }.
When the money moved, ISO 8601 (UTC).
{
"id": "e664ee8d-8ae1-4b05-b76f-d2a1ddf74b50",
"object": "transaction",
"livemode": false,
"type": "collection",
"amount": 4875,
"currency": "XAF",
"gross": 5000,
"status": "succeeded",
"description": "Awa Ndiaye",
"counterparty": "Awa Ndiaye",
"card": null,
"source": {
"object": "collection",
"id": "3b8f6c1e-2a47-4d1b-9e35-7c0a9d2f4e61"
},
"created_at": "2026-10-30T13:47:09.807Z"
}List transactions
Newest first.
Key roles: Every role
Query parameters
Only return this type.
collectionpayoutsettlementpayout_reversalsettlement_reversalcards_balance_topupcard_fundingcard_withdrawalcard_paymentcard_refundcard_reversalcard_feecard_fee_refundcard_issuing_feecard_funding_reversalconversion_debitconversion_creditconversion_reversal20Number of objects to return, 1 to 100.
Cursor: the ID of the last object of the previous page.
Returns
Returns a list object: data holds up to limit transaction objects, and has_more tells whether more follow.
curl "https://api.monerail.com/v1/transactions?type=collection&limit=10" \
-H "Authorization: Bearer $MONERAIL_KEY"const res = await fetch('https://api.monerail.com/v1/transactions?type=collection&limit=10', {
headers: {
Authorization: `Bearer ${process.env.MONERAIL_KEY}`,
},
});
const data = await res.json();
if (!res.ok) throw new Error(`${data.error.code}: ${data.error.message}`);
console.log(data);import os
import requests
res = requests.get(
"https://api.monerail.com/v1/transactions",
headers={"Authorization": f"Bearer {os.environ['MONERAIL_KEY']}"},
params={"type": "collection", "limit": 10},
timeout=30,
)
data = res.json()
if not res.ok:
raise RuntimeError(f"{data['error']['code']}: {data['error']['message']}")
print(data)<?php
$ch = curl_init('https://api.monerail.com/v1/transactions?type=collection&limit=10');
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('MONERAIL_KEY'),
],
CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
if ($status >= 400) {
throw new RuntimeException($data['error']['code'] . ': ' . $data['error']['message']);
}
print_r($data);package main
import (
"encoding/json"
"fmt"
"net/http"
"os"
)
func main() {
req, err := http.NewRequest(http.MethodGet, "https://api.monerail.com/v1/transactions?type=collection&limit=10", nil)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("MONERAIL_KEY"))
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
var data map[string]any
if err := json.NewDecoder(res.Body).Decode(&data); err != nil {
panic(err)
}
if res.StatusCode >= 400 {
panic(fmt.Sprint(data["error"]))
}
fmt.Println(data)
}import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.monerail.com/v1/transactions?type=collection&limit=10"))
.header("Authorization", "Bearer " + System.getenv("MONERAIL_KEY"))
.GET()
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() >= 400) {
throw new RuntimeException(response.body());
}
System.out.println(response.body()); // parse with your JSON library (Jackson, Gson…)
}
}require "json"
require "net/http"
uri = URI("https://api.monerail.com/v1/transactions?type=collection&limit=10")
req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Bearer #{ENV.fetch("MONERAIL_KEY")}"
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
data = JSON.parse(res.body)
raise "#{data["error"]["code"]}: #{data["error"]["message"]}" unless res.is_a?(Net::HTTPSuccess)
puts datausing System.Net.Http.Headers;
using System.Net.Http.Json;
using System.Text.Json;
using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("MONERAIL_KEY"));
using var request = new HttpRequestMessage(HttpMethod.Get, "https://api.monerail.com/v1/transactions?type=collection&limit=10");
using var response = await http.SendAsync(request);
var data = await response.Content.ReadFromJsonAsync<JsonElement>();
if (!response.IsSuccessStatusCode)
{
throw new HttpRequestException(data.GetProperty("error").GetProperty("message").GetString());
}
Console.WriteLine(data);{
"object": "list",
"url": "/v1/transactions",
"data": [
{
"id": "e664ee8d-8ae1-4b05-b76f-d2a1ddf74b50",
"object": "transaction",
"livemode": false,
"type": "collection",
"amount": 4875,
"currency": "XAF",
"gross": 5000,
"status": "succeeded",
"description": "Awa Ndiaye",
"counterparty": "Awa Ndiaye",
"card": null,
"source": {
"object": "collection",
"id": "3b8f6c1e-2a47-4d1b-9e35-7c0a9d2f4e61"
},
"created_at": "2026-10-30T13:47:09.807Z"
}
],
"has_more": true
}Retrieve a transaction
Key roles: Every role
Path parameters
ID of the transaction.
Returns
Returns the transaction object.
curl https://api.monerail.com/v1/transactions/e664ee8d-8ae1-4b05-b76f-d2a1ddf74b50 \
-H "Authorization: Bearer $MONERAIL_KEY"const res = await fetch('https://api.monerail.com/v1/transactions/e664ee8d-8ae1-4b05-b76f-d2a1ddf74b50', {
headers: {
Authorization: `Bearer ${process.env.MONERAIL_KEY}`,
},
});
const data = await res.json();
if (!res.ok) throw new Error(`${data.error.code}: ${data.error.message}`);
console.log(data);import os
import requests
res = requests.get(
"https://api.monerail.com/v1/transactions/e664ee8d-8ae1-4b05-b76f-d2a1ddf74b50",
headers={"Authorization": f"Bearer {os.environ['MONERAIL_KEY']}"},
timeout=30,
)
data = res.json()
if not res.ok:
raise RuntimeError(f"{data['error']['code']}: {data['error']['message']}")
print(data)<?php
$ch = curl_init('https://api.monerail.com/v1/transactions/e664ee8d-8ae1-4b05-b76f-d2a1ddf74b50');
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('MONERAIL_KEY'),
],
CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
if ($status >= 400) {
throw new RuntimeException($data['error']['code'] . ': ' . $data['error']['message']);
}
print_r($data);package main
import (
"encoding/json"
"fmt"
"net/http"
"os"
)
func main() {
req, err := http.NewRequest(http.MethodGet, "https://api.monerail.com/v1/transactions/e664ee8d-8ae1-4b05-b76f-d2a1ddf74b50", nil)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("MONERAIL_KEY"))
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
var data map[string]any
if err := json.NewDecoder(res.Body).Decode(&data); err != nil {
panic(err)
}
if res.StatusCode >= 400 {
panic(fmt.Sprint(data["error"]))
}
fmt.Println(data)
}import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.monerail.com/v1/transactions/e664ee8d-8ae1-4b05-b76f-d2a1ddf74b50"))
.header("Authorization", "Bearer " + System.getenv("MONERAIL_KEY"))
.GET()
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() >= 400) {
throw new RuntimeException(response.body());
}
System.out.println(response.body()); // parse with your JSON library (Jackson, Gson…)
}
}require "json"
require "net/http"
uri = URI("https://api.monerail.com/v1/transactions/e664ee8d-8ae1-4b05-b76f-d2a1ddf74b50")
req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Bearer #{ENV.fetch("MONERAIL_KEY")}"
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
data = JSON.parse(res.body)
raise "#{data["error"]["code"]}: #{data["error"]["message"]}" unless res.is_a?(Net::HTTPSuccess)
puts datausing System.Net.Http.Headers;
using System.Net.Http.Json;
using System.Text.Json;
using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("MONERAIL_KEY"));
using var request = new HttpRequestMessage(HttpMethod.Get, "https://api.monerail.com/v1/transactions/e664ee8d-8ae1-4b05-b76f-d2a1ddf74b50");
using var response = await http.SendAsync(request);
var data = await response.Content.ReadFromJsonAsync<JsonElement>();
if (!response.IsSuccessStatusCode)
{
throw new HttpRequestException(data.GetProperty("error").GetProperty("message").GetString());
}
Console.WriteLine(data);{
"id": "e664ee8d-8ae1-4b05-b76f-d2a1ddf74b50",
"object": "transaction",
"livemode": false,
"type": "collection",
"amount": 4875,
"currency": "XAF",
"gross": 5000,
"status": "succeeded",
"description": "Awa Ndiaye",
"counterparty": "Awa Ndiaye",
"card": null,
"source": {
"object": "collection",
"id": "3b8f6c1e-2a47-4d1b-9e35-7c0a9d2f4e61"
},
"created_at": "2026-10-30T13:47:09.807Z"
}