curl --request GET \
--url https://staging.api.payluk.ng/v1/escrow/transactions \
--header 'Authorization: Bearer <token>'import requests
url = "https://staging.api.payluk.ng/v1/escrow/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/escrow/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/escrow/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/escrow/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/escrow/transactions")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://staging.api.payluk.ng/v1/escrow/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": "Transaction fetched successfully",
"data": {
"data": [
{
"id": "6a3cdafc734e96016b227367",
"amount": 1000,
"purpose": "multi-purpose escrow item",
"description": "details",
"whoPays": "buyer",
"imageUrl": null,
"fee": 30,
"paymentToken": "PY_TIrNY1CD3836",
"paidAt": "1782373118",
"status": "ONGOING",
"state": "OPENED",
"logs": [],
"channel": "API",
"isSeller": true,
"dispute": null,
"paymentDetails": {
"id": "6a3cdafd734e96016b22736b",
"amount": 1030,
"status": "success",
"reference": "rthyjyutj",
"fee": 0,
"transactionType": "escrow",
"currency": "NGN",
"createdAt": "2026-06-25T07:38:38.003Z"
},
"category": null,
"completedAt": null,
"approvedClaimBy": null,
"refundedBy": null,
"maxDelivery": 1,
"deliveryTimeline": "hours",
"totalQuantity": 1,
"settlementType": "STANDARD",
"milestones": [],
"createdAt": "2026-06-25T07:38:37.283Z",
"updatedAt": "2026-06-25T07:38:38.922Z"
},
{
"id": "6a3cd9b1734e96016b22732e",
"amount": 1000,
"purpose": "multi-purpose escrow item",
"description": "details",
"whoPays": "buyer",
"imageUrl": null,
"fee": 30,
"paymentToken": "PY_V2bRgyPJ3305",
"paidAt": null,
"status": "PENDING",
"state": "AWAITING_PAYMENT",
"logs": [],
"channel": "API",
"isSeller": true,
"dispute": null,
"paymentDetails": null,
"category": null,
"completedAt": null,
"approvedClaimBy": null,
"refundedBy": null,
"maxDelivery": 1,
"deliveryTimeline": "hours",
"totalQuantity": 2,
"settlementType": "STANDARD",
"milestones": [],
"createdAt": "2026-06-25T07:33:05.400Z",
"updatedAt": "2026-06-25T07:38:39.619Z"
},
{
"id": "6a2d53ebfa797d3af379de94",
"amount": 1000,
"purpose": "test",
"description": "details",
"whoPays": "seller",
"imageUrl": null,
"fee": 30,
"paymentToken": "PY_unETaAQs5819",
"paidAt": null,
"status": "PENDING",
"state": "AWAITING_PAYMENT",
"logs": [],
"channel": "API",
"isSeller": true,
"dispute": null,
"paymentDetails": null,
"category": null,
"completedAt": null,
"approvedClaimBy": null,
"refundedBy": null,
"maxDelivery": 1,
"deliveryTimeline": "hours",
"totalQuantity": 2,
"milestones": null,
"createdAt": "2026-06-13T12:58:19.206Z",
"updatedAt": "2026-06-13T12:58:19.206Z"
}
],
"pagination": {
"count": 3,
"pages": 1,
"isLastPage": true,
"nextPage": null,
"previousPage": null
},
"report": {
"total": 0,
"completed": 0,
"ongoing": 0,
"dispute": 0,
"amount": {
"total": 3000,
"completed": 0,
"ongoing": 1000,
"dispute": 0
}
}
}
}List escrow transactions
Paginated list of escrows for the account the request acts as, filtered by type (sales for escrows it sells, buy for escrows it funded). Send customer-id to list a customer’s escrows, or omit it for your merchant account’s own. type is required; omitting it or sending another value returns 401.
curl --request GET \
--url https://staging.api.payluk.ng/v1/escrow/transactions \
--header 'Authorization: Bearer <token>'import requests
url = "https://staging.api.payluk.ng/v1/escrow/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/escrow/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/escrow/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/escrow/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/escrow/transactions")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://staging.api.payluk.ng/v1/escrow/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": "Transaction fetched successfully",
"data": {
"data": [
{
"id": "6a3cdafc734e96016b227367",
"amount": 1000,
"purpose": "multi-purpose escrow item",
"description": "details",
"whoPays": "buyer",
"imageUrl": null,
"fee": 30,
"paymentToken": "PY_TIrNY1CD3836",
"paidAt": "1782373118",
"status": "ONGOING",
"state": "OPENED",
"logs": [],
"channel": "API",
"isSeller": true,
"dispute": null,
"paymentDetails": {
"id": "6a3cdafd734e96016b22736b",
"amount": 1030,
"status": "success",
"reference": "rthyjyutj",
"fee": 0,
"transactionType": "escrow",
"currency": "NGN",
"createdAt": "2026-06-25T07:38:38.003Z"
},
"category": null,
"completedAt": null,
"approvedClaimBy": null,
"refundedBy": null,
"maxDelivery": 1,
"deliveryTimeline": "hours",
"totalQuantity": 1,
"settlementType": "STANDARD",
"milestones": [],
"createdAt": "2026-06-25T07:38:37.283Z",
"updatedAt": "2026-06-25T07:38:38.922Z"
},
{
"id": "6a3cd9b1734e96016b22732e",
"amount": 1000,
"purpose": "multi-purpose escrow item",
"description": "details",
"whoPays": "buyer",
"imageUrl": null,
"fee": 30,
"paymentToken": "PY_V2bRgyPJ3305",
"paidAt": null,
"status": "PENDING",
"state": "AWAITING_PAYMENT",
"logs": [],
"channel": "API",
"isSeller": true,
"dispute": null,
"paymentDetails": null,
"category": null,
"completedAt": null,
"approvedClaimBy": null,
"refundedBy": null,
"maxDelivery": 1,
"deliveryTimeline": "hours",
"totalQuantity": 2,
"settlementType": "STANDARD",
"milestones": [],
"createdAt": "2026-06-25T07:33:05.400Z",
"updatedAt": "2026-06-25T07:38:39.619Z"
},
{
"id": "6a2d53ebfa797d3af379de94",
"amount": 1000,
"purpose": "test",
"description": "details",
"whoPays": "seller",
"imageUrl": null,
"fee": 30,
"paymentToken": "PY_unETaAQs5819",
"paidAt": null,
"status": "PENDING",
"state": "AWAITING_PAYMENT",
"logs": [],
"channel": "API",
"isSeller": true,
"dispute": null,
"paymentDetails": null,
"category": null,
"completedAt": null,
"approvedClaimBy": null,
"refundedBy": null,
"maxDelivery": 1,
"deliveryTimeline": "hours",
"totalQuantity": 2,
"milestones": null,
"createdAt": "2026-06-13T12:58:19.206Z",
"updatedAt": "2026-06-13T12:58:19.206Z"
}
],
"pagination": {
"count": 3,
"pages": 1,
"isLastPage": true,
"nextPage": null,
"previousPage": null
},
"report": {
"total": 0,
"completed": 0,
"ongoing": 0,
"dispute": 0,
"amount": {
"total": 3000,
"completed": 0,
"ongoing": 1000,
"dispute": 0
}
}
}
}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.
Headers
The merchant customer this request acts on behalf of. Omit it to act as your own business account (only a business-type account can sell on its own behalf).
Query Parameters
Whether to return escrows you are selling or buying.
sales, buy Page number (1-based).
Items per page.
High-level escrow status.
PENDING, ONGOING, COMPLETED, REFUNDED, CLAIMED, DISPUTED, INVESTIGATING, SPLIT Response
Paginated escrows.