M-Pesa Tanzania icon

M-Pesa Tanzania Wallet & Statement Data API

Vodacom Tanzania · Payments

M-Pesa Tanzania is Vodacom Tanzania's consumer mobile-money app (Play package com.vodafone.mpesa.tanzania), the Android client for the country's M-Pesa wallet denominated in Tanzanian shillings. Signed-in users send money (Tuma Pesa) to Vodacom, Airtel, Halotel, TTCL, Mixx by Yas and AzamPesa numbers, pay Lipa kwa M-Pesa tills, cash out at agents (Toa Pesa kwa Wakala), read M-Pesa mini-statements, buy airtime on Smile, Airtel, TTCL, Halotel and Vodacom, settle pay-bills for DStv, school fees, insurance, pensions and TANESCO LUKU tokens, push cash into 39 local banks including CRDB, NMB, NBC and Standard Chartered, pay government control numbers that start with 9, and draw Songesha overdraft when the wallet is short. Onboarding takes a Tanzanian MSISDN (optional +255 / 0, then a 6 or 7 plus eight digits), an SMS OTP from the M-PESA sender, a PIN, and optional fingerprint or biometric unlock; the home grid and legal pages ship in English and Swahili. It is Vodacom's default M-Pesa client in Tanzania, competing with Mixx by Yas, Airtel Money, HaloPesa, TPesa and AzamPesa for the same TZS wallets.

Tuma Pesa transfer records link transID to networkCode and networkShortCode, distinguishing off-net routes to Mixx by Yas, HaloPesa and Airtel. Wallet snapshots contribute availableBalance and currency, while mini-statement rows pair amount, transactionFee, runningBalance and endTime with each transaction. On-screen history goes back up to 12 months when e-statements are enabled; PDF e-statements cover six months.

Lipa kwa M-Pesa QR data identifies the merchant through creditPartyIdentifier and creditPartyName, alongside trxCode, amount and currencyCode. Pay-bill records combine shortCode, billReference, paymentType and categoryType, including PAY_BILL entries for betting, DStv, insurance, school fees and pensions. The 39-bank directory adds accountNameCheck, accountNumberPrefix and accountNumberLabel; these describe routing and name-check support rather than confirmed beneficiary names. Songesha settings expose overdraftEnabled and channel-specific flags such as lukuOverdraftEnabled and governmentBillOverdraftEnabled. The documented payment range is 100–5,000,000 TZS for P2P, merchant, pay-bill, bank, LUKU and government payments, with a higher 200 TZS minimum for agent cash-out.

Treasury teams can reconcile transfer identifiers and statement balances across networks, while merchant-payment integrators can use QR payee details to prepare till-payment records. Bill aggregators can organize providers by shortCode and categoryType; ERP payout teams can use bank-directory flags to select routes that support account-name checks. Lending teams can compare overdraft enablement with statement history, without treating a flag as proof that Songesha was used. openData Studio turns these wallet, payment, directory and statement records into callable open data for those integrations.

Screenshots

  • M-Pesa Tanzania screenshot 1
  • M-Pesa Tanzania screenshot 2
  • M-Pesa Tanzania screenshot 3
  • M-Pesa Tanzania screenshot 4
  • M-Pesa Tanzania screenshot 5
  • M-Pesa Tanzania screenshot 6
  • M-Pesa Tanzania screenshot 7

API surface

Request/response examples are illustrative, reconstructed from the app's interface — not a live capture.

  • Wallet balance snapshot

    GET /v1/mpesa-tz/wallet/balance openbanking

    Loads the home TZS snapshot (availableBalance, runningBalance, overdraftEnabled) that sits above the Tuma Pesa / Lipa kwa M-Pesa action grid.

    Auth: Session token after MSISDN OTP (SMS sender M-PESA) and PIN. Home balance read does not re-prompt PIN.

    • msisdn
    • currency
    • fractionDigits
    • availableBalance
    • overdraftEnabled
    • runningBalance
    GET /v1/mpesa-tz/wallet/balance HTTP/1.1
    Authorization: Bearer <session-token>
    Accept: application/json
    {
      "msisdn": "255754100100",
      "currency": "TZS",
      "fractionDigits": 0,
      "availableBalance": 125000,
      "overdraftEnabled": true,
      "runningBalance": 125000
    }
  • Send money (Tuma Pesa)

    POST /v1/mpesa-tz/transfers/pay-person openbanking

    Commits a Tuma Pesa P2P transfer onto an interop rail identified by networkCode and networkShortCode (VODACOM 001001, AIRTEL 922750, Mixx by Yas / TIGOPESA 922749, HALOTEL 922775, AzamPesa 922805).

    Auth: Session token plus PIN confirmation. Amount must sit between PAY_PERSON_TZS_MIN 100 and PAY_PERSON_TZS_MAX 5000000.

    • recipientMsisdn
    • amount
    • currency
    • networkCode
    • networkShortCode
    • description
    • transID
    • flow
    • network
    • status
    • runningBalance
    POST /v1/mpesa-tz/transfers/pay-person HTTP/1.1
    Authorization: Bearer <session-token>
    Content-Type: application/json
    
    {
      "recipientMsisdn": "255712345678",
      "amount": 25000,
      "currency": "TZS",
      "networkCode": "AIRTEL",
      "networkShortCode": "922750",
      "description": "School lunch"
    }
    {
      "transID": "TZN7X2K9L0",
      "flow": "PAY_PERSON",
      "network": "AIRTEL",
      "networkCode": "AIRTEL",
      "networkShortCode": "922750",
      "amount": 25000,
      "currency": "TZS",
      "status": "LIVE",
      "runningBalance": 100000
    }
  • Lipa kwa M-Pesa merchant payment

    POST /v1/mpesa-tz/payments/merchant openbanking

    Pays a Lipa kwa M-Pesa till (tillNumber) on a merchant rail from payMerchantList — M-Pesa, Airtel, Mixx by Yas, HaloPesa, TPesa, Selcom, AzamPesa and 19 bank-wallet brands.

    Auth: Session token plus PIN. Till length capped at TILL_NUMBER_MAX_CHARACTERS 16; amount 100–5000000 TZS.

    • tillNumber
    • amount
    • currency
    • networkCode
    • networkQrCodeId
    • overdraftEnabled
    • transID
    • flow
    • network
    • status
    POST /v1/mpesa-tz/payments/merchant HTTP/1.1
    Authorization: Bearer <session-token>
    Content-Type: application/json
    
    {
      "tillNumber": "1234567",
      "amount": 15000,
      "currency": "TZS",
      "networkCode": "VODACOM",
      "networkQrCodeId": "02503",
      "overdraftEnabled": true
    }
    {
      "transID": "LIP8M3P1Q2",
      "flow": "PAY_MERCHANT",
      "tillNumber": "1234567",
      "network": "M-Pesa",
      "networkCode": "VODACOM",
      "amount": 15000,
      "currency": "TZS",
      "status": "LIVE"
    }
  • Pay-bill to a business short code

    POST /v1/mpesa-tz/payments/bill openbanking

    Settles a pay-bill against a LIVE business shortCode (62 of 98 popular businesses use paymentType PAY_BILL) in categories such as CAT_Betting, CAT_DStv, CAT_Insurance, CAT_PaySchoolFees and CAT_Pension.

    Auth: Session token plus PIN. Pay-business envelope 100–5000000 TZS; Songesha overdraft may cover a short wallet (PAY_BUSINESS_OVERDRAFT_ENABLED).

    • shortCode
    • billReference
    • amount
    • currency
    • paymentType
    • categoryType
    • transID
    • id
    • name
    • status
    POST /v1/mpesa-tz/payments/bill HTTP/1.1
    Authorization: Bearer <session-token>
    Content-Type: application/json
    
    {
      "shortCode": "340352",
      "billReference": "POL-4412",
      "amount": 45000,
      "currency": "TZS",
      "paymentType": "PAY_BILL",
      "categoryType": "CAT_Insurance"
    }
    {
      "transID": "BIL4R7S0T1",
      "id": "1791538519627",
      "name": "iINCOME FUND UNIT TRUST SCHEME",
      "shortCode": "340352",
      "billReference": "POL-4412",
      "paymentType": "PAY_BILL",
      "categoryType": "CAT_Insurance",
      "status": "LIVE",
      "amount": 45000,
      "currency": "TZS"
    }
  • Cash out at agent

    POST /v1/mpesa-tz/withdrawals/agent openbanking

    Cashes TZS out at a Vodacom agent (Toa Pesa kwa Wakala) identified by agentCode, optionally drawing Songesha when WITHDRAW_AGENT_OVERDRAFT_ENABLED is true.

    Auth: Session token plus PIN. Floor is WITHDRAW_AGENT_TZS_MIN 200 (higher than P2P); ceiling 5000000 TZS.

    • agentCode
    • amount
    • currency
    • overdraftEnabled
    • transID
    • flow
    • status
    • runningBalance
    POST /v1/mpesa-tz/withdrawals/agent HTTP/1.1
    Authorization: Bearer <session-token>
    Content-Type: application/json
    
    {
      "agentCode": "123456",
      "amount": 50000,
      "currency": "TZS",
      "overdraftEnabled": true
    }
    {
      "transID": "WTH2A8B3C4",
      "flow": "WITHDRAW_AGENT",
      "agentCode": "123456",
      "amount": 50000,
      "currency": "TZS",
      "status": "COMPLETED",
      "runningBalance": 75000
    }
  • M-Pesa mini-statement

    POST /v1/mpesa-tz/statements/mini openbanking

    Pages M-Pesa statement rows (transID, flow, amount, transactionFee, runningBalance, counterparty) for the Taarifa ya M-Pesa screen and optional PDF export.

    Auth: Session token after sign-in. E-statement PDF window is six months; on-screen history goes back 12 months when FEATURE_E_STATEMENTS_ENABLED is true.

    • msisdn
    • startDate
    • endDate
    • currency
    • transID
    • flow
    • amount
    • transactionFee
    • runningBalance
    • counterparty
    • networkCode
    • endTime
    POST /v1/mpesa-tz/statements/mini HTTP/1.1
    Authorization: Bearer <session-token>
    Content-Type: application/json
    
    {
      "msisdn": "255754100100",
      "startDate": "2026-09-01",
      "endDate": "2026-10-23",
      "currency": "TZS"
    }
    {
      "currency": "TZS",
      "entries": [
        {
          "transID": "TZN7X2K9L0",
          "flow": "PAY_PERSON",
          "amount": 25000,
          "transactionFee": 200,
          "runningBalance": 100000,
          "counterparty": "255712345678",
          "networkCode": "AIRTEL",
          "endTime": "2026-10-17T08:41:12+03:00"
        }
      ]
    }
  • Pay-into-bank directory

    GET /v1/mpesa-tz/banks opendata

    Returns the 39-bank pay-into-bank catalogue (name, shortCode, accountNameCheck) used before a TZS push of 100–5000000 (PAY_INTO_BANK_TZS_MIN/MAX).

    Auth: Session token after sign-in. Paying a listed bank still requires PIN; this call only returns the catalogue.

    • version
    • name
    • shortCode
    • accountNameCheck
    • accountNumberPrefix
    • accountNumberLabel
    GET /v1/mpesa-tz/banks HTTP/1.1
    Authorization: Bearer <session-token>
    Accept: application/json
    {
      "version": 42,
      "banks": [
        {
          "name": "Standard Chartered",
          "shortCode": "922827",
          "accountNameCheck": true,
          "accountNumberPrefix": null,
          "accountNumberLabel": null
        },
        {
          "name": "NMB",
          "shortCode": "922xxx",
          "accountNameCheck": true,
          "accountNumberPrefix": null,
          "accountNumberLabel": null
        }
      ]
    }
  • Interop receiving networks

    GET /v1/mpesa-tz/networks opendata

    Lists LIVE interop rails for P2P, airtime and merchant pay — network, networkCode, networkShortCode and networkQrCodeId — so the send/pay pickers can route off-net.

    Auth: Session token after sign-in. Catalogue is not PIN-gated.

    • version
    • id
    • network
    • networkCode
    • networkShortCode
    • networkQrCodeId
    • status
    • order
    • payPersonList
    • payAirtimeList
    • payMerchantList
    GET /v1/mpesa-tz/networks HTTP/1.1
    Authorization: Bearer <session-token>
    Accept: application/json
    {
      "version": 135,
      "payPersonList": [
        {"id": "PAY_PERSON-VODACOM-2", "network": "VODACOM", "networkCode": "VODACOM", "networkShortCode": "001001", "status": "LIVE", "order": 0}
      ],
      "payAirtimeList": [
        {"id": "PAY_AIRTIME-SMILE-1", "network": "SMILE", "networkCode": "SMILE", "networkQrCodeId": "02503", "networkShortCode": "001001", "status": "LIVE", "order": 0}
      ],
      "payMerchantList": [
        {"id": "PAY_MERCHANT-VODACOM-1", "network": "M-Pesa", "networkCode": "VODACOM", "networkQrCodeId": "02503", "networkShortCode": "001001", "status": "LIVE", "order": 0}
      ]
    }
  • Decode Lipa kwa M-Pesa QR

    POST /qr/v1/qr-codes/decode openbanking

    Decodes a scanned Lipa kwa M-Pesa / merchant QR into creditPartyIdentifier (till), creditPartyName, trxCode, amount and EMV-style additionalParameters (storeID, terminalID, orgShortCode) before the pay-merchant PIN step.

    Auth: OAuth2 client credentials (client_id, client_secret, grant_type, scope) returning accessToken, sent as Bearer on the QR call. User PIN is collected after decode, before pay.

    • qrString
    • market
    • responseCode
    • responseMsg
    • referenceID
    • description
    • amount
    • creditPartyIdentifier
    • creditPartyName
    • trxCode
    • countryCode
    • currencyCode
    • merchantCCode
    • merchantLoc
    • qrType
    • qrFormat
    • refNo
    • channelID
    • networkID
    • storeID
    • terminalID
    • orgShortCode
    • mobileNumber
    • loyaltyNo
    POST /qr/v1/qr-codes/decode HTTP/1.1
    Authorization: Bearer <accessToken>
    Content-Type: application/json
    
    {
      "qrString": "0002010102110216...",
      "market": "TZ"
    }
    {
      "responseCode": "0",
      "responseMsg": "Success",
      "referenceID": "QR-88921",
      "description": "Merchant QR",
      "qrData": {
        "amount": 15000,
        "creditPartyIdentifier": "1234567",
        "creditPartyName": "DUKA LA JANE",
        "trxCode": "BG",
        "countryCode": "TZ",
        "currencyCode": "TZS",
        "merchantCCode": "5411",
        "merchantLoc": "Dar es Salaam",
        "qrType": "STATIC",
        "qrFormat": "EMV",
        "refNo": "INV-1022",
        "channelID": "1",
        "networkID": "1",
        "additionalParameters": {
          "storeID": "ST-01",
          "terminalID": "T-04",
          "orgShortCode": "123456",
          "mobileNumber": "255754100100",
          "loyaltyNo": null
        }
      }
    }
  • Airtime top-up

    POST /v1/mpesa-tz/airtime/topup openbanking

    Buys airtime for an MSISDN on a payAirtimeList rail (SMILE, AIRTEL, TTCL, HALOTEL, VODACOM) identified by networkCode and networkQrCodeId.

    Auth: Session token plus PIN.

    • msisdn
    • amount
    • currency
    • networkCode
    • networkQrCodeId
    • transID
    • id
    • network
    • status
    POST /v1/mpesa-tz/airtime/topup HTTP/1.1
    Authorization: Bearer <session-token>
    Content-Type: application/json
    
    {
      "msisdn": "255754100100",
      "amount": 2000,
      "currency": "TZS",
      "networkCode": "VODACOM",
      "networkQrCodeId": "02503"
    }
    {
      "transID": "AIR9D1E2F3",
      "id": "PAY_AIRTIME-VODACOM-1",
      "network": "VODACOM",
      "networkCode": "VODACOM",
      "amount": 2000,
      "currency": "TZS",
      "status": "LIVE"
    }
  • Songesha overdraft profile

    GET /v1/mpesa-tz/overdraft/profile openfinance

    Reads Songesha overdraft flags and TZS envelopes that gate P2P, merchant, pay-bill, agent cash-out, LUKU electricity tokens and government bills when the wallet is short.

    Auth: Session token after sign-in. Drawing Songesha on a payment still requires PIN.

    • currency
    • overdraftEnabled
    • payPersonOverdraftEnabled
    • payMerchantOverdraftEnabled
    • payBusinessOverdraftEnabled
    • withdrawAgentOverdraftEnabled
    • lukuOverdraftEnabled
    • governmentBillOverdraftEnabled
    • governmentBillTzsMin
    • governmentBillTzsMax
    • lukuTzsMin
    • lukuTzsMax
    GET /v1/mpesa-tz/overdraft/profile HTTP/1.1
    Authorization: Bearer <session-token>
    Accept: application/json
    {
      "currency": "TZS",
      "overdraftEnabled": true,
      "payPersonOverdraftEnabled": true,
      "payMerchantOverdraftEnabled": true,
      "payBusinessOverdraftEnabled": true,
      "withdrawAgentOverdraftEnabled": true,
      "lukuOverdraftEnabled": true,
      "governmentBillOverdraftEnabled": true,
      "governmentBillTzsMin": 100,
      "governmentBillTzsMax": 5000000,
      "lukuTzsMin": 100,
      "lukuTzsMax": 5000000
    }

Data categories

  • balances
  • transfers
  • merchant-payments
  • bills
  • statements
  • banks
  • airtime
  • overdraft

Where teams use this data

  • Cross-network P2P reconciliation

    Treasury bots match Tuma Pesa legs on transID, networkCode and networkShortCode against Mixx by Yas, Airtel, HaloPesa and AzamPesa counterparties, then close the day on runningBalance in TZS.

  • Merchant till and pay-bill ingest

    Acquirers decode Lipa kwa M-Pesa QR into creditPartyIdentifier, trxCode and amount, then map pay-bill shortCode / billReference / paymentType rows for DStv, school fees and insurance.

  • Pay-into-bank name check

    ERP payouts look up the 39-bank catalogue (shortCode, accountNameCheck) before a 100–5,000,000 TZS push to CRDB, NMB, NBC or Standard Chartered, skipping rails that cannot confirm the account name.

  • Songesha and LUKU shortfall watch

    Lenders watch overdraftEnabled plus lukuOverdraftEnabled and governmentBillOverdraftEnabled next to mini-statement runningBalance to see when Songesha is covering electricity tokens or GePG control numbers.

Frequently asked questions

Which M-Pesa Tanzania fields identify an off-net transfer?

Tuma Pesa records carry network, networkCode and networkShortCode, plus transID, amount, currency and runningBalance. Documented networkCode/networkShortCode pairs include AIRTEL/922750, TIGOPESA/922749 for Mixx by Yas, HALOTEL/922775 and AzamPesa/922805. Statement rows add transactionFee and endTime for reconciliation in TZS.

How do Lipa kwa M-Pesa QR scans map to a till payment?

Decoded merchant QR data includes creditPartyIdentifier (the till), creditPartyName, trxCode, amount and currencyCode, with storeID, terminalID and orgShortCode as additional merchant details. The merchant payment uses tillNumber and requires a signed-in session plus PIN confirmation. Decoding a QR code alone does not confirm payment.

What bank and bill catalogues support payments?

The pay-into-bank directory covers 39 banks and lists name, shortCode, accountNameCheck, accountNumberPrefix and accountNumberLabel. accountNameCheck indicates support for an account-name check, not a beneficiary's verified name. Pay-bill records pair shortCode with billReference, paymentType and categoryType, including the PAY_BILL payment type. The documented government control-number format begins with 9.

Does Songesha overdraft apply to every payment channel?

The profile exposes overdraftEnabled plus separate payPersonOverdraftEnabled, payMerchantOverdraftEnabled, payBusinessOverdraftEnabled, withdrawAgentOverdraftEnabled, lukuOverdraftEnabled and governmentBillOverdraftEnabled flags. These are enablement settings, not records of actual borrowing. Documented LUKU and government-payment limits are 100–5,000,000 TZS; agent cash-out has a 200 TZS minimum and a 5,000,000 TZS maximum.

Apps similar to M-Pesa Tanzania

  • Mixx by Yas — Mixx Super App is Mixx by Yas's Tanzanian mobile-money client, used to check a wallet balance, send money, recharge airtime, pay bills and transfer funds to a bank.
  • Airtel Money — Airtel Money is Airtel's Tanzanian mobile-money wallet, listed by Mixx by Yas as a send-and-receive destination alongside M-Pesa, T-Pesa and HaloPesa.
  • HaloPesa — HaloPesa is the mobile-money service of Viettel's Halotel network in Tanzania, which obtained its mobile-money licence in 2015.
  • T-PESA — T-PESA is Tanzania Telecommunications Corporation's mobile-money app, which TTCL says covers sending money to any network, cash-out, bill and government payments, self-top-up and bank transfers.
  • AzamPesa — AzamPesa is AzamPay's Tanzanian electronic-money wallet for individuals and businesses, used to send and receive across networks, pay utility and government bills, buy airtime and move cash between the wallet and banks.
  • My OneApp — My OneApp is Safaricom's Kenya client for M-PESA, the mobile-money service Vodafone and Safaricom launched in Kenya in 2007 before Vodacom rolled out M-Pesa in Tanzania.

Topics

  • M-Pesa Tanzania data API
  • Vodacom M-Pesa TZS wallet fields
  • Tuma Pesa transfer data
  • Lipa kwa M-Pesa merchant QR data
  • M-Pesa mini-statement fields
  • Tanzania pay-into-bank directory
  • M-Pesa pay-bill reference
  • Songesha overdraft settings
  • LUKU TANESCO payment limits

Need this app's data API integrated?

We deliver scoped integrations for any named app — from USD 500 with source-code handoff, or hosted access billed per call. Tell us the data you need.

  • NDA + SOW on every engagement
  • Delivery in 3–7 days
  • Payment only after acceptance
  • Work scoped to authorized use

Get a quote