Karibu — payments infrastructure for Tanzania
Accept payments from anywhere in Tanzania.
M-Pesa, Tigo Pesa, Airtel Money, HaloPesa, cards and bank transfers — all through one dashboard, so you never lose a sale to "we don't accept that."
- Salama. Bank-grade encryption on every transaction.
- Haraka. Money confirmed and settled in seconds.
- Rahisi. No code to start — or plug straight into our API.
Every way your customers already pay
T+1
Settlement to your account
99.95%
API uptime
<3s
Average charge confirmation
Your dashboard, at a glance
Every charge, every channel, reconciled automatically.
| Date | Customer | Method | Amount | Status |
|---|---|---|---|---|
| Aug 2 | A. Mwakalinga | M-Pesa | TZS 45,000 | Settled |
| Aug 2 | Zanzibar Coffee Co. | Card | TZS 128,500 | Settled |
| Aug 1 | J. Kimaro | Tigo Pesa | TZS 12,000 | Pending |
| Aug 1 | Mlimani Hardware | Bank transfer | TZS 940,000 | Settled |
| Jul 31 | F. Ndosi | Airtel Money | TZS 8,500 | Pending |
Settlements · last 7 days
How it works
-
1
Customer pays
They enter their phone number or card at your checkout and confirm on their device.
-
2
SafarisPay routes and confirms
We talk to the mobile network or card scheme, confirm the charge, and fire a webhook to your server.
-
3
Merchant is settled
Funds land in your settlement account on schedule. No manual reconciliation.
Built for
- Retail shops
- Wholesalers
- Tour operators
- Schools
- Churches & NGOs
- Freelancers
- Online sellers
Built for developers
Send a request, get a webhook. That's the whole integration.
# create a charge
curl -X POST https://api.safarispay.com/v1/charges \
-H "Authorization: Bearer sk_live_8fA2c9..." \
-H "Idempotency-Key: 7c9e-4b3a-2e11" \
-d amount=250000 \
-d currency=TZS \
-d method=mpesa \
-d phone=+255712345678
# create a charge
import safarispay
client = safarispay.Client("sk_live_8fA2c9...")
charge = client.charges.create(
amount=250000,
currency="TZS",
method="mpesa",
phone="+255712345678",
idempotency_key="7c9e-4b3a-2e11",
)
// create a charge
$client = new SafarisPay\Client("sk_live_8fA2c9...");
$charge = $client->charges->create([
"amount" => 250000,
"currency" => "TZS",
"method" => "mpesa",
"phone" => "+255712345678",
"idempotency_key" => "7c9e-4b3a-2e11",
]);
// create a charge
const safarispay = require("safarispay")("sk_live_8fA2c9...");
const charge = await safarispay.charges.create({
amount: 250000,
currency: "TZS",
method: "mpesa",
phone: "+255712345678",
idempotencyKey: "7c9e-4b3a-2e11",
});
Webhook — charge.settled
{
"event": "charge.settled",
"id": "ch_8f2ad61c",
"amount": 250000,
"currency": "TZS",
"status": "settled",
"settled_at": "2026-08-02T14:31:09Z"
}
Pricing
You only pay when a charge succeeds. No setup fee, no monthly fee, no surprises.
Starter
For new businesses testing the waters.
2.9% + TZS 200
- M-Pesa, Tigo Pesa, Airtel Money, HaloPesa
- Visa & Mastercard
- Test and live API keys
- Email support
Growth
For merchants with steady monthly volume.
2.5% + TZS 150
- Everything in Starter
- Bank transfer settlement
- Webhook retries and delivery logs
- Priority support
Scale
For platforms processing at volume.
Custom
- Everything in Growth
- Volume-based pricing
- Dedicated settlement account manager
- SLA-backed uptime
Salama
Built to be trusted
Settlement timing
Funds settle to your account on a T+1 business day schedule, tracked line by line in your dashboard.
Uptime
99.95% API uptime, with a public status page and advance notice for planned maintenance.
Encryption
TLS 1.3 in transit, AES-256 at rest. Secrets are hashed, never stored or logged in plain text.
PCI-DSS
Card data is tokenised at the edge. SafarisPay operates as a PCI-DSS Level 1 service provider.
Bank of Tanzania
Licensed as a payment service provider under the Bank of Tanzania's National Payment Systems Act.
Start accepting payments today
Get sandbox keys in minutes. No paperwork until you're ready to go live.