Forex Wallet-to-Wallet Transfer
Transfers funds between two forex wallets on the same card. For example, converting USD to SGD or EUR to GBP.
How It Works
- Specify source and target wallet names
- Amount is debited from the source wallet
- Converted amount is credited to the target wallet
- Exchange rate is applied based on the current interbank rate (IBR)
Rate Types
| Type | Description |
|---|---|
IBR | Interbank Rate — standard market rate |
CRD | Card Rate — rate configured for the product |
Response Structure
Returns a detailed breakdown:
- source: Debit details with pre/post balance
- destination: Credit details with pre/post balance
- conversionInfo: Exchange rate, markup, fees, gross amount
Authorization
bearerAuth tenantId JWT Bearer token from the Authentication API
In: header
Your unique tenant identifier assigned during onboarding
In: header
Header Parameters
Your unique tenant identifier
Request Body
application/json
Required. Card kit number
1 <= lengthRequired. Amount to transfer from source wallet
0 <= valueRequired. Source wallet currency name
1 <= lengthRequired. Target wallet currency name
1 <= lengthExchange rate type: IBR = Interbank Rate, CRD = Card Rate
Response Body
application/json
application/json
application/json
curl -X POST "https://sandbox-api.m2pprepaid.com/prepaid/customer/v2/customers/forex/transfer" \ -H "X-TENANT-ID: ACME_CORP" \ -H "Content-Type: application/json" \ -d '{ "kitNo": "20006085", "amount": 25, "sourceWalletName": "USD", "targetWalletName": "SGD", "rateType": "IBR" }'{
"result": {
"txnId": "6226188908925145002086051761654802652",
"entityId": "615928984620006085281025",
"kitNo": "20006085",
"txnOrigin": "WEB",
"source": {
"amount": "-25.0",
"preBalance": "500.0",
"postBalance": "475.0",
"transactionType": "W2W_FOREX_DEBIT",
"transactionStatus": "SUCCESS",
"externalTransactionId": "6226188908925145002086051761654802652_DEBIT",
"transactionCurrencyCodeName": "USD",
"crDr": "D"
},
"destination": {
"amount": "32.98",
"preBalance": "0",
"postBalance": "32.98",
"transactionType": "W2W_FOREX_CREDIT",
"transactionStatus": "SUCCESS",
"externalTransactionId": "6226188908925145002086051761654802652_CREDIT",
"transactionCurrencyCodeName": "SGD",
"exchangeRate": 1.319385,
"crDr": "C"
},
"conversionInfo": {
"conversionRate": 1.319385,
"convertedAmount": 32.98,
"markUpAmount": 0,
"markUpServiceTax": 0,
"txnFees": 0,
"serviceTax": 0,
"grossConvertedAmount": 32.98
}
},
"pagination": null
}{
"type": "https://www.m2pfintech.com/problem/problem-with-message",
"title": "Bad Request",
"status": 400,
"detail": "Unable to convert http message",
"message": "error.http.400"
}{
"type": "https://www.m2pfintech.com/problem/problem-with-message",
"title": "Source Wallet does not exists for id :USD",
"status": 409,
"detail": "Source Wallet does not exists for id :USD",
"message": "error.business",
"businessCode": "PPCUST_002"
}Fetch Transaction History POST
Retrieves transaction history for a cardholder filtered by entity ID, date range, mobile number, or kit number. Supports pagination. ### When to Use - Display transaction history in your app or portal - Reconciliation and settlement reporting - Customer support — look up recent transactions ### Filters - **entityId** (required): Cardholder's entity identifier - **fromDate / toDate**: Date range filter (format: dd-mm-yyyy) - **kit**: Filter by specific card kit number - **mobile**: Filter by mobile number - **accountId**: Filter by specific wallet/account - **success**: Set to `true` to return only successful transactions - **isOffline**: Set to `true` to include offline transactions ### Response Structure Returns a paginated list of transactions with details including amount, type, merchant info, pre/post balance, exchange rates, and status.
Forex Transfer Check (Preview) POST
Previews a forex wallet-to-wallet transfer **without executing it**. Returns the exchange rate, converted amount, fees, and markup that would apply. ### When to Use - Show the customer a transfer preview before confirmation - Calculate the exchange rate and fees for display - Validate that the transfer is possible (sufficient balance, valid wallets) ### Note The rates returned are indicative and may change slightly when the actual transfer is executed, as forex rates fluctuate in real-time.
