curl --request GET \
--url https://api.sbx.moduluslabs.io/reports/v1/transactions \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.sbx.moduluslabs.io/reports/v1/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.sbx.moduluslabs.io/reports/v1/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.sbx.moduluslabs.io/reports/v1/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.sbx.moduluslabs.io/reports/v1/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.sbx.moduluslabs.io/reports/v1/transactions")
.header("X-API-Key", "<api-key>")
.asString();using RestSharp;
var options = new RestClientOptions("https://api.sbx.moduluslabs.io/reports/v1/transactions");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("X-API-Key", "<api-key>");
var response = await client.GetAsync(request);
Console.WriteLine("{0}", response.Content);
{
"data": [
{
"id": "<string>",
"status": "CAPTURED",
"amount": 123,
"currency": "PHP",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"payment_method": "QR_PH",
"card_brand": "<string>",
"card_last_four": "<string>",
"correlation_id": "<string>",
"amount_details": {
"amount_authorized": 123,
"amount_capturable": 123,
"amount_received": 123,
"amount_refunded": 123,
"original_amount": 123,
"tax_amount": 123,
"final_amount": 123
},
"receipt": {
"receipt_number": "<string>",
"auth_number": "<string>",
"batch_number": "<string>",
"approval_code": "<string>",
"reference_number": "<string>"
},
"merchant_details": {
"merchant_name": "<string>",
"merchant_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"partner_name": "<string>",
"branch_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"branch_name": "<string>"
},
"terminal_details": {
"terminal_name": "<string>",
"activation_code": "<string>",
"serial_number": "<string>"
}
}
],
"pagination": {
"page_size": 20,
"has_more": true,
"next_cursor": "<string>"
}
}{
"data": [
{
"id": "<string>",
"status": "CAPTURED",
"amount": 123,
"currency": "PHP",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"payment_method": "QR_PH",
"card_brand": "<string>",
"card_last_four": "<string>",
"correlation_id": "<string>",
"amount_details": {
"amount_authorized": 123,
"amount_capturable": 123,
"amount_received": 123,
"amount_refunded": 123,
"original_amount": 123,
"tax_amount": 123,
"final_amount": 123
},
"receipt": {
"receipt_number": "<string>",
"auth_number": "<string>",
"batch_number": "<string>",
"approval_code": "<string>",
"reference_number": "<string>"
},
"merchant_details": {
"merchant_name": "<string>",
"merchant_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"partner_name": "<string>",
"branch_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"branch_name": "<string>"
},
"terminal_details": {
"terminal_name": "<string>",
"activation_code": "<string>",
"serial_number": "<string>"
}
}
],
"pagination": {
"page_size": 20,
"has_more": true,
"next_cursor": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}List Transactions
Returns a paginated list of transactions with sorting and filtering
curl --request GET \
--url https://api.sbx.moduluslabs.io/reports/v1/transactions \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.sbx.moduluslabs.io/reports/v1/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.sbx.moduluslabs.io/reports/v1/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.sbx.moduluslabs.io/reports/v1/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.sbx.moduluslabs.io/reports/v1/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.sbx.moduluslabs.io/reports/v1/transactions")
.header("X-API-Key", "<api-key>")
.asString();using RestSharp;
var options = new RestClientOptions("https://api.sbx.moduluslabs.io/reports/v1/transactions");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("X-API-Key", "<api-key>");
var response = await client.GetAsync(request);
Console.WriteLine("{0}", response.Content);
{
"data": [
{
"id": "<string>",
"status": "CAPTURED",
"amount": 123,
"currency": "PHP",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"payment_method": "QR_PH",
"card_brand": "<string>",
"card_last_four": "<string>",
"correlation_id": "<string>",
"amount_details": {
"amount_authorized": 123,
"amount_capturable": 123,
"amount_received": 123,
"amount_refunded": 123,
"original_amount": 123,
"tax_amount": 123,
"final_amount": 123
},
"receipt": {
"receipt_number": "<string>",
"auth_number": "<string>",
"batch_number": "<string>",
"approval_code": "<string>",
"reference_number": "<string>"
},
"merchant_details": {
"merchant_name": "<string>",
"merchant_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"partner_name": "<string>",
"branch_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"branch_name": "<string>"
},
"terminal_details": {
"terminal_name": "<string>",
"activation_code": "<string>",
"serial_number": "<string>"
}
}
],
"pagination": {
"page_size": 20,
"has_more": true,
"next_cursor": "<string>"
}
}{
"data": [
{
"id": "<string>",
"status": "CAPTURED",
"amount": 123,
"currency": "PHP",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"payment_method": "QR_PH",
"card_brand": "<string>",
"card_last_four": "<string>",
"correlation_id": "<string>",
"amount_details": {
"amount_authorized": 123,
"amount_capturable": 123,
"amount_received": 123,
"amount_refunded": 123,
"original_amount": 123,
"tax_amount": 123,
"final_amount": 123
},
"receipt": {
"receipt_number": "<string>",
"auth_number": "<string>",
"batch_number": "<string>",
"approval_code": "<string>",
"reference_number": "<string>"
},
"merchant_details": {
"merchant_name": "<string>",
"merchant_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"partner_name": "<string>",
"branch_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"branch_name": "<string>"
},
"terminal_details": {
"terminal_name": "<string>",
"activation_code": "<string>",
"serial_number": "<string>"
}
}
],
"pagination": {
"page_size": 20,
"has_more": true,
"next_cursor": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}Sorting
Usesort_by and sort_order to control result ordering:
| sort_by | Description |
|---|---|
created_at | Transaction creation time (default) |
updated_at | Last update time |
amount | Transaction amount in cents |
asc and desc are supported for sort_order (default: desc).
Filtering
By Payment Method
By Payment Method
payment_method=QR_PH, CARD_PRESENT, or ECOM to filter by payment type.GET /v1/transactions?payment_method=CARD_PRESENT
By Merchant
By Merchant
merchant_id with the UUID from /v1/merchants.GET /v1/transactions?merchant_id=57846d47-d196-5c48-a881-4003b1d5aa98
By Branch
By Branch
branch_id with the UUID from /v1/branches.GET /v1/transactions?branch_id=f3febca6-7bd2-5d10-bcd7-1f796088e90c
By Date Range
By Date Range
date_from and date_to with RFC 3339 timestamps.GET /v1/transactions?date_from=2026-01-01T00:00:00Z&date_to=2026-01-31T23:59:59Z
By Status
By Status
status with comma-separated values.GET /v1/transactions?status=CAPTURED,PENDING
By Activation Code
By Activation Code
activation_code to filter by terminal device identifier.GET /v1/transactions?activation_code=XXXX-XXXX-XXXX-XXXX
Pagination
Results are cursor-paginated. Usepage_size (default 20, max 100) and the next_cursor from the response:
# First page
GET /v1/transactions?page_size=10
# Next page
GET /v1/transactions?page_size=10&cursor=eyJzb3J0X2J5Ijoi...
sort_by field. Changing sort_by between pages will return a 400 error - start a new query instead.Next Steps
Get Transaction
List Merchants
Authorizations
API key enabled for Transaction Reporting. Send the complete value exactly as issued.
Query Parameters
Filter by merchant. Canonical lowercase UUID; uppercase or non-canonical forms are rejected.
Filter by branch. Canonical lowercase UUID; uppercase or non-canonical forms are rejected.
Filter by terminal activation code. Activation codes are device identifiers printed on hardware, not secrets.
Filter by payment method. Omit to include all supported payment methods.
QR_PH, CARD_PRESENT, ECOM Filter by card brand.
VISA, MASTERCARD, JCB, UNIONPAY Filter by status. One or more of AUTHORIZED, CAPTURED, PARTIALLY_REFUNDED, REFUNDED, VOIDED, DECLINED, FAILED, PENDING, EXPIRED, CANCELLED, comma-separated. Case-sensitive.
Start of the date range (RFC 3339). Must be less than or equal to date_to.
End of the date range (RFC 3339). Must be greater than or equal to date_from.
Field to sort by. Default: created_at.
Cursor pagination works correctly across all sort fields.
created_at, updated_at, amount Sort direction. Default: desc.
asc, desc Number of results per page. Integer 1 to 100 (default 20). Values above 100 are clamped to 100.
1 <= x <= 100Opaque cursor token from a previous response's next_cursor field.
Was this page helpful?