### Sample Wallet Statement API Request
Source: https://developers.monnify.com/docs/wallets/wallet-statement
Example of a GET request to the wallet statement API. It includes parameters for filtering by date range, enabling time filtering, and pagination.
```bash
1{{Base_Url}}/api/v1/disbursements/wallet/8016722372/statement?startDate=1702076400000&endDate=1702458365000&enableTimeFilter=true&pageNo=0&pageSize=11
```
--------------------------------
### Install Monnify Node.js Library and Dependencies
Source: https://developers.monnify.com/blog/implementing-monnify-reserve-Account-in-nodejs
Install the monnify-nodejs-lib along with other necessary packages like express, body-parser, and cors for building a web server.
```bash
npm install monnify-nodejs-lib express body-parser cors crypto
```
--------------------------------
### Name Enquiry - Response Example
Source: https://developers.monnify.com/docs/verification-api/verifying-your-customers
This is an example of a successful response from the Name Enquiry API, showing the account details and associated name.
```json
{
"requestSuccessful": true,
"responseMessage": "success",
"responseCode": "0",
"responseBody": {
"accountNumber": "0123456789",
"accountName": "John Doe",
"bankCode": "058",
"bankName": "GTBank"
}
}
```
--------------------------------
### BVN and Account Name Validation - Response Example
Source: https://developers.monnify.com/docs/verification-api/verifying-your-customers
Example response for BVN and Account Name Validation, indicating if the provided BVN matches the account details.
```json
{
"requestSuccessful": true,
"responseMessage": "success",
"responseCode": "0",
"responseBody": {
"bvn": "12345678901",
"accountNumber": "0123456789",
"bankCode": "058",
"accountName": "John Doe",
"bvnAccountNameMatch": true
}
}
```
--------------------------------
### Wallet Balance Response
Source: https://developers.monnify.com/docs/disbursements/single-transfers
Example response structure for a wallet balance query.
```JSON
{
"requestSuccessful": true,
"responseMessage": "success",
"responseCode": "0",
"responseBody": {
"availableBalance": 24500.00,
"ledgerBalance": 25000.00,
"accountNumber": "9999999999",
"currency": "NGN"
}
}
```
--------------------------------
### BVN Information Verification - Response Example
Source: https://developers.monnify.com/docs/verification-api/verifying-your-customers
Example response for BVN Information Verification, confirming if the BVN, name, date of birth, and mobile number match the registered details.
```json
{
"requestSuccessful": true,
"responseMessage": "success",
"responseCode": "0",
"responseBody": {
"bvn": "12345678901",
"name": "John Doe",
"dateOfBirth": "01-Jan-1990",
"mobileNo": "08012345678",
"bvnInformationMatch": true
}
}
```
--------------------------------
### Sample Webhook Event Data
Source: https://developers.monnify.com/docs/webhooks
This is an example of a successful transaction webhook payload received from Monnify.
```json
{
"eventData": {
"product": {
"reference": "111222333",
"type": "OFFLINE_PAYMENT_AGENT"
},
"transactionReference": "MNFY|76|20211117154810|000001",
"paymentReference": "0.01462001097368737",
"paidOn": "17/11/2021 3:48:10 PM",
"paymentDescription": "Mockaroo Jesse",
"metaData": {},
"destinationAccountInformation": {},
"paymentSourceInformation": {},
"amountPaid": 78000,
"totalPayable": 78000,
"offlineProductInformation": {
"code": "41470",
"type": "DYNAMIC"
},
"cardDetails": {},
"paymentMethod": "CASH",
"currency": "NGN",
"settlementAmount": 77600,
"paymentStatus": "PAID",
"customer": {
"name": "Mockaroo Jesse",
"email": "111222333@ZZAMZ4WT4Y3E.monnify"
}
},
"eventType": "SUCCESSFUL_TRANSACTION"
}
```
--------------------------------
### Create Mandate
Source: https://developers.monnify.com/docs/collections/direct-debits
Create a mandate on the customer's bank account. This is an essential API for initiating direct debit setups.
```APIDOC
## Create Mandate
### Description
Create a mandate on the customer's bank account.
### Method
POST
### Endpoint
`/v1/disbursements/mandate`
### Request Body
- **customerName** (string) - Required - Name of the customer.
- **customerEmail** (string) - Required - Email address of the customer.
- **customerPhoneNumber** (string) - Required - Phone number of the customer.
- **customerAccountDetails** (object) - Required - Details of the customer's bank account.
- **accountNumber** (string) - Required - Customer's bank account number.
- **bankCode** (string) - Required - The bank code of the customer's bank.
- **accountName** (string) - Required - The name on the customer's bank account.
- **mandateDate** (string) - Required - The date the mandate is created (YYYY-MM-DD).
- **mandateAmount** (number) - Required - The amount for the mandate.
- **transactionLimit** (number) - Optional - The transaction limit for the mandate.
- **narration** (string) - Optional - A description for the mandate.
- **redirectUrl** (string) - Optional - URL to redirect the customer after authorization.
### Request Example
```json
{
"customerName": "OPEYEMI LUKMON ANIMASHAUN",
"customerEmail": "ahsan.saleem@teamapt.com",
"customerPhoneNumber": "2348161116307",
"customerAccountDetails": {
"accountNumber": "0707206840",
"bankCode": "044",
"accountName": "OPEYEMI LUKMON ANIMASHAUN"
},
"mandateDate": "2025-09-09",
"mandateAmount": 1000.00,
"transactionLimit": 5000.00,
"narration": "Subscription Fee",
"redirectUrl": "https://example.com/redirect"
}
```
### Response
#### Success Response (200)
- **requestSuccessful** (boolean) - Indicates if the request was successful.
- **responseMessage** (string) - A message describing the response.
- **responseCode** (string) - The response code.
- **responseBody** (object) - Contains details of the created mandate.
- **mandateCode** (string) - The unique code for the mandate.
- **mandateReference** (string) - The reference for the mandate.
- **startDate** (string) - The start date of the mandate.
- **endDate** (string) - The end date of the mandate.
- **mandateStatus** (string) - The current status of the mandate.
- **mandateAmount** (number) - The amount of the mandate.
- **autoRenew** (boolean) - Whether the mandate auto-renews.
- **customerPhoneNumber** (string) - The customer's phone number.
- **customerEmailAddress** (string) - The customer's email address.
- **customerAddress** (string) - The customer's address.
- **customerName** (string) - The customer's name.
- **customerAccountName** (string) - The name on the customer's account.
- **customerAccountNumber** (string) - The customer's account number.
- **customerAccountBankCode** (string) - The customer's bank code.
- **mandateDescription** (string) - The description of the mandate.
- **authorizationMessage** (string) - Message regarding authorization.
- **authorizationLink** (string) - Link for mandate authorization.
#### Response Example
```json
{
"requestSuccessful": true,
"responseMessage": "success",
"responseCode": "0",
"responseBody": {
"mandateCode": "MTDD|01K4PV33AMJ9GT1EF7XATZTWJB",
"mandateReference": "test_oogunboyejo_prod_32",
"startDate": "2025-09-09T01:46:30.000+00:00",
"endDate": "2025-11-25T09:15:30.000+00:00",
"mandateStatus": "PENDING_AUTHORIZATION",
"mandateAmount": 1000.00,
"autoRenew": true,
"customerPhoneNumber": "2348161116307",
"customerEmailAddress": "ahsan.saleem@teamapt.com",
"customerAddress": "12 Wole Ariyo",
"customerName": "123-_iop",
"customerAccountName": "OPEYEMI LUKMON ANIMASHAUN",
"customerAccountNumber": "0707206840",
"customerAccountBankCode": "044",
"mandateDescription": "Subscription Fee",
"authorizationMessage": "Please use activation link to authenticate the mandate.",
"authorizationLink": "https://mandate-verification.teamapt.com?sessionId=cdbc8961209b49f39d7eb2d4ae7170e3"
}
}
```
```
--------------------------------
### Payment Requery Sample Request
Source: https://developers.monnify.com/docs/collections/offline-payin
This is a sample GET request URL that Monnify sends to the merchant's Payment Requery endpoint.
```http
GET {{merchantPaymentRequeryUrl}}?transactionReference=MNFY%7C44%7C20220407112123%7C000684
```
--------------------------------
### Initialize Node.js Project
Source: https://developers.monnify.com/blog/implementing-monnify-reserve-Account-in-nodejs
Initialize a new Node.js project using npm. This creates a package.json file to manage project metadata and dependencies.
```bash
npm init
```
--------------------------------
### Get Paycode API
Source: https://developers.monnify.com/docs/disbursements/offline-payout
This endpoint is called to get details of a paycode that has been created. The paycode returned is always masked.
```APIDOC
## Get Paycode API
### Description
This endpoint is called to get details of a paycode that has been created. The paycode returned is always masked as a layer of security.
### Method
GET
### Endpoint
`/api/v1/disbursements/paycode/{reference}`
### Parameters
#### Path Parameters
- **reference** (string) - Required - The reference of the paycode to retrieve.
### Response
#### Success Response (200)
- **paycode** (string) - The masked 10-digit paycode.
- **beneficiaryName** (string) - The name of the beneficiary.
- **amount** (number) - The disbursed amount.
- **status** (string) - The current status of the paycode.
- **createdDate** (string) - The date and time the paycode was created.
- **expiryDate** (string) - The date and time the paycode will expire.
#### Response Example
```json
{
"paycode": "**********",
"beneficiaryName": "John Doe",
"amount": 5000,
"status": "PENDING",
"createdDate": "2023-10-27T10:00:00Z",
"expiryDate": "2023-10-28T10:00:00Z"
}
```
```
--------------------------------
### Specify Payment Methods and Callback
Source: https://developers.monnify.com/docs/collections/one-time-payment
This example shows how to specify a subset of payment methods and define a callback function to be executed upon completion of the payment process.
```javascript
paymentMethods: [
"USSD",
"PHONE_NUMBER"
],
onComplete: function(response) {
console.log(response);
}
```
--------------------------------
### Get Wallets
Source: https://developers.monnify.com/docs/wallets
The Monnify Get All Wallets API helps retrieve a comprehensive list of customer wallets that have been generated by the merchant.
```APIDOC
## Get Wallets
### Description
Retrieves a comprehensive list of customer wallets generated by the merchant.
### Method
GET
### Endpoint
/v1/merchant/wallet
### Query Parameters
- **contractCode** (string) - Required - The merchant's contract code.
### Response
#### Success Response (200)
- **walletId** (string) - The unique identifier for the wallet.
- **accountNumber** (string) - The account number associated with the wallet.
- **accountName** (string) - The name associated with the wallet account.
- **currencyCode** (string) - The currency code of the wallet.
- **status** (string) - The status of the wallet.
#### Response Example
```json
{
"responseMessage": "Wallets retrieved successfully",
"responseCode": "00",
"data": [
{
"walletId": "MW_1234567890",
"accountNumber": "9876543210",
"accountName": "John Doe",
"currencyCode": "NGN",
"status": "ACTIVE"
},
{
"walletId": "MW_0987654321",
"accountNumber": "1234567890",
"accountName": "Jane Smith",
"currencyCode": "NGN",
"status": "ACTIVE"
}
]
}
```
```
--------------------------------
### Initialize Monnify Client and Create Reserved Account in Node.js
Source: https://developers.monnify.com/blog/implementing-monnify-reserve-Account-in-nodejs
Instantiate the Monnify API client with your credentials and use it to create a reserved virtual account. Ensure you have your API key and secret key configured.
```javascript
import {MonnifyAPI} from "monnify-nodejs-lib"
const config = {
MONNIFY_APIKEY: {YOURMONNIFYAPIKEY},
MONNIFY_SECRET: {YOURMONNIFYSECRET}
}
config.env = {APIENVIRONMENT}
const monnifyClient = new MonnifyAPI(config)
async function getAccessToken(){
try{
const response = await monnifyClient.getToken()
if (response[0] === 200){
return response[1]
}
else{
throw new Error(JSON.stringify(response[1]))
}
}
catch(err){
console.log(err)
return false
}
}
async function createVirtualAccount(payload){
try{
const authToken = await getAccessToken()
if (!authToken){
throw new Error("Could not create virtual account at the moment as token is not available")
}
const response = await monnifyClient.reservedAccount.createReservedAccount(authToken,payload)
if(response[0] === 200){
return response[1]
}
else if (response[0] >= 400 && response[0] < 500){
return response[1]
}
else{
throw new Error(json.Stringify(response[1]))
}
}
catch(err){
console.log(err)
return false
}
}
```
--------------------------------
### Get Wallet Balance
Source: https://developers.monnify.com/docs/disbursements/single-transfers
Check the available balance in your Monnify disbursement wallet at any time by making a GET request to the Wallet Balance API.
```APIDOC
## GET /disbursements/wallet-balance
### Description
Retrieves the current balance of your Monnify disbursement wallet.
### Method
GET
### Endpoint
https://sandbox.monnify.com/api/v2/disbursements/wallet-balance
### Query Parameters
- **accountNumber** (string) - Required - Your Monnify disbursement wallet account number.
### Response
#### Success Response (200)
- **requestSuccessful** (boolean) - Indicates if the request was successful.
- **responseMessage** (string) - A message describing the response.
- **responseCode** (string) - The response code.
- **responseBody** (object) - Contains the wallet balance details.
- **availableBalance** (float) - The available balance in the wallet.
- **ledgerBalance** (float) - The ledger balance of the wallet.
- **accountNumber** (string) - The wallet account number.
- **currency** (string) - The currency of the balance.
### Response Example
```json
{
"requestSuccessful": true,
"responseMessage": "success",
"responseCode": "0",
"responseBody": {
"availableBalance": 24500.00,
"ledgerBalance": 25000.00,
"accountNumber": "9999999999",
"currency": "NGN"
}
}
```
```
--------------------------------
### Monnify SDK Integration and Payment Initialization
Source: https://developers.monnify.com/blog/integrating-monnify-checkout-into-your-project
This HTML and JavaScript code demonstrates how to include the Monnify SDK and initialize the payment process. It sets up a button to trigger the payment and configures the Monnify SDK with transaction, customer, and API details. Use this for initiating payments directly from your webpage.
```html
```
--------------------------------
### List All Single Transfers
Source: https://developers.monnify.com/docs/disbursements/single-transfers
Retrieve a paginated list of all single transfers from your account by making a GET request to the Get All Single Transactions API.
```APIDOC
## GET /disbursements/single/list
### Description
Retrieves a paginated list of all single transfers.
### Method
GET
### Endpoint
https://sandbox.monnify.com/api/v2/disbursements/single/list
### Query Parameters
- **pageNo** (integer) - Required - The page number to retrieve (starts at 0).
- **pageSize** (integer) - Required - The number of items per page.
### Request Example
```
curl --request GET \
--url 'https://sandbox.monnify.com/api/v2/disbursements/single/list?pageNo=0&pageSize=20' \
--header 'Authorization: Bearer {access_token}'
```
```
--------------------------------
### Express Server Setup with Monnify Integration
Source: https://developers.monnify.com/blog/implementing-monnify-reserve-Account-in-nodejs
Configure an Express.js server to handle API requests, including setting up body parsing, defining error handlers, and routing requests to the Monnify service.
```javascript
import router from "./router.js"
import express from 'express'
import bodyParser from "body-parser";
const requestRouter = router
const notFound = (req, res, next) => {
res.status(404);
res.json({
status: 404,
msg: "Resource was not found",
});
};
const handleError = (error, req, res, next) => {
console.log(error);
res.status(error.status || 500);
res.json({
status:"failed",responseBody:" An error occurred while processing your request"
});
};
const app = express()
app.use(bodyParser.urlencoded({extended : true}))
app.use(bodyParser.json())
app.use("/api/v1",requestRouter)
app.use(notFound);
app.use(handleError);
const PORT = process.env.PORT || 4111;
app.listen(PORT, console.log("Server started at port: " + PORT))
```
--------------------------------
### Get Transfer Status
Source: https://developers.monnify.com/docs/disbursements/single-transfers
Check the status of a single transfer by making a GET request to the Single Transfer Status API using the transaction reference.
```APIDOC
## GET /disbursements/single/summary
### Description
Retrieves the status of a single transfer.
### Method
GET
### Endpoint
https://sandbox.monnify.com/api/v2/disbursements/single/summary
### Query Parameters
- **reference** (string) - Required - The transaction reference to check.
### Response
#### Success Response (200)
- **requestSuccessful** (boolean) - Indicates if the request was successful.
- **responseMessage** (string) - A message describing the response.
- **responseCode** (string) - The response code.
- **responseBody** (object) - Contains the details of the transfer status.
- **amount** (float) - The transfer amount.
- **reference** (string) - The transaction reference.
- **narration** (string) - The narration of the transfer.
- **currency** (string) - The currency of the transfer.
- **fee** (float) - The transaction fee.
- **twoFaEnabled** (boolean) - Indicates if two-factor authentication was enabled.
- **status** (string) - The current status of the transfer (e.g., SUCCESS, PENDING).
- **transactionDescription** (string) - A description of the transaction status.
- **transactionReference** (string) - Monnify's internal transaction reference.
- **createdOn** (string) - The timestamp when the transfer was created.
- **destinationAccountNumber** (string) - The destination account number.
- **destinationAccountName** (string) - The destination account name.
- **destinationBankCode** (string) - The destination bank code.
- **destinationBankName** (string) - The destination bank name.
### Response Example
```json
{
"requestSuccessful": true,
"responseMessage": "success",
"responseCode": "0",
"responseBody": {
"amount": 500.00,
"reference": "unique-ref-001",
"narration": "Payment for services rendered",
"currency": "NGN",
"fee": 10.75,
"twoFaEnabled": false,
"status": "SUCCESS",
"transactionDescription": "Transfer Successful",
"transactionReference": "MONNIFY_TRX_REF_001",
"createdOn": "2024-01-15T10:30:00.000+0000",
"destinationAccountNumber": "0123456789",
"destinationAccountName": "John Doe",
"destinationBankCode": "058",
"destinationBankName": "GTBank"
}
}
```
```
--------------------------------
### Launch Payment Gateway
Source: https://developers.monnify.com/docs/collections/one-time-payment
Initiate the payment process by launching the Monnify payment gateway with the specified transaction parameters. This is typically triggered by a user action, such as clicking a 'Pay' button.
```swift
let amount = Decimal(100)
let paymentRef = "ASDF123454321"
let parameter = TransactionParameters(amount: amount,
currencyCode: "NGN",
paymentReference: paymentRef,
customerEmail: "johndoe@example.com",
customerName: "John Doe" ,
customerMobileNumber: "08000000000",
paymentDescription: "Payment Description.",
incomeSplitConfig: [],
metaData: ["deviceType":"ios", "userId":"user314285714"],
paymentMethods: [PaymentMethod.card, PaymentMethod.accountTransfer],
tokeniseCard: false)
```
--------------------------------
### Get Transfer Status
Source: https://developers.monnify.com/docs/disbursements/single-transfers
Check the status of a single transfer by making a GET request to the Single Transfer Status API using the transaction reference.
```cURL
curl --request GET \
--url 'https://sandbox.monnify.com/api/v2/disbursements/single/summary?reference=unique-ref-001' \
--header 'Authorization: Bearer {access_token}'
```
--------------------------------
### Sample Request for Reserved Account
Source: https://developers.monnify.com/docs/collections/customer-reserved-account
This JSON payload demonstrates the required fields for creating a new reserved account for a customer. Ensure all fields are correctly populated.
```json
{
"accountReference": "abc123",
"accountName": "Test Reserved Account",
"currencyCode": "NGN",
"contractCode": "8389328412",
"customerEmail": "test@tester.com",
"customerName": "John Doe",
"bvn": "21212121212",
"restrictPaymentSource": true,
"allowedPaymentSources": {
"bvns": ["21212121212", "20202020202"],
"bankAccounts": [
{
"accountNumber": "0068687503",
"bankCode": "232"
},
{
"accountNumber": "2048714015",
"bankCode": "057"
}
],
"accountNames": ["SAMUEL DAMILARE OGUNNAIKE"]
}
}
```
--------------------------------
### Sample Response for Reserved Account Creation
Source: https://developers.monnify.com/docs/collections/customer-reserved-account
This JSON structure represents a successful response after creating a reserved account. It includes details about the account, reservation, and associated payment source restrictions.
```json
{
"requestSuccessful": true,
"responseMessage": "success",
"responseCode": "0",
"responseBody": {
"contractCode": "8389328412",
"accountReference": "abc123",
"accountName": "Tes",
"currencyCode": "NGN",
"customerEmail": "test@tester.com",
"customerName": "John Doe",
"accounts": [
{
"bankCode": "50515",
"bankName": "Moniepoint Microfinance Bank",
"accountNumber": "6254727989",
"accountName": "Tes"
}
],
"collectionChannel": "RESERVED_ACCOUNT",
"reservationReference": "NWA7DMJ0W2UDK1KN5SLF",
"reservedAccountType": "GENERAL",
"status": "ACTIVE",
"createdOn": "2023-04-14 12:04:39.034",
"incomeSplitConfig": [],
"bvn": "21212121212",
"restrictPaymentSource": true,
"allowedPaymentSources": {
"bvns": ["21212121212", "20202020202"],
"bankAccounts": [
{
"accountNumber": "0068687503",
"bankCode": "232"
},
{
"accountNumber": "2048714015",
"bankCode": "057"
}
],
"accountNames": ["SAMUEL DAMILARE OGUNNAIKE"]
}
}
}
```
--------------------------------
### Get Wallet Balance
Source: https://developers.monnify.com/docs/disbursements/single-transfers
Check the available balance in your Monnify disbursement wallet by making a GET request to the Wallet Balance API. Include the `accountNumber` as a query parameter.
```cURL
curl --request GET \
--url 'https://sandbox.monnify.com/api/v2/disbursements/wallet-balance?accountNumber=9999999999' \
--header 'Authorization: Bearer {access_token}'
```
--------------------------------
### Get Card Token
Source: https://developers.monnify.com/docs/collections/recurring-payments
After a successful initial transaction, use the Get Transaction Status API to retrieve the card token. This token is essential for subsequent automated charges.
```APIDOC
## Get Transaction Status API
### Description
Retrieves the status of a transaction and associated card details, including the card token.
### Method
GET
### Endpoint
`/v1/transactions/status/{transactionReference}`
### Parameters
#### Path Parameters
- **transactionReference** (string) - Required - The reference of the transaction to query.
### Response
#### Success Response (200)
- **cardDetails** (object) - Contains details about the card used in the transaction.
- **cardToken** (string) - The tokenized representation of the card for future use.
### Response Example
```json
{
"requestSuccessful": true,
"responseMessage": "success",
"responseCode": "0",
"responseBody": {
"transactionReference": "MNFY|85|20220121154916|000006",
"paymentReference": "1642776556694",
"amountPaid": "30.00",
"totalPayable": "30.00",
"settlementAmount": "20.00",
"paidOn": "21/01/2022 03:49:28 PM",
"paymentStatus": "PAID",
"paymentDescription": "Paying for Product A",
"currency": "NGN",
"paymentMethod": "CARD",
"product": {
"type": "WEB_SDK",
"reference": "1642776556694"
},
"cardDetails": {
"cardType": "MC Scheme",
"last4": "1608",
"expMonth": "08",
"expYear": "24",
"bin": "469667",
"bankCode": "044",
"bankName": "Access bank",
"reusable": true,
"countryCode": null,
"cardToken": "MNFY_8BA4740A8ED449E7BE404335977193AC",
"supportsTokenization": true
},
"accountDetails": null,
"accountPayments": [],
"customer": {
"email": "smekiluwa@teamapt.com",
"name": "Smart Mekiliuwa"
},
"metaData": {
"deviceType": "mobile",
"ipAddress": "127.0.0.1"
}
}
}
```
```
--------------------------------
### Create Wallet
Source: https://developers.monnify.com/docs/wallets/create-wallet
Initiate a POST request to the Create Wallet API to create a new wallet. The API requires a valid customer BVN (configurable) that matches the provided date of birth. Upon successful creation, it returns a Moniepoint account number and wallet details, with the account name matching the customer name in the request.
```APIDOC
## Create Wallet
### Description
Creates a new wallet for a customer. Requires a valid BVN and date of birth. Returns a Moniepoint account number and wallet details.
### Method
POST
### Endpoint
/wallet/create
### Parameters
#### Request Body
- **bvn** (string) - Required - The customer's Bank Verification Number.
- **dateOfBirth** (string) - Required - The customer's date of birth in YYYY-MM-DD format.
- **name** (string) - Required - The full name of the customer.
- **email** (string) - Optional - The customer's email address.
- **phoneNumber** (string) - Optional - The customer's phone number.
### Request Example
```json
{
"bvn": "12345678901",
"dateOfBirth": "1990-01-01",
"name": "John Doe",
"email": "john.doe@example.com",
"phoneNumber": "+2348012345678"
}
```
### Response
#### Success Response (200)
- **accountNumber** (string) - The Moniepoint account number assigned to the wallet.
- **accountName** (string) - The name associated with the account.
- **walletId** (string) - The unique identifier for the created wallet.
- **currencyCode** (string) - The currency code for the wallet.
#### Response Example
```json
{
"accountNumber": "1234567890",
"accountName": "John Doe",
"walletId": "wallet_abc123",
"currencyCode": "NGN"
}
```
```
--------------------------------
### Bulk Transfer Initiation Response (MFA Enabled)
Source: https://developers.monnify.com/docs/disbursements/bulk-transfers
This is a sample response when MFA is enabled for a bulk transfer initiation. The batch status will be `PENDING_AUTHORIZATION`, requiring an OTP to proceed.
```json
{
"requestSuccessful": true,
"responseMessage": "success",
"responseCode": "0",
"responseBody": {
"totalAmount": 125000.00,
"totalFee": 100.00,
"batchReference": "unique-batch-ref-001",
"batchStatus": "PENDING_AUTHORIZATION",
"dateCreated": "2024-01-15T10:30:00.000+0000",
"totalTransactions": 2,
"sourceAccountNumber": "9999999999"
}
}
```
--------------------------------
### List All Single Transfers
Source: https://developers.monnify.com/docs/disbursements/single-transfers
Retrieve a paginated list of all single transfers from your account by making a GET request to the Get All Single Transactions API. Provide `pageNo` and `pageSize` as query parameters.
```cURL
curl --request GET \
--url 'https://sandbox.monnify.com/api/v2/disbursements/single/list?pageNo=0&pageSize=20' \
--header 'Authorization: Bearer {access_token}'
```
--------------------------------
### Initialize Transaction API (Backend)
Source: https://developers.monnify.com/blog/testing-pay-with-transfer-on-monnify-sandbox
Initiates a transaction from your server. Monnify returns a `checkoutUrl` for the hosted payment page and a `transactionReference` for verification or custom UI.
```APIDOC
## POST /api/v1/merchant/transactions/init-transaction
### Description
Initializes a payment transaction. This endpoint can be used to generate a checkout URL for the Monnify-hosted payment page or a transaction reference for custom UI implementations.
### Method
POST
### Endpoint
https://sandbox.monnify.com/api/v1/merchant/transactions/init-transaction
### Parameters
#### Request Body
- **amount** (number) - Required - The transaction amount.
- **customerEmail** (string) - Required - The email address of the customer.
- **customerName** (string) - Required - The name of the customer.
- **contractCode** (string) - Required - Your Monnify contract code.
- **paymentReference** (string) - Required - A unique reference for the payment.
- **currencyCode** (string) - Required - The currency code (e.g., 'NGN').
- **paymentDescription** (string) - Optional - A description for the payment.
- **redirectUrl** (string) - Optional - The URL to redirect the customer to after payment.
- **paymentMethods** (array) - Required - An array of payment methods, e.g., ["ACCOUNT_TRANSFER"].
### Request Example
```json
{
"amount": 5000,
"customerEmail": "customer@example.com",
"customerName": "John Doe",
"contractCode": "YOUR_CONTRACT_CODE",
"paymentReference": "txn_1678886400000",
"currencyCode": "NGN",
"paymentDescription": "Test Pay with Transfer",
"redirectUrl": "https://yourdomain.com/payment/callback",
"paymentMethods": ["ACCOUNT_TRANSFER"]
}
```
### Response
#### Success Response (200)
- **checkoutUrl** (string) - The URL for the Monnify-hosted payment page.
- **transactionReference** (string) - The unique reference for the transaction.
#### Response Example
```json
{
"responseBody": {
"checkoutUrl": "https://sandbox.monnify.com/pay/xyz123",
"transactionReference": "MNFY|1234567890|ABCDEF"
}
}
```
```
--------------------------------
### Sample Response for Get Transaction Status
Source: https://developers.monnify.com/docs/collections/recurring-payments
This JSON response is obtained when querying the Get Transaction Status API after a successful initial card payment. It contains the cardToken field necessary for subsequent recurring charges.
```json
{
"requestSuccessful": true,
"responseMessage": "success",
"responseCode": "0",
"responseBody": {
"transactionReference": "MNFY|85|20220121154916|000006",
"paymentReference": "1642776556694",
"amountPaid": "30.00",
"totalPayable": "30.00",
"settlementAmount": "20.00",
"paidOn": "21/01/2022 03:49:28 PM",
"paymentStatus": "PAID",
"paymentDescription": "Paying for Product A",
"currency": "NGN",
"paymentMethod": "CARD",
"product": {
"type": "WEB_SDK",
"reference": "1642776556694"
},
"cardDetails": {
"cardType": "MC Scheme",
"last4": "1608",
"expMonth": "08",
"expYear": "24",
"bin": "469667",
"bankCode": "044",
"bankName": "Access bank",
"reusable": true,
"countryCode": null,
"cardToken": "MNFY_8BA4740A8ED449E7BE404335977193AC",
"supportsTokenization": true
},
"accountDetails": null,
"accountPayments": [],
"customer": {
"email": "smekiluwa@teamapt.com",
"name": "Smart Mekiliuwa"
},
"metaData": {
"deviceType": "mobile",
"ipAddress": "127.0.0.1"
}
}
}
```
--------------------------------
### Get Sub-Accounts Created
Source: https://developers.monnify.com/docs/collections/transaction-splitting-sub-account
Retrieves a list of all sub-accounts that have been created.
```APIDOC
## Get Sub-Accounts Created
### Description
This endpoint retrieves a list of all sub-accounts created under your account.
### Method
GET
### Endpoint
/v1/sub-account
### Response
#### Success Response (200 OK)
- **subAccounts** (array) - A list of sub-account objects.
- **subAccountCode** (string) - The unique code of the sub-account.
- **accountReference** (string) - The reference provided for the sub-account.
#### Response Example
```json
{
"responseCode": "00",
"responseMessage": "Sub accounts retrieved successfully",
"data": [
{
"subAccountCode": "SAC_abcdef123456",
"accountReference": "SUBACC-REF-12345"
},
{
"subAccountCode": "SAC_ghijkl789012",
"accountReference": "SUBACC-REF-67890"
}
]
}
```
```
--------------------------------
### Initiate Bulk Transfer - cURL
Source: https://developers.monnify.com/docs/disbursements/bulk-transfers
Use this cURL command to initiate a bulk transfer. Ensure recipient account details are verified beforehand using the Name Enquiry API and bank codes are obtained from the Get Banks API. The `onValidationFailure` field can be set to `CONTINUE` or `BREAK`.
```bash
curl --request POST \
--url https://sandbox.monnify.com/api/v2/disbursements/batch \
--header 'Authorization: Bearer {access_token}' \
--header 'Content-Type: application/json' \
--data '{ \
"title": "October Salary Payment", \
"batchReference": "unique-batch-ref-001", \
"narration": "October salary disbursement", \
"sourceAccountNumber": "9999999999", \
"onValidationFailure": "CONTINUE", //or BREAK. \
"notificationInterval": 25, \
"transactionList": [ \
{ \
"amount": 50000.00, \
"reference": "unique-ref-001", \
"narration": "Salary - John Doe", \
"destinationBankCode": "058", \
"destinationAccountNumber": "0123456789", \
"destinationAccountName": "John Doe", \
"currency": "NGN" \
}, \
{ \
"amount": 75000.00, \
"reference": "unique-ref-002", \
"narration": "Salary - Jane Smith", \
"destinationBankCode": "044", \
"destinationAccountNumber": "9876543210", \
"destinationAccountName": "Jane Smith", \
"currency": "NGN" \
} \
] \
}'
```
--------------------------------
### Get Wallet Balance
Source: https://developers.monnify.com/docs/disbursements/bulk-transfers
Check the available balance in your Monnify disbursement wallet.
```APIDOC
## GET /disbursements/wallet-balance
### Description
Checks the available balance in your Monnify disbursement wallet.
### Method
GET
### Endpoint
/disbursements/wallet-balance
### Parameters
#### Query Parameters
- **accountNumber** (string) - Required - Your Monnify disbursement account number.
### Request Example
```bash
curl --request GET \
--url 'https://sandbox.monnify.com/api/v2/disbursements/wallet-balance?accountNumber=9999999999' \
--header 'Authorization: Bearer {access_token}'
```
### Response
#### Success Response (200)
- **requestSuccessful** (boolean) - Indicates if the request was processed successfully.
- **responseMessage** (string) - A message describing the response.
- **responseCode** (string) - The code indicating the response status.
- **responseBody** (object) - Contains the wallet balance details.
- **availableBalance** (float) - The currently available balance in the wallet.
- **ledgerBalance** (float) - The total balance including pending transactions.
- **accountNumber** (string) - The disbursement account number.
- **currency** (string) - The currency of the balance (e.g., NGN).
### Response Example
```json
{
"requestSuccessful": true,
"responseMessage": "success",
"responseCode": "0",
"responseBody": {
"availableBalance": 24500.00,
"ledgerBalance": 25000.00,
"accountNumber": "9999999999",
"currency": "NGN"
}
}
```
```
--------------------------------
### Get Debit Status
Source: https://developers.monnify.com/docs/collections/direct-debits
Check the debit status on a mandate using the transaction reference.
```APIDOC
## Get Debit Status
### Description
Check the debit status on a mandate.
### Method
GET
### Endpoint
`/v1/disbursements/debit/status/{transactionReference}`
### Parameters
#### Path Parameters
- **transactionReference** (string) - Required - The reference of the debit transaction.
### Response
#### Success Response (200)
- **requestSuccessful** (boolean) - Indicates if the request was successful.
- **responseMessage** (string) - A message describing the response.
- **responseCode** (string) - The response code.
- **responseBody** (object) - Contains the status of the debit transaction.
- **transactionReference** (string) - The reference for the debit transaction.
- **debitStatus** (string) - The status of the debit transaction.
- **debitDate** (string) - The date of the debit transaction.
#### Response Example
```json
{
"requestSuccessful": true,
"responseMessage": "Debit status retrieved successfully",
"responseCode": "0",
"responseBody": {
"transactionReference": "DEBITREF12345",
"debitStatus": "SUCCESSFUL",
"debitDate": "2023-10-27T10:05:00.000+00:00"
}
}
```
```
--------------------------------
### Transfer Status Response
Source: https://developers.monnify.com/docs/disbursements/single-transfers
Example response structure for a single transfer status query.
```JSON
{
"requestSuccessful": true,
"responseMessage": "success",
"responseCode": "0",
"responseBody": {
"amount": 500.00,
"reference": "unique-ref-001",
"narration": "Payment for services rendered",
"currency": "NGN",
"fee": 10.75,
"twoFaEnabled": false,
"status": "SUCCESS",
"transactionDescription": "Transfer Successful",
"transactionReference": "MONNIFY_TRX_REF_001",
"createdOn": "2024-01-15T10:30:00.000+0000",
"destinationAccountNumber": "0123456789",
"destinationAccountName": "John Doe",
"destinationBankCode": "058",
"destinationBankName": "GTBank"
}
}
```