Real-time M-Pesa collections
Every STK push, Paybill and Till payment lands in your dashboard the moment it happens.
We enable Kenyan businesses to collect money via M-Pesa and bank transfer — settled straight to your account, without the usual hustle.
Track your collections in real time
Collect on M-Pesa with your own Paybill or Till — reconcile automatically and track every shilling in your dashboard.
Every STK push, Paybill and Till payment lands in your dashboard the moment it happens.
Each merchant gets a dedicated Paybill or Till — funds settle to your shortcode, not a shared pool.
Share one link and get paid — your customer opens it, enters their number and pays. Fixed or open amounts, no coding needed.
Fire an STK push straight to your customer's phone at checkout. No apps to install, no card details — just one tap and a PIN.
A request of KSh 2,450.00 to FORTPESA MERCHANT for account ORDER-1042.
Enter M-PESA PIN:
We provision your shortcode as a dedicated payment channel. STK requests always route with an explicit channel ID — never a shared default.
A production REST API with HMAC-signed webhooks — clean docs, real endpoints, and snippets you can paste. First payment in minutes, not days.
Read the docscurl -X POST https://fortpesa.co.ke/api/v1/payments/stk \
-H "Authorization: Bearer pb_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"amount": 150,
"phone": "0712345678",
"account_reference": "INV-2041",
"channel_id": 42
}'
const res = await fetch("https://fortpesa.co.ke/api/v1/payments/stk", {
method: "POST",
headers: {
Authorization: "Bearer pb_live_YOUR_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
amount: 150, // KES 150
phone: "0712345678",
account_reference: "INV-2041",
channel_id: 42, // your channel's ID
}),
});
const { data } = await res.json(); // status: "pending"
$res = Http::withToken('pb_live_YOUR_KEY')
->post('https://fortpesa.co.ke/api/v1/payments/stk', [
'amount' => 150, // KES 150
'phone' => '0712345678',
'account_reference' => 'INV-2041',
'channel_id' => 42, // your channel's ID
]);
$tx = $res->json('data'); // status: "pending"
import requests
res = requests.post(
"https://fortpesa.co.ke/api/v1/payments/stk",
headers={"Authorization": "Bearer pb_live_YOUR_KEY"},
json={
"amount": 150, # KES 150
"phone": "0712345678",
"account_reference": "INV-2041",
"channel_id": 42, # your channel's ID
},
timeout=30,
)
tx = res.json()["data"] # status: "pending"
Works with your stack
Connect any CMS, framework, or store.
Any platform with an internet connection can integrate today via the REST API.Official plugins coming soon
FormPesa is a free form builder — pick a template, add your fields and share one link. Your customer fills it in and pays by M-Pesa, no code required.
Powered by Fortpesa — payments land straight in your M-Pesa.
From market stalls to e-commerce stores, discover how Kenyan businesses collect and reconcile effortlessly with Fortpesa.
"Reconciliation that used to eat my whole morning is now done before my first cup of chai!"
"Since switching to Fortpesa, our M-Pesa collections are confirmed in seconds on our own Paybill. The fee ledger means no more guessing what we paid."
"The STK push checkout lifted our online sales by 40% — customers just tap, enter PIN, done!"