curl --request GET \
--url https://staging.api.payluk.ng/v1/escrow/claim-funds/{paymentToken} \
--header 'Authorization: Bearer <token>'import requests
url = "https://staging.api.payluk.ng/v1/escrow/claim-funds/{paymentToken}"
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/claim-funds/{paymentToken}', 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/claim-funds/{paymentToken}",
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/claim-funds/{paymentToken}"
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/claim-funds/{paymentToken}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://staging.api.payluk.ng/v1/escrow/claim-funds/{paymentToken}")
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": "Funds claimed successfully",
"data": {
"id": "6925a573d40cd0ecbbe74316",
"amount": 1000,
"purpose": "Testing Dispute Transaction",
"description": "Black Titanium, White Titanium, Natural Titanium, Desert Titanium\n\nTitanium design\nLatest-generation Ceramic Shield front\nTextured matt glass back",
"whoPays": "buyer",
"imageUrl": null,
"fee": 25,
"paymentToken": "PY_uH01Xq1D4747",
"paidAt": "1764075069",
"status": "CLAIMED",
"state": "OPENED",
"logs": [],
"channel": "API",
"isSeller": true,
"dispute": null,
"paymentDetails": {
"id": "6925a626d40cd0ecbbe7432d",
"amount": 1025,
"status": "success",
"reference": "14433999026655",
"fee": 25,
"transactionType": "escrow",
"currency": "NGN",
"createdAt": "2025-11-25T12:50:46.572Z"
},
"category": null,
"completedAt": null,
"approvedClaimBy": null,
"refundedBy": null,
"maxDelivery": 1,
"deliveryTimeline": "minutes",
"totalQuantity": 1,
"createdAt": "2025-11-25T12:47:47.368Z",
"updatedAt": "2025-11-25T12:57:18.546Z"
}
}{
"status": 400,
"message": "Escrow cannot be claimed yet",
"data": {}
}{
"status": 401,
"message": "Access denied",
"data": {}
}{
"status": 429,
"message": "Too many request"
}Claim funds
Seller requests release of funds without the buyer’s confirmation. Allowed only when the escrow is OPENED and the delivery window (maxDelivery × deliveryTimeline, counted from paidAt) has elapsed; before that the call fails with Escrow cannot be claimed yet. Send the seller’s customer-id, or omit it if your business account is the seller. Closes the escrow as CLAIMED.
curl --request GET \
--url https://staging.api.payluk.ng/v1/escrow/claim-funds/{paymentToken} \
--header 'Authorization: Bearer <token>'import requests
url = "https://staging.api.payluk.ng/v1/escrow/claim-funds/{paymentToken}"
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/claim-funds/{paymentToken}', 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/claim-funds/{paymentToken}",
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/claim-funds/{paymentToken}"
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/claim-funds/{paymentToken}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://staging.api.payluk.ng/v1/escrow/claim-funds/{paymentToken}")
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": "Funds claimed successfully",
"data": {
"id": "6925a573d40cd0ecbbe74316",
"amount": 1000,
"purpose": "Testing Dispute Transaction",
"description": "Black Titanium, White Titanium, Natural Titanium, Desert Titanium\n\nTitanium design\nLatest-generation Ceramic Shield front\nTextured matt glass back",
"whoPays": "buyer",
"imageUrl": null,
"fee": 25,
"paymentToken": "PY_uH01Xq1D4747",
"paidAt": "1764075069",
"status": "CLAIMED",
"state": "OPENED",
"logs": [],
"channel": "API",
"isSeller": true,
"dispute": null,
"paymentDetails": {
"id": "6925a626d40cd0ecbbe7432d",
"amount": 1025,
"status": "success",
"reference": "14433999026655",
"fee": 25,
"transactionType": "escrow",
"currency": "NGN",
"createdAt": "2025-11-25T12:50:46.572Z"
},
"category": null,
"completedAt": null,
"approvedClaimBy": null,
"refundedBy": null,
"maxDelivery": 1,
"deliveryTimeline": "minutes",
"totalQuantity": 1,
"createdAt": "2025-11-25T12:47:47.368Z",
"updatedAt": "2025-11-25T12:57:18.546Z"
}
}{
"status": 400,
"message": "Escrow cannot be claimed yet",
"data": {}
}{
"status": 401,
"message": "Access denied",
"data": {}
}{
"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.
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).
Path Parameters
The escrow's payment token (e.g. PY_8AB12C9D3045).