Integrating Monnify

Power your platform with bank-grade security and seamless checkout experiences

Integrating Via Code: APIs, SDKs and Plugins

Build your own native experience.

If your platform requires flexibility, our code options for integrating give you the keys to the engine. You get to offer your customers access to pay via Bank Transfer, Cards, USSD, and Phone Number.


Choose Your Code Integration Stack

Choose the tool that fits your platform:

  1. Direct APIs: For backend control and custom UIs.
  2. Mobile SDKs (Native & Cross-Platform): Accept cards, bank transfers, and USSD directly inside your mobile app without forcing users into a web browser.
  3. Android SDK: Native performance for your Android apps.
  4. iOS SDK: Seamless Apple integration via CocoaPods.
  5. Flutter SDK: Cross-platform efficiency. Write once, collect payments everywhere.

3. Web SDK & Framework Wrappers:

  1. Vanilla Web SDK: The classic, lightweight <script> drop-in for any HTML/JS site.
  2. Modern Wrappers: We maintain official wrappers for Javascript and TypeScript on NPM, ensuring your integration plays perfectly with your modern front-end framework like React.

4. CMS & E-Commerce Plugins:

  1. WooCommerce/ WordPress Plugin: Turn your blog or store into a payment powerhouse instantly.
  2. WHMCS: Automate your web hosting or IT billing effortlessly.



Ready to Build?

  1. Grab your API Key and Contract Code from your Monnify Dashboard.
  2. Ensure your dashboard toggle on the top-right corner is set to Test Mode (Orange toggle).
  3. Dive into our Developer Documentation to read the doc for your specific stack.
Last Updated on : 4/6/2026

Sandbox vs Production Environments

To build safely and test edge cases, you will start your integration in our Test (Sandbox) environment. Ensure your codebase points to the correct Base URL:

  1. Test Environment (Sandbox): https://sandbox.monnify.com
  2. Live Environment (Production): https://api.monnify.com


Developer Note: One of the most common errors is using Sandbox API Keys while pointing your code to the Live Base URL. Always double-check your environment variables.

Last Updated on : 4/6/2026

How to Automate Bulk Payouts Without OTPs

By default, Monnify requires an OTP (One-Time Password) for every payout attempt. This provides an excellent layer of manual security for businesses doing occasional transfers.

However, if your team is building an automated system like a payroll processor or a bulk vendor disbursement flow, requiring a manual OTP for every transaction will break your automation.

  1. The Fix: Send an email to our Integration Support team requesting that we waive OTPs for your account.


Email Template for Requesting an OTP Waiver

Note: For security reasons, an OTP waiver must be requested directly by the business owner or the primary technical admin.

Using the template below, send an email to our Integration Support team from the email address linked to your Monnify account:

  1. Send to: [email protected]
  2. Subject: Request for Payout OTP Waiver: [Your Business Name]
  3. Body:

Hello Monnify Compliance & Support Team,

We are currently integrating the Monnify Disbursement API and we are officially requesting a waiver for the Payout OTP requirement on our account.

Here are our details for verification:

  1. Registered Business Name: [Your Business Name]
  2. Contract Code: [Your Contract Code]
  3. Whitelisted IP Address: [Your Server IP Address]

We confirm that we have implemented server-side IP Whitelisting. We understand and accept that removing the OTP layer means any disbursement requests originating from our whitelisted IP address and authenticated with our API keys will be processed automatically.

We also indemnify Monnify for usage and misuse of the feature.

Kindly let us know once the waiver has been applied so our engineering team can finalize the live integration.

Best regards,

[Your Name]

[Your Role/Title]


Last Updated on : 4/6/2026

How to Resolve Payments Made to an Expired Account

Dynamic virtual accounts and one-time invoices are designed for speed and security. Due to this, they come with a strict validity window.

But what happens if a customer makes payment after expiry?

Here is how Monnify handles late payments, and how you can resolve them without losing the sale.



What Happens to the Transaction?

When a customer pays after the expiry of a Monnify virtual account or dynamic invoice, the payment is treated as an invalid transaction.

  1. Not successful: The system will not recognize the payment as successful. It is treated as a failed or invalid transaction because the account number is no longer active.
  2. No Value Delivered: Because the invoice is closed, your automated system will not confirm the order, and the customer will not receive their goods or services.
  3. Funds are Reversed: In most cases, the banking network will instantly reject the transfer, and the funds will automatically reverse back to the customer's source account.

To actually complete the order, your customer has to generate a new invoice or payment link. Never ask the customer to try paying into the expired account again.



Best Practices to Prevent Expired Payments

Stop late payments before they happen by optimizing your checkout flow:

  1. Communicate the Urgency: Add a simple warning: "This account number expires in 30 minutes. Do not save for later use."
  2. Upgrade to Reserved Accounts: If you have repeat customers who pay you frequently, stop using one-off dynamic accounts. Assign them a Reserved Account. Read more about Reserved Accounts.
  3. Connect with Your Webhooks: Ensure your backend is actively listening for the EXPIRED webhook status. If you receive this status, your frontend should immediately hide the account number and prompt the user to "Generate a New Payment Method."


Last Updated on : 4/6/2026

Monnify Webhooks: Events, Security, Timeout and Indempotency

Your server shouldn't use up resources constantly asking Monnify if a transaction is completed. Instead, Monnify uses Webhooks to actively notify your server once a transaction is executed.


Supported Webhook Events

An “event” refers to the change in status of a request. Monnify will push real-time responses to your server for the following events:

  1. Successful Payment
  2. Payouts (Disbursements): Successful Disbursement, Failed Disbursement, Reversed Disbursement.
  3. Refunds: Successful Refund, Failed Refund.
  4. Settlements & Wallets: Settlement Completion (successful transfers to your bank account), Wallet Activity Notification (credits and debits to your Main or Sub-Wallets).
  5. Mandate Status Change (e.g., from PENDING to ACTIVATED, FAILED, or CANCELLED).



Security when Dealing with Webhooks

When your server receives a webhook, you must verify that it actually came from Monnify before processing any value. You have to implement these two security layers:

  1. Verify the Webhook Signature: Every valid webhook contains a signature header. You must hash the payload using your Client Secret Key and ensure it matches the signature sent in the header.
  2. IP Whitelisting: To prevent bad actors from sending fake requests to your webhook URL, you must whitelist our exact IP address on your server. Monnify webhook notifications will only come from this IP: 35.242.133.146. Drop requests from any other origin.



Acknowledgement & Timeouts

When Monnify sends a webhook, we wait for your server to acknowledge that it was received.

  1. You must acknowledge receipt of the webhook by returning a standard 200 OK HTTP status code.
  2. Monnify webhook requests time out within a few seconds. If your server is doing heavy background processing (like generating PDF receipts or querying slow databases) before sending the 200 OK response, the Monnify server may time out.
  3. If we do not get the expected response, we assume you did not receive the webhook and will retry after 5 minutes.

Best Practice: Receive the webhook, verify the authenticity, return the 200 OK response while delegating your heavy processing in the background.



Idempotency (Handling Duplicates)

Sometimes, network fluctuations happen so your system could receive duplicate webhooks for the exact same transaction. Here’s how to handle such:

  1. When you receive a new webhook, always check to ensure that event has not been processed.
  2. If you have already processed that event, disregard it. However, you must still return the expected status code so Monnify knows to stop retrying.


Pro-Tip for Developers: We heavily advise caching your processed notifications or maintaining a strict "Processed Transactions" log in your database to make these duplicate checks fast.

Last Updated on : 4/6/2026

No-Code Integration: Payment Links

Last Updated on : 4/6/2026

Monnify Integration methods and How to Choose Yours

Not sure which integration method fits your team? Merchants and developers often choose their path based on technical capacity, customization needs, and desired speed to market.


Choose the path that best fits your current setup:

1. No-Code: Payment Links

  1. Best for: Non-technical team, simple service businesses, or teams that want to start collecting payments immediately
  2. How It Works: Maximum speed, zero coding required. You generate links directly from your dashboard and share them with customers via WhatsApp, other social media platforms, or email


2. Code: Mobile SDKs, Web SDKs, Plugins, Direct APIs

  1. Best for: Technical teams who want flexibility, custom checkout UIs, or backend services.
  2. How It Works: You build exactly what you want, and Monnify securely processes the funds in the background.
Last Updated on : 4/6/2026