Overview
The Payments API lets your platform move money out of a virtual account to any bank in Nigeria. Transfers are processed through the NIP (Nigeria Instant Payment) network, which is the same inter-bank rails used by every major Nigerian bank. Most transfers complete in under 10 seconds. Key facts:- Minimum transfer amount: ₦1 (100 kobo)
- Maximum per transfer: determined by your tier (see your dashboard)
- Settlement: instant in sandbox; NIP real-time in production
- All requests require an idempotency key to prevent duplicate payments
Base URL
Authentication
All Payments endpoints require an API key:Idempotency
Every payment request must include an idempotency key. This is a unique string you generate (a UUID is ideal) that ensures the same payment is never processed twice, even if your server retries after a timeout.Endpoints
Initiate Transfer
POST /v1/payments/transfer
Sends money from one of your virtual accounts to any Nigerian bank account.
What you send:
What you get back:
Example request:
Get Payment Status
GET /v1/payments/{payment_id}
Check the current status of a payment. Poll this endpoint if you do not use webhooks, or use it to verify webhook events.
Path parameter:
Status values:
List Payments
GET /v1/payments
Returns a paginated list of all payments made from your business accounts.
Query parameters:
Reverse Payment
POST /v1/payments/{payment_id}/reverse
Request a reversal of a completed payment. Reversals are not guaranteed: if the beneficiary bank has already credited the account and the funds have been spent, reversal may fail.
What you send:
Verify Bank Account
GET /v1/payments/verify-account
Confirm that a bank account number and name match before sending money. Prevents failed transfers due to wrong account numbers.
Query parameters:
What you get back:
Nigerian Bank Codes (Common)
The full list of CBN bank codes is available at CBN’s official portal.
Request Signing (Production)
Production payment requests must be signed with your HMAC-SHA256 secret key. This prevents tampering in transit. Signing steps:- Concatenate:
timestamp + "." + request_body_json - Compute:
HMAC-SHA256(concatenated_string, your_hmac_secret) - Encode: Base64 the result
- Send: Include in the
X-Signatureheader along withX-Timestamp
Error Codes
Full API Reference
Open API Playground
Try Payments endpoints live in the browser

