Skip to content

Endpoint index by scope

The scope check runs before the controller: the request’s method and path are matched against a rule table, longest prefix wins, and the client must hold the rule’s scope or the matching resource:* wildcard. A refusal is HTTP 403 SCOPE_DENIED. This page is that rule table, restricted to scopes a partner client can hold, so you can read off which scopes to ask for.

Two things the table cannot tell you. First, holding the scope opens the route; whether a given account is yours to touch is decided afterwards by the ownership guard (see Ownership model). Second, a route with no rule is not scope-checked at all and needs only a valid token; the reference-data routes are the main example.

Agent routes (/api/legacy/agent/...) take X-Agent-Account naming the agent or merchant you act for, except admin/add_agent and downlines/{realId}/balance. The provider money routes (/api/legacy/provider/wallets/transactions/...) name accounts in the body; “wallets” in those paths is the previous core’s word for an account.

Method Path What it does Documented at
GET /api/legacy/agent/balance Agent balance (main and income) Balance and statement
GET /api/legacy/provider/wallets/{accountNumber}/... Reads under an account path, for example the card routes Virtual cards and POS
Method Path What it does Documented at
POST /api/legacy/agent/virtual_account/create Create a dynamic virtual account in the agent’s range Create a dynamic virtual account
Method Path What it does Documented at
POST /api/legacy/provider/wallets/transactions/fund Fund an account from your settlement account Fund and charge a wallet
POST /api/legacy/provider/wallets/{accountNumber}/deposit Same as fund, account in the path Fund and charge a wallet
Method Path What it does Documented at
POST /api/legacy/provider/wallets/transactions/charge Debit an account you may debit to your settlement account Fund and charge a wallet
Method Path What it does Documented at
POST /api/legacy/provider/wallets/transactions/transfer Transfer between two accounts at the bank Wallet-to-wallet transfer
POST /api/legacy/agent/transact/transfer/mobile Transfer from the agent’s account to another BankCore account Wallet-to-wallet transfer
POST /api/legacy/agent/transact/ussd/cashout Generate a USSD cash-out code for the agent Virtual cards and POS
Method Path What it does Documented at
POST /api/legacy/provider/wallets/transactions/checktran Status of a transaction by reference Check a transaction
GET /api/legacy/agent/statement Agent statement Balance and statement
GET /api/legacy/agent/tranlist Agent transactions, paginated Read your estate
POST /api/legacy/agent/transact/checktran Status of an agent transaction Check a transaction
GET /api/legacy/agent/transact/ussd/cashout/check Status of a USSD cash-out Virtual cards and POS
Method Path What it does Documented at
POST /api/legacy/provider/wallets/transactions/web-credit Credit a merchant for a card or web payment taken by an external acquirer, against a receivable the acquirer settles later Not covered in this guide; granted case by case
Method Path What it does Documented at
POST /api/legacy/provider/wallets/transactions/name_enquiry Resolve an account name, local or at another bank Name enquiry
POST /api/legacy/agent/transact/nameenquiry Same, as a sub-agent Name enquiry
Method Path What it does Documented at
POST /api/legacy/provider/wallets/transactions/banktransfer NIP transfer from an account you may debit to another bank Interbank transfer (NIP)
POST /api/legacy/agent/transact/transfer/direct_debit NIP transfer from the sub-agent’s account Interbank transfer (NIP)
Method Path What it does Documented at
GET /api/legacy/provider/billers, /billers/{codeOrId}, /billers/categories, /billers/{billerCode}/fee Biller catalogue and fee estimate Bill payments and airtime
GET /api/legacy/provider/billproducts, /billproducts/search, /billproducts/{code} Product catalogue Bill payments and airtime
POST /api/legacy/provider/wallets/transactions/bill/validate Validate a subscriber before paying Bill payments and airtime
GET /api/legacy/agent/billers, /billers/search, /billers/categories, /billers/by-category/{category}, /billers/{codeOrId}, /billers/{billerCode}/fee Biller catalogue for a sub-agent Bill payments and airtime
GET /api/legacy/agent/billproducts, /billproducts/search, /billproducts/by-biller/{codeOrId}, /billproducts/{code} Product catalogue for a sub-agent Bill payments and airtime
POST /api/legacy/agent/validators/bill_subscriber Validate a subscriber as a sub-agent Bill payments and airtime
Method Path What it does Documented at
POST /api/legacy/provider/wallets/transactions/bill/pay Pay a bill from an account you may debit Bill payments and airtime
POST /api/legacy/provider/wallets/transactions/airtime Buy airtime from an account you may debit Bill payments and airtime
POST /api/legacy/agent/transact/paybill Pay a bill from the sub-agent’s account Bill payments and airtime
POST /api/legacy/agent/transact/airtime Buy airtime from the sub-agent’s account Bill payments and airtime
Method Path What it does Documented at
POST /api/legacy/agent/createFVA Create a fixed (permanent) virtual account Create a fixed virtual account
PATCH /api/legacy/agent/virtual_account/expire/{accountNumber} Expire a dynamic virtual account Expire a virtual account
Method Path What it does Documented at
GET /api/legacy/agent/virtual_account/check/{accountNumber}/{reference} Status of a dynamic virtual account Check a payment
Method Path What it does Documented at
GET /api/legacy/agent/ Details of the sub-agent named in X-Agent-Account Read your estate
GET /api/legacy/agent/profile Lifetime and month income Read your estate
GET /api/legacy/agent/find/{phoneNumber} Find a sub-agent by phone Read your estate
GET /api/legacy/agent/list List agents you reach, paginated Read your estate
GET /api/legacy/agent/downlines The sub-agents you onboarded, paginated Read your estate
GET /api/legacy/agent/downlines/{realId}/balance Balance of one sub-agent Read your estate
GET /api/legacy/agent/card-transactions Card transactions on the sub-agent’s account Virtual cards and POS

Reading a sub-agent through any of these also requires sub_agent_access_enabled on your client.

Method Path What it does Documented at
POST /api/legacy/agent/change_pin Acknowledged only; PIN handling is yours PIN change and move income
POST /api/legacy/agent/move_income Sweep the sub-agent’s income account into its main account PIN change and move income
PATCH /api/legacy/agent/update Set or correct an agent’s BVN / NIN Read your estate
Method Path What it does Documented at
POST /api/legacy/agent/admin/add_agent Onboard an agent or merchant parented to your client Onboard a sub-agent

No route of its own. It is checked by the ownership guard whenever a money-movement route above names a sub-agent’s account as the source. See Acting on a sub-account’s money.

Method Path What it does Documented at
POST /api/legacy/agent/kyc/documents Upload a principal or corporate document for the agent KYC uploads
POST /api/legacy/agent/kyc/identity-verification, /identity-cross-check, /address-verification, /liveness, /corporate-principals, /corporate-principals/{principalId}/documents Record verification results and principals for the agent KYC uploads

No agent route uses it today. It opens the platform’s native /api/kyc-documents reads, which are not part of the partner offering; see the note on KYC uploads.

Method Path Scope What it does Documented at
POST /api/legacy/agent/transact/pos pos:cashout Third-party terminal transaction (cash-out, bills, transfer, NFC) Virtual cards and POS
POST /api/legacy/agent/transact/mpos/cashout2 pos:cashout mPOS cash-out Virtual cards and POS
POST /api/legacy/agent/transact/mpos/cashout2_bills pos:bill-pay mPOS bill payment Virtual cards and POS
GET /api/pos-transactions pos:read POS transaction list (BankCore-native route) Virtual cards and POS

These routes have no rule and are open to any valid token.

Method Path What it does Documented at
POST /api/auth/channel/token Get a token Authentication
GET /api/legacy/common/institutions All active financial institutions Financial institutions and states
GET /api/legacy/common/institutions/bank Deposit money banks only Financial institutions and states
GET /api/legacy/common/states Nigerian states Financial institutions and states
POST /api/legacy/provider/wallets/{accountNumber}/virtual_card and /virtual_card/block, /unblock, /pinreset, /pinchange Virtual card lifecycle; guarded by ownership, not by scope Virtual cards and POS

The rule table also maps the platform’s native resource routes to the same scopes: GET/POST /api/accounts (accounts:read / accounts:create), POST /api/transactions/deposit, GET /api/transactions (transactions:deposit / transactions:read), POST /api/nip-transfers (nip:transfer), GET/POST /api/bill-payments (bill-payments:read / bill-payments:create), GET/POST /api/virtual-accounts (accounts:read / accounts:create), POST /api/external-transfers/debit and GET /api/external-transfers/{ref}/status (external-transfers:debit / external-transfers:read).

A partner client can never be granted *:*, agents:*, agents:create, kyc:* or kyc:manage; a request to create one with those scopes is refused with FORBIDDEN_PARTNER_SCOPE. The routes behind them:

Method Path Scope Note
POST /api/legacy/agent/admin/add_agent agents:create Open to you through sub-agents:create instead, which parents the agent to your client
POST /api/legacy/agent/admin/terminal/check, /map, /unlink agents:create POS terminal mapping is done by the bank
POST /api/legacy/agent/kyc/pnd kyc:manage Placing or lifting a post-no-debit restriction
POST /api/legacy/agent/kyc/tier-upgrade kyc:manage Requesting a KYC tier upgrade
POST /api/customers/{id}/tier-upgrade kyc:manage Same, native route
GET /api/legacy/pos/{deviceId} pos:provision Terminal key injection; channel servers only

These customer-account routes exist for the bank’s own channel servers. A partner’s estate is its own accounts and the agents and merchants it onboards (individuals or registered businesses, through admin/add_agent); it does not open or manage accounts for the bank’s other customers, so the customers:* scopes are not issued to partner clients.

Method Path Scope What it does
POST /api/legacy/provider/wallets/create customers:create Open a customer account
POST /api/legacy/provider/wallets/find customers:read Find customer accounts by field
GET /api/legacy/provider/wallets/search customers:read Search customer accounts
PATCH /api/legacy/provider/wallets/{accountNumber}/edit customers:create Edit a customer’s details
PATCH /api/legacy/provider/wallets/{accountNumber}/update customers:create Set a customer’s BVN / NIN
POST /api/legacy/provider/wallets/activate, /deactivate customers:update Activate or deactivate a customer account
GET /api/legacy/provider/wallets/{accountNumber}/balance, /balance/{accountNumber}, /statement/{accountNumber}, /{accountNumber}/statement accounts:read, transactions:read Customer-account balance and statement; partners read their estate through the agent routes instead
POST, GET /api/legacy/provider/wallets/{accountNumber}/kyc-documents, /{documentId}/download kyc:upload, kyc:read Customer-account KYC documents; partners use the agent KYC routes