Get banks
curl --request GET \
--url https://api.paj.cash/pub/v2/bank \
--header 'x-api-key: <api-key>'import requests
url = "https://api.paj.cash/pub/v2/bank"
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.paj.cash/pub/v2/bank', 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.paj.cash/pub/v2/bank",
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.paj.cash/pub/v2/bank"
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.paj.cash/pub/v2/bank")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.paj.cash/pub/v2/bank")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body[
{
"id": "Bank of America",
"name": "Bank of America",
"country": "NG",
"code": "001",
"logo": "https://example.com/logo.png"
}
]Banks
Get banks
Returns the supported banks. Any of the query parameters may be used to narrow the list — code matches exactly, name and country match case-insensitively on a substring. With no parameters every bank is returned.
GET
/
pub
/
v2
/
bank
Get banks
curl --request GET \
--url https://api.paj.cash/pub/v2/bank \
--header 'x-api-key: <api-key>'import requests
url = "https://api.paj.cash/pub/v2/bank"
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.paj.cash/pub/v2/bank', 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.paj.cash/pub/v2/bank",
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.paj.cash/pub/v2/bank"
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.paj.cash/pub/v2/bank")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.paj.cash/pub/v2/bank")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body[
{
"id": "Bank of America",
"name": "Bank of America",
"country": "NG",
"code": "001",
"logo": "https://example.com/logo.png"
}
]Returns the banks Paj can pay out to, each with the
The
code that the rest of the
API expects. Everywhere a bank is named — registering an
account, creating an offramp
order — it is named by code, and this is
where those codes come from.
Called with no query parameters it returns every bank. The three filters narrow
it down and combine:
codematches exactly (case-insensitively). Use it to confirm a code you already hold is still valid, or to fetch a single bank’s name and logo.namematches any bank whose name contains the value, case-insensitively —?name=accessfinds “Access Bank”.countryis the short code the bank operates in, e.g.NG.
Fetch the list once and cache it. Bank codes are stable, and the list changes
only when Paj syncs new banks from the payout rail — typically a handful of
times a year. Matching a user’s typed bank name against a cached list is much
faster than calling this per registration.
name filter is a substring match, not a search: it does not correct
spelling or rank results. If you are letting users pick a bank, pull the whole
list and filter it client-side rather than sending every keystroke here.Authorizations
Query Parameters
Bank code to match exactly
Example:
"000016"
Partial, case-insensitive bank name to match
Example:
"access"
Country short code the bank operates in
Example:
"NG"