Banks

Lookup table for NG bank codes. Returns the (cbn_code, nip_code, name, slug, kind) tuples Swappr knows about, filtered to banks you can actually pay to.

Bank codes are accepted in two forms on payouts (locked 2026-05-15):

  • cbn_code — 3-digit CBN canonical code (e.g. 058 for GTBank). Shorter, more portable, matches CBN circulars + NIBSS reference tables + most provider dashboards. Recommended.
  • nip_code — 6-digit NIBSS NIP code (e.g. 000013 for GTBank). Useful if your internal systems already speak NIBSS NIP.

Both forms are accepted on recipient.bank_code for single payouts (POST /v1/payouts) and recipient_bank_code per row on bulk batches (POST /v1/batches). Swappr canonicalizes to 3-digit CBN internally before dispatch, so your payout works against every provider in the routing cascade regardless of which form you sent.

GETList banks

GET/v1/banks?currency=NGN

Returns the curated list of NG banks you can pay to, with both code forms for each. Heavily cached (5-minute TTL on Swappr’s side; safe to cache locally for hours).

Query parameters
currencystringRequired

Must be NGN (only currency with a public bank list today).

Response fields

FieldTypeNotes
codestringBack-compat alias for cbn_code. Falls back to nip_code when the bank’s cbn_code is null (typical for MFBs / fintechs / mobile money).
cbn_codestring | null3-digit CBN canonical code. Null for banks that aren’t in CBN’s commercial-bank list (MFBs, fintechs, mobile money — most have only nip_code).
nip_codestring | null6-digit NIBSS NIP code. Most banks have this; a small number of legacy DMB rows have only cbn_code.
namestringCanonical display name.
slugstringStable lowercase identifier — useful for icons + autocomplete.
kindstringOne of dmb / mfb / mobile_money / psb / merchant_bank / fintech.

Bank kinds

KindDescription
dmbDeposit Money Bank — the major commercial banks
mfbMicrofinance Bank
mobile_moneyMobile money operator (e.g. OPay, PalmPay)
psbPayment Service Bank
merchant_bankMerchant bank
fintechFintech / neobank

Notes

  • Only banks marked is_exposed_to_merchants in our DB appear here. We curate the list — by default, ~80-90 of 906 NIBSS-registered banks are exposed.
  • Most banks have BOTH cbn_code and nip_code populated. A handful (Moniepoint MFB, Kuda, OPay, PalmPay, etc.) only have nip_code — pass that on recipient.bank_code and it will work.
  • slug is a stable lowercase identifier useful for icons + autocomplete.

How bank codes flow downstream

Swappr canonicalizes every inbound bank_code to the 3-digit CBN form before dispatching to the underlying payment rail. So:

  • Whether you send 058 or 000013 on recipient.bank_code, the dispatcher resolves both to the same canonical bank.
  • Different rails natively accept different formats — that’s not your problem. The canonicalizer handles translation per rail.
  • If the bank_code you sent doesn’t match any Bank row’s cbn_code or nip_code, you get unknown_bank_code (422) at request time. You never see a downstream failure from a format mismatch.

Send whichever form is easier for your stack. The result is identical.

Errors

CodeHTTPCause
unsupported_currency400Anything other than NGN
unknown_bank_code422 (returned by /v1/payouts + /v1/batches, not this endpoint)A bank_code value was sent on a payout that doesn’t match any Bank row’s cbn_code or nip_code.
Request
curl 'https://api.swappr.me/api/v1/banks?currency=NGN' \
  -H "Authorization: Bearer sk_live_..."
Response
{
  "object": "list",
  "data": [
    {
      "code": "044",
      "cbn_code": "044",
      "nip_code": "000014",
      "name": "Access Bank",
      "slug": "access-bank",
      "kind": "dmb"
    },
    {
      "code": "058",
      "cbn_code": "058",
      "nip_code": "000013",
      "name": "Guaranty Trust Bank",
      "slug": "gtbank",
      "kind": "dmb"
    },
    {
      "code": "090405",
      "cbn_code": null,
      "nip_code": "090405",
      "name": "Moniepoint MFB",
      "slug": "moniepoint-mfb",
      "kind": "mfb"
    }
    // ...
  ]
}
200 OK