Mobile Money Transfer
Learn how to transfer money directly from your available balance to a mobile money account.
Getting Started
We recommend checking out the introductory section to understand the basics of making transfers first.
Mobile money transfers work the same as regular bank account transfers. The key difference is that the account_number is the mobile number on the account (including the country code, like "233"), while the account_bank is a code representing the mobile money operator (for example, "MPS" for M-Pesa). A beneficiary_name is also required so we can identify this account in your list of beneficiaries.
Kenya (M-PESA)
Mobile Money Kenya (M-Pesa) requires you to include the sender's full name as
sender, the sender's country assender_countryand the sender's mobile number asmobile_numberin themetaobject. See Initiate a Transfer for specification
Supported Networks
Here's a list of the currently supported countries and available networks for mobile money:
| Countries/Currencies | Mobile Money options |
|---|---|
| Cameroon (XAF) | MTN, ORANGEMONEY |
| Cote d'Ivoire (XOF) | MOOV, MTN, ORANGE, WAVE |
| Ethiopia (ETB) | AMOLEMONEY |
| Ghana (GHS) | AIRTELTIGO, MTN, VODAFONE |
| Kenya (KES) | M-Pesa (MPS) |
| Rwanda (RWF) | AIRTEL, MTN |
| Senegal (XOF) | ORANGEMONEY, WAVE |
| Tanzania (TZS) | AIRTEL, HALOPESA, TIGO, VODACOM |
| Uganda (UGX) | AIRTEL, MTN |
| Zambia (ZMW) | MPS |
Here's an example of a mobile money transfer:
const details = {
account_bank: "MPS",
account_number: "2540782773934",
amount: 1200,
currency: "KES",
beneficiary_name: "Akinyi Kimwei",
meta: {
"sender": "Flutterwave Developers",
"sender_country": "ZA",
"mobile_number": "23457558595"
}
};
await flw.Transfer.initiate(details)
$details = array(
"account_bank" => "MPS",
"account_number" => "2540782773934",
"amount" => 1200,
"currency" => "KES",
"beneficiary_name" => "Akinyi Kimwei",
"meta" => array(
"sender": "Flutterwave Developers",
"sender_country": "ZA",
"mobile_number": "23457558595"
)
);
$response = $transferService->singleTransfer($details);
details = {
account_bank: "MPS",
account_number: "2540782773934",
amount: 1200,
currency: "KES",
beneficiary_name: "Akinyi Kimwei",
meta: {
"sender": "Flutterwave Developers",
"sender_country": "ZA",
"mobile_number": "23457558595"
}
}
response = transfer.initiate_transfer details
details = {
"account_bank": "MPS",
"account_number": "2540782773934",
"amount": 1200,
"currency": "KES",
"beneficiary_name": "Akinyi Kimwei",
"meta": {
"sender": "Flutterwave Developers",
"sender_country": "ZA",
"mobile_number": "23457558595"
}
}
res = rave.Transfer.initate(details)
details := rave.SinglePaymentData {
AccountBank: "flutterwave",
AccountNumber: "00118468",
Amount: 1200,
Currency: "KES",
BeneficiaryName: "Akinyi Kimwei"
}
err, response := transfer.InitiateSingleTransfer(details)
curl --request POST 'https://api.flutterwave.com/v3/transfers' \
--header 'Authorization: Bearer YOUR_SECRET_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
account_bank: "MPS",
account_number: "2540782773934",
amount: 1200,
currency: "KES",
beneficiary_name: "Akinyi Kimwei",
meta: {
"sender": "Flutterwave Developers",
"sender_country": "ZA",
"mobile_number": "23457558595"
}
}'
Here's an example of the response you'll get:
{
"status": "success",
"message": "Transfer Queued Successfully",
"data": {
"id": 127886,
"account_number": "2540782773934",
"bank_code": "MPS",
"full_name": "Flutterwave Developers",
"created_at": "2020-06-25T14:03:51.000Z",
"currency": "KES",
"amount": 50,
"fee": 45,
"status": "NEW",
"reference": "mk-902837-jk",
"meta": null,
"narration": "New transfer",
"complete_message": "",
"requires_approval": 0,
"is_approved": 1,
"bank_name": "FA-BANK"
}
}
{
"status": "success",
"message": "Transfer Queued Successfully",
"data": {
"id": 127890,
"account_number": "250780411008",
"bank_code": "FMM",
"full_name": "Flutterwave Developers",
"created_at": "2020-06-25T14:11:45.000Z",
"currency": "XAF",
"amount": 50,
"fee": 500,
"status": "NEW",
"reference": "new-franco-momo-test-transfer",
"meta": null,
"narration": "New franco transfer",
"complete_message": "",
"requires_approval": 0,
"is_approved": 1,
"bank_name": "FA-BANK"
}
}
{
"status": "success",
"message": "Transfer Queued Successfully",
"data": {
"id": 217647,
"account_number": "2217857532",
"bank_code": "FREEMONEY",
"full_name": "Taju Afobaje",
"created_at": "2023-06-23T12:32:32.000Z",
"currency": "XOF",
"debit_currency": "XOF",
"amount": 100,
"fee": 2,
"status": "NEW",
"reference": "TRF-21928319023-231202",
"meta": [
{
"Sender": "Agba Tester",
"SenderCountry": "NG",
"SenderAddress": "Lagos",
"SenderMobileNumber": "+2348100001201"
}
],
"narration": "MoMo Transfer to Senegal",
"complete_message": "",
"requires_approval": 0,
"is_approved": 1,
"bank_name": "FA-BANK"
}
}
{
"status": "success",
"message": "Transfer Queued Successfully",
"data": {
"id": 127889,
"account_number": "233542773934",
"bank_code": "MTN",
"full_name": "Flutterwave Developers",
"created_at": "2020-06-25T14:09:42.000Z",
"currency": "RWF",
"amount": 50,
"fee": 45,
"status": "NEW",
"reference": "new-rwf-momo-transfer",
"meta": null,
"narration": "New RWF momo transfer",
"complete_message": "",
"requires_approval": 0,
"is_approved": 1,
"bank_name": "FA-BANK"
}
}
{
"status": "success",
"message": "Transfer Queued Successfully",
"data": {
"id": 127894,
"account_number": "233542773934",
"bank_code": "MPS",
"full_name": "Flutterwave Developers",
"created_at": "2020-06-25T14:39:16.000Z",
"currency": "UGX",
"amount": 50,
"fee": 500,
"status": "NEW",
"reference": "ugx-momo-transfer",
"meta": null,
"narration": "UGX momo transfer",
"complete_message": "",
"requires_approval": 0,
"is_approved": 1,
"bank_name": "FA-BANK"
}
}
{
"status": "success",
"message": "Transfer Queued Successfully",
"data": {
"id": 222401,
"account_number": "26586644477755",
"bank_code": "AIRTELMW",
"full_name": "Dora Explorer",
"created_at": "2024-02-06T16:27:14.000Z",
"currency": "MWK",
"debit_currency": "NGN",
"amount": 100000,
"fee": 350003.5,
"status": "NEW",
"reference": "9dc2de49014ad188",
"meta": null,
"narration": "ecobank mw test",
"complete_message": "",
"requires_approval": 0,
"is_approved": 1,
"bank_name": "Airtel Malawi"
}
}
{
"status": "success",
"message": "Transfer Queued Successfully",
"data": {
"id": 8773850,
"account_number": "250780411008",
"bank_code": "MPS",
"full_name": "Flutterwave Developers",
"created_at": "2021-05-14T16:01:31.000Z",
"currency": "ZMW",
"amount": 50,
"fee": 1.5,
"status": "NEW",
"reference": "new-ZMW-momo-test-transfer",
"meta": null,
"narration": "New ZMW transfer",
"complete_message": "",
"requires_approval": 0,
"is_approved": 1,
"bank_name": "Mobile Money"
}
}
{}
Supported Format
To make a successful M-Pesa(KES), XAF, or XOF transfer request, Pass
amountandaccount_numberin the following formats:
- We only support integers for amount.
account_numberis expected to take these forms:254700000000or0700000000.
You'll notice that the data.status for the transfer is "NEW". Remember to set up a webhook or call the get transfer endpoint to find out when the transfer is completed. See Transfers: Overview for more details.
Bulk Transfers
You can also transfer to multiple mobile money accounts at once. See the bulk transfers guide for details.
Updated about 1 month ago
