Monnify Connector
Connector name: Monnify
Payment method type:
ng_mfy_bankInstant Account Transfer (Monnify Pay with Bank Transfer). Category bank_transfer. The customer gets a one-time virtual bank account (account number, account name, bank name) and pushes a bank transfer to it from their own banking app, internet banking or USSD.Gateway name: Monnify (gateway_rapyd_type_id / gc_type: monnify)
Supported countries and currencies: Nigeria (NG), NGN
Differences between countries: Single country (Nigeria) and single currency (NGN). No country differences.
Create payment calls Monnify directly in two steps: init-transaction, then bank-transfer init-payment. The customer is NOT redirected to a Monnify hosted page. The virtual account details are returned in textual_codes and shown by Rapyd Hosted Checkout.
Payment completion is asynchronous. The connector updates the payment from Monnify webhooks.
Minimum amount NGN 20. No maximum amount set.
Sandbox responses simulate Monnify account details.
API request | Endpoint | Unique capabilities | Limitations |
|---|---|---|---|
Create payment | | Creates a one-time Monnify virtual account and returns account_number, account_name and bank_name in textual_codes (no redirect_url). Status starts as ACT. Overpayment and underpayment are accepted: the payment closes with amount = amount actually paid. A separate Monnify contract code is used when the merchant's gateway config allows over/underpayment. | NGN only, with a minimum of NGN 20; payments cannot be canceled. |
Retrieve payment | | Returns the stored payment with textual_codes, final status and, after a successful transfer, remitter_information (payer account name, account number, bank code). The connector keeps the status fresh through Monnify webhooks and polling; there is no live gateway call on retrieve. | Status reflects the last webhook or poll, with no live gateway lookup. |
Create refund | | Full and partial refunds through the Monnify Initiate Refund API. Refund is sent back to the payer's source bank account captured from the payment webhook. If no reason is given, a configured default reason is sent (Monnify requires refundReason). Final status arrives by Monnify refund webhook. | Completed payments only; the final refund status arrives later by webhook. |
Header parameters: Standard Rapyd headers. No connector-specific headers.
Supported workflows
Bank transfers: (Payment method category bank_transfer).
Hosted Checkout: the virtual account details in textual_codes are shown on Rapyd Hosted Checkout with copy-to-clipboard.
Unique workflow: two-step virtual account creation (Monnify init-transaction, then bank-transfer init-payment). The customer leaves the Rapyd flow to make a push transfer from their own bank, and Rapyd confirms payment from the Monnify webhook or polling.
Unique workflow: overpayment / underpayment. Payment closes as CLO with amount = amount actually paid (Monnify statuses OVERPAID, UNDERPAID, PARTIALLY_PAID).
Refund workflow:
POST /v1/refundsreturns Pending; Monnify refund webhook SUCCESSFUL_REFUND/COMPLETED completes it, FAILED_REFUND/FAILED rejects it.
Create Payment - Body parameters
Nota
This table has many columns. Use the horizontal scroll bar below the table to move across and view all of the columns.
Field name | Parent field | Data type | Required or optional | Default value | Accepted values (enum) | Constraints | Description | Example | Provided by |
|---|---|---|---|---|---|---|---|---|---|
| - | number | Required | - | - | Minimum 20 (NGN). No maximum configured. | Amount to collect, in major units (naira). | 5000 | Merchant |
| - | string | Required | - | NGN | ISO 4217. Only NGN is configured on the payment. | Payment currency. | NGN | Merchant |
| | string | Required | - | | - | Payment method type for Monnify Instant Account Transfer. | | Merchant |
| | object | Optional | {} | - | No fields are defined for this payment. | Payment method fields. Send an empty object. | {} | Merchant |
| - | string or object | Required | - | Customer ID (cus_...) or customer object | Must contain name and email. | Customer making the transfer. | cus_9761f0b9d1a1bd6e9a2e1e4b5f2a0c11 | Merchant |
| | string | Required | - | - | Regex ^[0-9a-zA-Z ]{1,128}$. First and last name. | Customer full name. | Ada Obi | Merchant |
| | string | Required | - | - | Valid email, max 100 characters (regex in payment_options). | Customer email. | ada.obi@example.com | Merchant |
| - | string | Required | - | - | Regex .+. | URL the customer returns to after payment. | https://merchant.example.com/success | Merchant |
| - | string | Required | - | - | Regex .+. | URL the customer returns to if an error occurs. | https://merchant.example.com/error | Merchant |
| - | string | Optional | - | - | - | Payment description. | Order 10045 | Merchant |
| - | string | Optional | - | - | - | Merchant's own order reference. | ORDER-10045 | Merchant |
| - | number | Optional | - | - | Unix timestamp. Values beyond 1800 seconds from now are capped to 30 minutes. | Payment expiry time. | 1760705400 | Merchant |
| - | object | Optional | - | - | - | Merchant metadata. | {"order_id": "10045"} | Merchant |
Create Payment / Retrieve Payment - Response parameters
Nota
This table has many columns. Use the horizontal scroll bar below the table to move across and view all of the columns.
Field name | Parent field | Data type | Values (enum) | Description | Example | Provided by |
|---|---|---|---|---|---|---|
| - | string | - | Rapyd payment ID. | payment_3f1b7f0c2a9d4e5f8a6b1c2d3e4f5a6b | Rapyd |
| - | string | ACT, CLO, EXP, ERR | Payment status. | ACT | Gateway |
| - | number | - | Amount. After completion this is the amount actually paid. | 5000 | Gateway |
| - | number | - | Amount requested by the merchant. | 5000 | Merchant |
| - | string | NGN | Currency. | NGN | Merchant |
| - | string | | Payment method type. | | Carried over |
| - | string | bank_transfer | Payment category. | bank_transfer | Rapyd |
| | string | - | Virtual account number the customer must pay into. | 5000123456 | Gateway |
| | string | - | Name on the virtual account. | Merchant Store - Ada Obi | Gateway |
| | string | - | Bank that holds the virtual account. | Wema bank | Gateway |
| - | array | - | Static payment steps configured on the payment. | - | Rapyd |
| - | string | - | Not used for this payment. | - | Rapyd |
| - | number | - | Payment expiry time. | 1760705400 | Rapyd |
| - | boolean | true, false | Whether the payment is completed. | false | Gateway |
| - | number | - | Time of payment. | 0 | Gateway |
| - | string | - | Gateway failure code. | - | Gateway |
| - | string | - | Gateway failure message. | - | Gateway |
| | string | - | Name on the payer's bank account. | ADA OBI | Gateway |
| | string | - | Payer's bank account number. | 0123456789 | Gateway |
| | string | - | Payer's bank code. | 058 | Gateway |
| - | string | - | Merchant reference. | ORDER-10045 | Merchant |
| - | string | - | Customer ID. | cus_9761f0b9d1a1bd6e9a2e1e4b5f2a0c11 | Rapyd |
| - | string | - | Return URL. | https://merchant.example.com/success | Merchant |
| - | string | - | Error URL. | https://merchant.example.com/error | Merchant |
Create Refund - Body parameters
Nota
This table has many columns. Use the horizontal scroll bar below the table to move across and view all of the columns.
Field name | Parent field | Data type | Required or optional | Default value | Accepted values (enum) | Constraints | Description | Example | Provided by |
|---|---|---|---|---|---|---|---|---|---|
| - | string | Required | - | - | Must be a completed (CLO) | ID of the payment to refund. | payment_3f1b7f0c2a9d4e5f8a6b1c2d3e4f5a6b | Merchant |
| - | number | Optional | Full remaining amount | - | Cannot exceed the remaining refundable amount. | Refund amount. Partial refunds are supported. | 2000 | Merchant |
| - | string | Optional | Payment currency | NGN | - | Refund currency. | NGN | Merchant |
| - | string | Optional | Configured default refund reason | - | - | Reason for the refund. | Customer returned item | Merchant |
| - | string | Optional | - | - | - | Merchant refund reference. | REFUND-10045 | Merchant |
| - | object | Optional | - | - | - | Merchant metadata. | {} | Merchant |
Create Refund - Response parameters
Nota
This table has many columns. Use the horizontal scroll bar below the table to move across and view all of the columns.
Field name | Parent field | Data type | Values (enum) | Description | Example | Provided by |
|---|---|---|---|---|---|---|
| - | string | - | Rapyd refund ID. | refund_7a1c2e3f4b5d6e7f8a9b0c1d2e3f4a5b | Rapyd |
| - | string | - | Refunded payment ID. | payment_3f1b7f0c2a9d4e5f8a6b1c2d3e4f5a6b | Merchant |
| - | number | - | Refund amount. | 2000 | Merchant |
| - | string | NGN | Refund currency. | NGN | Merchant |
| - | string | Pending, Completed, Rejected | Refund status. | Pending | Gateway |
| - | string | - | Refund reason. | Customer returned item | Merchant |
| - | string | - | Merchant refund reference. | REFUND-10045 | Merchant |
| - | string | - | Gateway failure message when the refund fails at creation. | - | Gateway |
This section shows how PayU Africa (Magellan API) fields, values and behavior relate to the Rapyd fields in the field mapping tables.
Nota
Payment method type ng_mfy_bank: In PayU Africa this method was called PAY_BY_REFERENCE.
Field mapping (Rapyd field to original PayU field)
Create Payment - Body parameters
Rapyd field name | Original PayU field |
|---|---|
| |
| |
| |
| None |
| |
| |
| |
| |
| |
| |
| |
| None (PayU store setting Monnify Expiry Time, 40 minutes) |
| None |
Accepted values mapping
Field name | Original PayU value | Rapyd value |
|---|---|---|
| PAY_BY_REFERENCE | |
| NGN | NGN |
| Basket.amountInCents 500000 | 5000 |
Create Payment / Retrieve Payment - Response parameters
Rapyd field name | Original PayU field |
|---|---|
| None |
| |
| |
| |
| |
| PAY_BY_REFERENCE |
| None |
| None (shown on the PayU payment page) |
| None (shown on the PayU payment page) |
| None (shown on the PayU payment page) |
| None |
| None |
| None |
| (getTransaction) |
| None |
| |
| |
| |
| |
| None |
| |
| |
| |
| |
Accepted values mapping
Field name | Original PayU value | Rapyd value |
|---|---|---|
| SUCCESSFUL | CLO |
| EXPIRED (result code EXPIRED) | EXP |
| EXPIRED (result code USER_CANCELLED) | CAN |
| FAILED (result code PROCESSED_FAILURE) | REV |
| PROCESSING | NEW or other unrecognized status |
Create Refund - Body parameters
Rapyd field name | Original PayU field |
|---|---|
| |
| |
| |
| None |
| |
| None |
Create Refund - Response parameters
Rapyd field name | Original PayU field |
|---|---|
| None |
| |
| |
| |
| |
| None |
| |
| None |
Create payment (POST /v1/payments)
Request
curl -X POST 'https://sandboxapi.rapyd.net/v1/payments' \ -H 'access_key: <your_access_key>' \ -H 'Content-Type: application/json' \ -H 'idempotency: <unique_key>' \ -H 'salt: <random_salt>' \ -H 'signature: <calculated_signature>' \ -H 'timestamp: <unix_timestamp>' \ --data '{ "amount": 5000, "currency": "NGN", "payment_method": { "type": "ng_mfy_bank", "fields": {} }, "customer": "cus_9761f0b9d1a1bd6e9a2e1e4b5f2a0c11", "description": "Order 10045", "merchant_reference_id": "ORDER-10045", "complete_payment_url": "https://merchant.example.com/success", "error_payment_url": "https://merchant.example.com/error" }'
Response
{ "status": { "error_code": "", "status": "SUCCESS", "message": "", "response_code": "", "operation_id": "<operation_id>" }, "data": { "id": "payment_3f1b7f0c2a9d4e5f8a6b1c2d3e4f5a6b", "amount": 5000, "original_amount": 5000, "currency_code": "NGN", "status": "ACT", "paid": false, "paid_at": 0, "description": "Order 10045", "merchant_reference_id": "ORDER-10045", "customer_token": "cus_9761f0b9d1a1bd6e9a2e1e4b5f2a0c11", "payment_method_type": "ng_mfy_bank", "payment_method_type_category": "bank_transfer", "payment_method_data": {}, "redirect_url": "", "complete_payment_url": "https://merchant.example.com/success", "error_payment_url": "https://merchant.example.com/error", "expiration": 1760705400, "instructions": [ { "name": "instructions", "steps": [ { "step1": "Instant Account Transfer is a payment service that allows you to pay into the Merchant's Account via your bank's USSD, Internet banking or Mobile banking.", "step2": "Transfer into the Merchant's Account via your bank's USSD, Internet Banking or Mobile banking.", "step3": "Please ensure the exact amount stated is paid, paying below the stated amount will result in transaction failure", "step4": "Please note that this payment option will expire if the transfer is not completed in time." } ] } ], "textual_codes": { "account_number": "5000123456", "account_name": "Merchant Store - Ada Obi", "bank_name": "Wema bank" }, "visual_codes": {}, "failure_code": "", "failure_message": "", "remitter_information": {}, "metadata": {} } }
Retrieve payment after the transfer (GET /v1/payments/{payment})
Request
curl -X GET 'https://sandboxapi.rapyd.net/v1/payments/payment_3f1b7f0c2a9d4e5f8a6b1c2d3e4f5a6b' \ -H 'access_key: <your_access_key>' \ -H 'Content-Type: application/json' \ -H 'salt: <random_salt>' \ -H 'signature: <calculated_signature>' \ -H 'timestamp: <unix_timestamp>'
Response
{ "status": { "error_code": "", "status": "SUCCESS", "message": "", "response_code": "", "operation_id": "<operation_id>" }, "data": { "id": "payment_3f1b7f0c2a9d4e5f8a6b1c2d3e4f5a6b", "amount": 5000, "original_amount": 5000, "currency_code": "NGN", "status": "CLO", "paid": true, "paid_at": 1760704100, "description": "Order 10045", "merchant_reference_id": "ORDER-10045", "customer_token": "cus_9761f0b9d1a1bd6e9a2e1e4b5f2a0c11", "payment_method_type": "ng_mfy_bank", "payment_method_type_category": "bank_transfer", "payment_method_data": {}, "redirect_url": "", "complete_payment_url": "https://merchant.example.com/success", "error_payment_url": "https://merchant.example.com/error", "expiration": 1760705400, "instructions": [ { "name": "instructions", "steps": [ { "step1": "Instant Account Transfer is a payment service that allows you to pay into the Merchant's Account via your bank's USSD, Internet banking or Mobile banking.", "step2": "Transfer into the Merchant's Account via your bank's USSD, Internet Banking or Mobile banking.", "step3": "Please ensure the exact amount stated is paid, paying below the stated amount will result in transaction failure", "step4": "Please note that this payment option will expire if the transfer is not completed in time." } ] } ], "textual_codes": { "account_number": "5000123456", "account_name": "Merchant Store - Ada Obi", "bank_name": "Wema bank" }, "visual_codes": {}, "failure_code": "", "failure_message": "", "remitter_information": { "name": "ADA OBI", "account_id": "0123456789", "bank_code": "058" }, "metadata": {} } }
Create refund (POST /v1/refunds)
Request
curl -X POST 'https://sandboxapi.rapyd.net/v1/refunds' \ -H 'access_key: <your_access_key>' \ -H 'Content-Type: application/json' \ -H 'idempotency: <unique_key>' \ -H 'salt: <random_salt>' \ -H 'signature: <calculated_signature>' \ -H 'timestamp: <unix_timestamp>' \ --data '{ "payment": "payment_3f1b7f0c2a9d4e5f8a6b1c2d3e4f5a6b", "amount": 2000, "currency": "NGN", "reason": "Customer returned item", "merchant_reference_id": "REFUND-10045" }'
Response
{ "status": { "error_code": "", "status": "SUCCESS", "message": "", "response_code": "", "operation_id": "<operation_id>" }, "data": { "id": "refund_7a1c2e3f4b5d6e7f8a9b0c1d2e3f4a5b", "payment": "payment_3f1b7f0c2a9d4e5f8a6b1c2d3e4f5a6b", "amount": 2000, "currency": "NGN", "status": "Pending", "reason": "Customer returned item", "merchant_reference_id": "REFUND-10045", "payment_method_type": "ng_mfy_bank", "failure_reason": "", "metadata": {}, "created_at": 1760704500 } }