### 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" } } ```