Zambia Mobile Money

Learn about Mobile Money support in Zambia

This payment method enables you to collect payments from Zambian customers using mobile money. It is available to all Zambian merchants by default.

📘

Approval Required

For non-Zambian merchants, Kindly request this feature on your account via email .

Supported Networks

Flutterwave supports three (3) major networks for mobile money payments in Zambia: Airtel, MTN,Zamtel. You need to specify this when initiating the payment so they are processed successfully.

curl --request POST \
   --url https://api.flutterwave.com/v3/charges?type=mobile_money_zambia \
   --header 'Authorization: Bearer YOUR_SECRET_KEY' \
   --header 'content-type: application/json' \
   --data '{
     "phone_number": "",
     "network": "Airtel",
     "amount": 10.00,
     "currency": "ZMW",
     "fullname": "",
     "email": "",
     "tx_ref": ""
}

curl --request POST \
   --url https://api.flutterwave.com/v3/charges?type=mobile_money_zambia \
   --header 'Authorization: Bearer YOUR_SECRET_KEY' \
   --header 'content-type: application/json' \
   --data '{
     "phone_number": "",
     "network": "MTN",
     "amount": 10.00,
     "currency": "ZMW",
     "fullname": "",
     "email": "",
     "tx_ref": ""
}

curl --request POST \
   --url https://api.flutterwave.com/v3/charges?type=mobile_money_zambia \
   --header 'Authorization: Bearer YOUR_SECRET_KEY' \
   --header 'content-type: application/json' \
   --data '{
     "phone_number": "",
     "network": "Zamtel",
     "amount": 10.00,
     "currency": "ZMW",
     "fullname": "",
     "email": "",
     "tx_ref": ""
}


The Process

To successfully collect a ZMW mobile money payment, you'll need to take these steps:

  1. Initiate the payment using the customer's information (phone_number, network, fullname and email) and transaction details like the amount and unique reference.
  2. Prompt the customer to authorize the payment on their mobile devices.
  3. Receive callbacks or webhooks and notify the customer about the final transaction status.

Initiating the Payment

To initiate a payment, send a request to the Zambia MoMo charge endpoint. This request should contain the customer's email, phone number, network, payment amount (in ZMW) and a unique transaction reference.

curl --request POST \
   --url https://api.flutterwave.com/v3/charges?type=mobile_money_zambia \
   --header 'Authorization: Bearer YOUR_SECRET_KEY' \
   --header 'content-type: application/json' \
   --data '{
     "phone_number": "054709929220",
     "network": "MTN",
     "amount": 1500,
     "currency": "ZMW",
     "fullname": "John Doe",
     "email": "[email protected]",
     "tx_ref": "zb_ghsdTHaHcMB"
}


Handling the Response

The charge response returns a meta.authorization object containing the details needed to complete the transaction.

One key detail is the meta.authorization.redirect URL. You’ll need to redirect the customer to this URL, where they can authorize the payment before the transaction is finalized.

{
    "status": "success",
    "message": "Charge initiated",
    "meta": {
        "authorization": {
            "redirect": "https://checkout-v2.dev-flutterwave.com/captcha/verify/lang-en/150971:44fc7cc57f600b5467a5f2719cc4cece",
            "mode": "redirect"
        }
    }
}


Completing the Payment

After redirection, the customer authorizes the payment as directed by their network providers. In test mode, you can mock the payment authorization by entering 123456 as the OTP.

Once the transaction is completed, we'll send you a webhook containing the payment's status and information.

Here's what the payload looks like:

{
  "event": "charge.completed",
  "data": {
    "id": 8422326,
    "tx_ref": "zm_4353dfdgfGTjsfddfgd",
    "flw_ref": "flwm3s4m0c1741001653154",
    "device_fingerprint": "N/A",
    "amount": 100,
    "currency": "ZMW",
    "charged_amount": 100,
    "app_fee": 5,
    "merchant_fee": 0,
    "processor_response": "Transaction Successful",
    "auth_model": "MOBILEMONEY",
    "ip": "52.209.154.143",
    "narration": "ZWM Employee #2",
    "status": "successful",
    "payment_type": "mobilemoneyzm",
    "created_at": "2025-03-03T11:34:12.000Z",
    "account_id": 43380,
    "customer": {
      "id": 2596836,
      "name": "John Doe",
      "phone_number": "054709929220",
      "email": "[email protected]",
      "created_at": "2025-03-03T11:32:56.000Z"
    }
  },
  "event.type": "MOBILEMONEYZM_TRANSACTION"
}

In your webhook handler, verify the payment and credit the customer accordingly. See our guide to transaction verification for details.