Tanzanian wallets, payment apps and digital lenders need three kinds of SMS: OTPs for sign-up, new devices and high-risk transactions; receipts after every transaction that state the amount, the fee, the balance and a reference; and calm, accurate repayment reminders. The Bank of Tanzania's 2025 amendment to its consumer protection regulations (GN 298 of 2025) requires providers to disclose all fees and charges before a customer makes an electronic transaction, and to obtain prior consent before using customer information for promotional offers, so your messages should repeat the fee the customer already saw and keep marketing separate.
Last reviewed: 27 October 2026
Mobile money is how much of Tanzania pays. TCRA figures reported by TanzaniaInvest show 66.5 million mobile money subscriptions in March 2025, with M-Pesa holding 40.4% of the market. This guide is for product, compliance and engineering teams at wallets, lenders and payment companies building on that base. It is not legal advice; check the regulations with your compliance team.
What GN 298 of 2025 changes for messaging
The Bank of Tanzania (Financial Consumer Protection) (Amendment) Regulations, 2025, published as Government Notice No. 298 on 23 May 2025, amend the 2019 regulations (GN 884 of 2019). The provisions that touch customer messages:
- Fee disclosure before the transaction (regulation 23(2)): a financial service provider must disclose to a consumer all information relating to fees and charges before the consumer effects any transaction, "in an electronic means or otherwise".
- New or higher fees need approval (regulation 25): providers may not introduce or raise fees without the Bank's written approval.
- Consent for promotions (regulation 39(c)): providers must obtain the consumer's prior consent, through electronic or non-electronic means, before using their information for future promotional offers.
- Abusive debt recovery (regulation 11): the amendment defines it to include unlawful collection, the use of any false statement, and harassment and coercion.
The fee disclosure happens on the confirmation screen, USSD menu or agent receipt, before the customer approves. SMS is not a substitute for that screen, because the SMS arrives after or alongside the approval. What SMS can do is repeat the same fee in the receipt, so the customer has a record that matches what they were shown.
OTPs: where and how
Use SMS codes for sign-up and number verification, linking a new device, PIN resets, adding a new payout account, and transfers above a risk threshold. Skip them for routine actions on a trusted device where a PIN is enough. Each OTP should name the brand, put the code first, state the purpose and warn against sharing:
- PesaHub: 482913 ni nambari yako ya uthibitisho ya kuunganisha simu mpya. Usimpe mtu yeyote, hata mfanyakazi wa PesaHub.
- PesaHub: 482913 is your code to link a new phone. Do not share it with anyone, even PesaHub staff.
Since 16 June 2025, Tanzanian networks block unregistered sender IDs, which is the most common reason OTPs suddenly stop arriving. Our article on why OTPs fail in Tanzania covers registration, number formats, resend limits and roaming users in detail.
Receipts that match the fee the customer saw
A good receipt lets the customer check a transaction without opening the app: amount, counterparty, fee, balance, reference and time. Mask account numbers. Keep it to one segment: Kiswahili and English both fit the GSM-7 character set, so you get 160 characters either way.
| Event | Kiswahili | English |
|---|---|---|
| Transfer sent | PesaHub: Umetuma TZS 50,000 kwa JUMA ALI 0754***678. Ada TZS 500. Salio TZS 120,400. Kumb PH82731 12/03 14:05 | PesaHub: You sent TZS 50,000 to JUMA ALI 0754***678. Fee TZS 500. Bal TZS 120,400. Ref PH82731 12/03 14:05 |
| Money received | PesaHub: Umepokea TZS 30,000 kutoka NEEMA JOHN. Salio TZS 150,400. Kumb PH82790 12/03 16:20 | PesaHub: You received TZS 30,000 from NEEMA JOHN. Bal TZS 150,400. Ref PH82790 12/03 16:20 |
| Bill payment | PesaHub: Umelipa TZS 25,000 kwa MAJI SAFI LTD, akaunti 2210***45. Ada TZS 300. Kumb PH82811. Asante! | PesaHub: You paid TZS 25,000 to MAJI SAFI LTD, account 2210***45. Fee TZS 300. Ref PH82811. Thank you! |
| Failed and reversed | PesaHub: Muamala wa TZS 50,000 haukufanikiwa na pesa imerudishwa. Salio TZS 170,400. Kumb PH82731 | PesaHub: Your TZS 50,000 transaction failed and the money has been returned. Bal TZS 170,400. Ref PH82731 |
The fee in the receipt must come from the same calculation as the confirmation screen. If they ever differ, the customer has evidence that the disclosed fee was not the fee charged.
Repayment reminders for digital lenders
Reminders are where lenders get into trouble. GN 298 names false statements, harassment and coercion as abusive debt recovery. Write reminders that are accurate, polite and sent to the borrower only:
| Stage | Kiswahili | English |
|---|---|---|
| 3 days before | MkopoFasta: Habari Neema, rejesho la TZS 85,000 linadaiwa tarehe 15/11. Lipa kwa M-Pesa, Namba ya Kampuni 123456, Kumbukumbu ML4471. | MkopoFasta: Hello Neema, your repayment of TZS 85,000 is due on 15/11. Pay by M-Pesa, Business No 123456, Ref ML4471. |
| Due date | MkopoFasta: Neema, leo ni siku ya rejesho la TZS 85,000. Umeshalipa? Puuza ujumbe huu. Msaada: 0800 000 000 | MkopoFasta: Neema, your repayment of TZS 85,000 is due today. Already paid? Ignore this message. Help: 0800 000 000 |
| Overdue | MkopoFasta: Neema, rejesho la TZS 85,000 limechelewa. Tupigie 0800 000 000 tupange mpango wa kulipa unaokufaa. | MkopoFasta: Neema, your TZS 85,000 repayment is overdue. Call 0800 000 000 so we can agree a plan that works for you. |
| Payment received | MkopoFasta: Tumepokea TZS 85,000. Salio la mkopo TZS 0. Asante kwa kulipa kwa wakati! | MkopoFasta: We received TZS 85,000. Loan balance TZS 0. Thank you for paying on time! |
Things to avoid: threats of arrest or of messaging the borrower's family, stating penalties that are not in the loan terms, messages to the borrower's contacts or employer, and repeated messages at night. Charge only late fees that were disclosed and, where required, approved.
Keep promotions separate
Loan offers, cashback campaigns and "your limit has increased" upsells are promotional offers. Under regulation 39(c) they need the customer's prior consent, and the Personal Data Protection Act 2022 (section 35) lets a customer require you to stop direct marketing. Use a separate sender ID or at least separate templates for promotions, record consent, and keep OTPs and receipts free of offers. The PDPA also lists the financial transactions of an individual among its categories of sensitive personal data, which is one more reason to keep SMS content to what the customer needs and to mask numbers. Our PDPA and SMS marketing guide covers consent and PDPC registration.
Building it with eSMS Africa
eSMS Verify handles OTPs: start a verification, then check the code; eSMS generates, sends, rate-limits and checks it. Receipts and reminders are ordinary messages sent from your transaction and loan systems:
# Python 3: OTP for a transfer, then a receipt that repeats the fee shown in the app
import os, requests
BASE = "https://sms.esmsafrica.io"
H = {"Authorization": "Bearer " + os.environ["ESMS_API_KEY"], "Content-Type": "application/json"}
def start_transfer_otp(phone):
r = requests.post(BASE + "/v1/verify/start", headers=H, timeout=10,
json={"to": phone, "app_id": os.environ["VERIFY_APP_ID"]})
r.raise_for_status()
return r.json()["verification_id"]
def approve(verification_id, user_code):
r = requests.post(BASE + "/v1/verify/check", headers=H, timeout=10,
json={"verification_id": verification_id, "code": user_code})
return r.json().get("status") == "approved"
def send_receipt(tx, lang="sw"):
if lang == "sw":
text = (f"PesaHub: Umetuma TZS {tx['amount']} kwa {tx['payee']}. Ada TZS {tx['fee']}. "
f"Salio TZS {tx['balance']}. Kumb {tx['ref']} {tx['when']}")
else:
text = (f"PesaHub: You sent TZS {tx['amount']} to {tx['payee']}. Fee TZS {tx['fee']}. "
f"Bal TZS {tx['balance']}. Ref {tx['ref']} {tx['when']}")
requests.post(BASE + "/api/messages/send", headers=H, timeout=10,
json={"to": tx["phone"], "sender_id": "PesaHub", "text": text})
For reminders to many borrowers, use POST https://sms.esmsafrica.io/api/messages/send-bulk with per-recipient vars for name, amount and reference, scheduled for daytime. Delivery reports by webhook show which receipts reached customers, which helps when a customer disputes a transaction. Test keys (esms_test_...) simulate sends without charge.
Checklist
- Fees disclosed on the confirmation screen before approval; receipts repeat the same fee.
- Sender ID registered on Vodacom, Airtel, Yas and Halotel.
- OTPs for sign-up, new device, resets, new payout accounts and high-value transfers.
- Receipts within one segment, account numbers masked, Kiswahili and English.
- Reminders accurate, polite, borrower-only and sent in daytime.
- Promotions only with prior consent, on separate templates, with a way to stop.
- PDPC registration in place.
What it costs
Each OTP, receipt or reminder to a Tanzanian number costs TZS 18.2819 ($0.0069) on the basic tier, TZS 16.9571 on the business tier and TZS 14 on the enterprise tier. Payment apps with high receipt volumes usually qualify for the higher tiers quickly; see the pricing page.
Frequently asked questions
Does GN 298 of 2025 require an SMS receipt?
The amendment requires fees and charges to be disclosed before the transaction. It does not say the disclosure must be by SMS. A receipt that repeats the fee gives the customer a matching record.
Can we send loan offers to all our wallet users?
Regulation 39(c) requires prior consent before using customer information for promotional offers. Send offers only to customers who agreed, and give them a way to stop.
Should receipts be in Kiswahili?
Use the language the customer chose in your app. Kiswahili is a sensible default for mass-market wallets, and it fits the GSM-7 character set, so it costs the same per segment as English.
Why did our OTPs stop arriving on one network?
Usually because the sender ID is not registered or approved on that network. Split delivery reports by network and check the sender ID status for each one.
Sources
- Bank of Tanzania - Financial Consumer Protection (Amendment) Regulations, 2025 (GN No. 298)
- TanzaniaInvest - TCRA telecom statistics, Q1 2025
- Personal Data Protection Act, 2022 (TanzLII)
- Published SMS guidelines for Tanzania (sender ID registration, 16 June 2025)
- eSMS Africa docs - Verify
See how Tanzanian fintechs combine OTPs, receipts and reminders on the fintech SMS page for Tanzania, read our SACCOS loan reminder guide, and register your sender ID on the Tanzania sender ID page. Create an account and test the full flow with a free test key.


