Validate a destination account
curl --request POST \
--url https://api-partner.onecluster.co/api/v1/payments/account-enquiry \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"accountNumber": "0123456789",
"bankCode": "058"
}
'import requests
url = "https://api-partner.onecluster.co/api/v1/payments/account-enquiry"
payload = {
"accountNumber": "0123456789",
"bankCode": "058"
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({accountNumber: '0123456789', bankCode: '058'})
};
fetch('https://api-partner.onecluster.co/api/v1/payments/account-enquiry', 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-partner.onecluster.co/api/v1/payments/account-enquiry",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'accountNumber' => '0123456789',
'bankCode' => '058'
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api-partner.onecluster.co/api/v1/payments/account-enquiry"
payload := strings.NewReader("{\n \"accountNumber\": \"0123456789\",\n \"bankCode\": \"058\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api-partner.onecluster.co/api/v1/payments/account-enquiry")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"accountNumber\": \"0123456789\",\n \"bankCode\": \"058\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-partner.onecluster.co/api/v1/payments/account-enquiry")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"accountNumber\": \"0123456789\",\n \"bankCode\": \"058\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"responseCode": "00",
"message": "Account validated",
"data": {
"accountName": "ADEBAYO JOHNSON",
"accountNumber": "0123456789",
"bankCode": "058",
"bankName": "GTBank",
"nameEnquirySessionId": "NES-20260325-ABC123"
}
}{
"type": "https://api.onecluster.co/errors/insufficient-funds",
"title": "Insufficient Funds",
"status": 422,
"detail": "The account balance is ₦0.00. You need at least ₦50,000.00 to complete this transfer.",
"instance": "/api/v1/payments/transfer",
"correlationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"code": "INSUFFICIENT_FUNDS"
}{
"type": "https://api.onecluster.co/errors/insufficient-funds",
"title": "Insufficient Funds",
"status": 422,
"detail": "The account balance is ₦0.00. You need at least ₦50,000.00 to complete this transfer.",
"instance": "/api/v1/payments/transfer",
"correlationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"code": "INSUFFICIENT_FUNDS"
}Payments Endpoints
Account Enquiry
Always call this before initiating a transfer. It confirms the destination account exists and returns the account holder’s name so your user can verify they are sending to the right person.
The nameEnquirySessionId returned here is required when you call
the transfer endpoint.
POST
/
api
/
v1
/
payments
/
account-enquiry
Validate a destination account
curl --request POST \
--url https://api-partner.onecluster.co/api/v1/payments/account-enquiry \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"accountNumber": "0123456789",
"bankCode": "058"
}
'import requests
url = "https://api-partner.onecluster.co/api/v1/payments/account-enquiry"
payload = {
"accountNumber": "0123456789",
"bankCode": "058"
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({accountNumber: '0123456789', bankCode: '058'})
};
fetch('https://api-partner.onecluster.co/api/v1/payments/account-enquiry', 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-partner.onecluster.co/api/v1/payments/account-enquiry",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'accountNumber' => '0123456789',
'bankCode' => '058'
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api-partner.onecluster.co/api/v1/payments/account-enquiry"
payload := strings.NewReader("{\n \"accountNumber\": \"0123456789\",\n \"bankCode\": \"058\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api-partner.onecluster.co/api/v1/payments/account-enquiry")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"accountNumber\": \"0123456789\",\n \"bankCode\": \"058\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-partner.onecluster.co/api/v1/payments/account-enquiry")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"accountNumber\": \"0123456789\",\n \"bankCode\": \"058\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"responseCode": "00",
"message": "Account validated",
"data": {
"accountName": "ADEBAYO JOHNSON",
"accountNumber": "0123456789",
"bankCode": "058",
"bankName": "GTBank",
"nameEnquirySessionId": "NES-20260325-ABC123"
}
}{
"type": "https://api.onecluster.co/errors/insufficient-funds",
"title": "Insufficient Funds",
"status": 422,
"detail": "The account balance is ₦0.00. You need at least ₦50,000.00 to complete this transfer.",
"instance": "/api/v1/payments/transfer",
"correlationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"code": "INSUFFICIENT_FUNDS"
}{
"type": "https://api.onecluster.co/errors/insufficient-funds",
"title": "Insufficient Funds",
"status": 422,
"detail": "The account balance is ₦0.00. You need at least ₦50,000.00 to complete this transfer.",
"instance": "/api/v1/payments/transfer",
"correlationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"code": "INSUFFICIENT_FUNDS"
}Authorizations
Your API key, formatted as: ApiKey ubn_sb_your_key_here
- Sandbox keys start with
ubn_sb_ - Production keys start with
ubn_pk_ - Never use production keys during testing, they will charge real money
Headers
A UUID v4 you generate to trace this request through our systems. If you don't provide one, we generate it for you. Always include it in support requests, it helps us find your request in logs.
Example:
"7f3a9c21-4e8b-4a12-b6d1-3c8a7f2e1b09"
Body
application/json
Response
Account found, verify the name before proceeding
Standard response wrapper for all successful API calls

