Initiate Exchange
Before creating an exchange, you must first fetch a rate from the utility endpoint/utility/exchange-rate. The _id from that response is required as the offerId parameter when creating the exchange. See the Get Rate guide for more details.
When making an exchange, the initiating currency — the one the user is giving or has — is represented by buyerDebit, while the target currency — the one the user is receiving or wants — is represented by buyerCredit.
The request body requires the following fields:
| Field | Required | Description |
|---|---|---|
amount | Yes | The amount in the initiating (debit) currency. Conversion into the credit currency is calculated based on current exchange rates and applicable fees. |
buyerDebitPaymentMethod | Yes | How the user will send funds. |
buyerCreditPaymentMethod | Yes | How the user will receive funds. |
buyerDebitPaymentDetails | Conditional | Required unless buyerDebitPaymentMethod is WALLET. |
buyerCreditPaymentDetails | Conditional | Required unless buyerCreditPaymentMethod is WALLET. |
narration | No | A custom note or description attached to the transaction. |
buyerDebitPaymentDetails and buyerCreditPaymentDetails depends on the payment method specified in their corresponding buyerCredit or buyerDebit PaymentMethod fields.
Supported Payment Methods
1. BANK_TRANSFER
Typically used for currencies such asNGN, USD, GBP, EUR, CAD, etc.
Required fields: accountName, accountNumber, bankCode, providerName, currency, iso2, paymentMethod
Additional required fields (GBP & EUR only): holderPostalCode, holderCity, holderStreet
Notes:
- The
bankCodefield is required. Thenetworkfield must be omitted. - For
NGN,providerNameshould be the name of the bank (e.g., Access Bank, GTBank). - For currencies that use routing or sort codes (e.g.,
USD,GBP,EUR),bankCodeshould contain the appropriate routing/sort code, andproviderNameshould be the same asbankCode. - For
GBPandEUR, the additional address fields (holderPostalCode,holderCity,holderStreet) are mandatory. - For
NGNandCNY, fetch supported banks and theirbankCodevalues from the utility endpoint:/transaction/{method}/providers(replace{method}withBANK_TRANSFER). - To perform account name verification for
NGNbank transfers, call:/transaction/verify-bank-account.
2. MOBILE_MONEY
Typically used for currencies such asGHS, MWK, KES, XOF, UGX, etc.
Required fields: accountName, accountNumber, network, providerName, currency, iso2, paymentMethod
Notes:
- The
bankCodefield must be omitted. Thenetworkfield is required and must matchproviderName(e.g., MTN, Airtel, Vodafone). - To fetch supported mobile money providers for a specific country, call:
/transaction/{method}/providers(replace{method}withMOBILE_MONEY). - The response lists all supported provider networks that can be used for both
buyerDebitPaymentDetailsandbuyerCreditPaymentDetails.
3. ZELLE
Used for U.S.-based bank transfers via Zelle. Required fields:accountName, email, currency, iso2, paymentMethod
Notes:
- This is an email-based payment method. The email address must belong to a valid Zelle-enabled U.S. bank account.
bankCodeandnetworkfields should be omitted.
4. INTERAC
Used for Canadian email-based transfers via Interac e-Transfer. Required fields:accountName, email, currency, iso2, paymentMethod
Notes:
- This is also an email-based payment method. Only supported for
CADcurrency. bankCodeandnetworkfields should be omitted.
5. STABLE_CURRENCY
Used for blockchain-based stablecoin transfers such asUSDT, USDC, or BUSD.
Required fields: walletAddress, network, currency, iso2, paymentMethod
Notes:
- Valid networks are:
TRC20,ERC20,BEP20,SOL, andTON. - The
currencyfield must be one of:USDT,USDC, orBUSD. Theiso2field should match thecurrencyfield. bankCode,accountName, andemailshould not be included.- For
buyerDebitPaymentDetails, thewalletAddressis the wallet address you are sending funds from. - For the
networkfield: when you initiate the exchange by calling/utility/exchange-rate, the response body contains apaymentDetailsobject — thenetworkvalue in that object is the network you should send from.
6. ALIPAY
Used for Chinese Yuan (CNY) payments via Alipay.
Required fields: accountName, phoneNumber, currency, iso2, paymentMethod
Notes:
- Supported only for
CNYcurrency. phoneNumberrepresents the user’s Alipay account identifier.bankCode,network, andemailfields must be omitted.
7. WECHAT_PAY
Used for Chinese Yuan (CNY) payments via WeChat Pay.
Required fields: accountName, phoneNumber, currency, iso2, paymentMethod
Notes:
- Supported only for
CNYcurrency. phoneNumberrepresents the user’s WeChat Pay account identifier.bankCode,network, andemailfields must be omitted.
Additional Notes
- These field requirements apply to both
buyerDebitPaymentDetailsandbuyerCreditPaymentDetails. - Ensure that payment details align with the selected payment method and currency to enable accurate routing and settlement.
- Some payment methods and required fields are currency-dependent. Always verify that the selected payment method is valid for the chosen currency.
- For
BANK_TRANSFERandMOBILE_MONEY, always fetch provider data from/transaction/{method}/providersto ensure valid and up-to-date options. - Invalid or mismatched field combinations (e.g., providing
bankCodeforMOBILE_MONEY) will result in validation errors.
Request Body
Response
A successful request returns aPENDING exchange order. The sellerCreditPaymentDetails object contains Monirates’ receiving account — this is where the buyer should send funds.
Key Response Fields
| Field | Description |
|---|---|
_id | The unique ID of the created exchange order. |
status | Will be PENDING on creation. |
sellerCreditPaymentDetails | Monirates’ receiving account. The buyer must send funds to this account to proceed. |
paymentReferenceCode | A reference code for this transaction. |
buyerMadePayment | Indicates whether the buyer has confirmed payment. Starts as false. |
proceed to the Payment Made guide.

