curl --request GET \
--url https://staging.api.payluk.ng/v1/merchant/transactions \
--header 'Authorization: Bearer <token>'import requests
url = "https://staging.api.payluk.ng/v1/merchant/transactions"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://staging.api.payluk.ng/v1/merchant/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://staging.api.payluk.ng/v1/merchant/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 => [
"Authorization: Bearer <token>"
],
]);
$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://staging.api.payluk.ng/v1/merchant/transactions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://staging.api.payluk.ng/v1/merchant/transactions")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://staging.api.payluk.ng/v1/merchant/transactions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"status": 200,
"message": "Transactions retrieved successfully",
"data": {
"pagination": {
"count": 2,
"pages": 1,
"isLastPage": true,
"nextPage": null,
"previousPage": null
},
"data": [
{
"id": "694967685589d47015d23b27",
"amount": 15,
"reference": "CMSN-79994766547485",
"fee": 0,
"transactionType": "commission",
"currency": "NGN",
"transferDetails": null,
"depositDetails": null,
"walletDetails": null,
"withdrawalDetails": null,
"escrowDetails": {
"beneficiary": {
"name": "Mary Patrick",
"phone": "08101264901"
},
"description": "Watches",
"amount": 1000,
"fee": 15,
"paymentToken": "PY_zAPRJikk4252",
"purpose": "Boxes",
"channel": "API",
"callbackUrl": null
},
"metadata": null,
"status": "success",
"creditType": "credit",
"createdAt": "2026-08-22T15:44:40.023Z",
"updatedAt": "2026-08-22T15:44:41.260Z"
},
{
"id": "6949648e5589d47015d23ad3",
"amount": 500,
"reference": "DLV-7ws5Gix7McIVYOoFqpR",
"fee": 0,
"transactionType": "delivery",
"currency": "NGN",
"transferDetails": null,
"depositDetails": null,
"walletDetails": null,
"withdrawalDetails": null,
"escrowDetails": {
"beneficiary": {
"name": "Mary Patrick",
"phone": "08101264901"
},
"description": "Watches",
"amount": 1000,
"fee": 15,
"paymentToken": "PY_bOffh0Ee2407",
"purpose": "Boxes",
"channel": "API",
"callbackUrl": null
},
"metadata": null,
"status": "success",
"creditType": "credit",
"createdAt": "2026-08-21T15:32:30.903Z",
"updatedAt": "2026-08-21T15:32:30.903Z"
}
]
}
}{
"status": 400,
"message": "customer-id is not allowed in request header",
"data": null
}{
"status": 429,
"message": "Too many request"
}Get merchant transactions
Returns your own merchant ledger, as opposed to GET /v1/payment/history, which answers for one of your customers.
These are the movements on your merchant wallet: commission (your share of an escrow fee), delivery (a delivery fee you charged a buyer), and any withdrawals you made. Your customers’ escrow and wallet activity is not included; read that per customer from GET /v1/payment/history.
By default the response is paginated ({ pagination, data }). Supplying any filter (reference, fromDate, or toDate) instead returns a flat array of the matching transactions.
Must not carry a customer-id header.
curl --request GET \
--url https://staging.api.payluk.ng/v1/merchant/transactions \
--header 'Authorization: Bearer <token>'import requests
url = "https://staging.api.payluk.ng/v1/merchant/transactions"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://staging.api.payluk.ng/v1/merchant/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://staging.api.payluk.ng/v1/merchant/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 => [
"Authorization: Bearer <token>"
],
]);
$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://staging.api.payluk.ng/v1/merchant/transactions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://staging.api.payluk.ng/v1/merchant/transactions")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://staging.api.payluk.ng/v1/merchant/transactions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"status": 200,
"message": "Transactions retrieved successfully",
"data": {
"pagination": {
"count": 2,
"pages": 1,
"isLastPage": true,
"nextPage": null,
"previousPage": null
},
"data": [
{
"id": "694967685589d47015d23b27",
"amount": 15,
"reference": "CMSN-79994766547485",
"fee": 0,
"transactionType": "commission",
"currency": "NGN",
"transferDetails": null,
"depositDetails": null,
"walletDetails": null,
"withdrawalDetails": null,
"escrowDetails": {
"beneficiary": {
"name": "Mary Patrick",
"phone": "08101264901"
},
"description": "Watches",
"amount": 1000,
"fee": 15,
"paymentToken": "PY_zAPRJikk4252",
"purpose": "Boxes",
"channel": "API",
"callbackUrl": null
},
"metadata": null,
"status": "success",
"creditType": "credit",
"createdAt": "2026-08-22T15:44:40.023Z",
"updatedAt": "2026-08-22T15:44:41.260Z"
},
{
"id": "6949648e5589d47015d23ad3",
"amount": 500,
"reference": "DLV-7ws5Gix7McIVYOoFqpR",
"fee": 0,
"transactionType": "delivery",
"currency": "NGN",
"transferDetails": null,
"depositDetails": null,
"walletDetails": null,
"withdrawalDetails": null,
"escrowDetails": {
"beneficiary": {
"name": "Mary Patrick",
"phone": "08101264901"
},
"description": "Watches",
"amount": 1000,
"fee": 15,
"paymentToken": "PY_bOffh0Ee2407",
"purpose": "Boxes",
"channel": "API",
"callbackUrl": null
},
"metadata": null,
"status": "success",
"creditType": "credit",
"createdAt": "2026-08-21T15:32:30.903Z",
"updatedAt": "2026-08-21T15:32:30.903Z"
}
]
}
}{
"status": 400,
"message": "customer-id is not allowed in request header",
"data": null
}{
"status": 429,
"message": "Too many request"
}Authorizations
Your secret key as a Bearer token. The key prefix selects the environment: sk_test_... (staging) or sk_live_... (production); a key on the wrong host is refused with 403 Unauthorized Access. Each key is limited to 10 requests per minute (429 beyond that) and, on production, to the IP addresses on your dashboard allowlist when one is configured.
Query Parameters
Page number for the paginated (unfiltered) response. 1-based: the first page is 1.
x >= 1Transactions per page, between 1 and 100. Defaults to 10. A larger value is capped at 100, and an unusable one falls back to the default. Applies to the paginated response only: a filtered response is a flat array and is not paged.
1 <= x <= 100Filter by transaction type. commission is your share of an escrow fee; delivery is a delivery fee you charged a buyer.
deposit, withdrawal, transfer, wallet_transfer, escrow, commission, delivery Filter by a specific reference. Returns a flat array.
Start of a date range (inclusive). Returns a flat array.
End of a date range (inclusive). Returns a flat array.
Response
Transactions retrieved. Paginated by default; a flat array when a filter is supplied.