Skip to content

Business to Customer

B2C sends money from your short code to a customer — salaries, refunds, winnings, loan disbursements.

POST mpesa/b2c/v3/paymentrequest
Daraja::b2c()->business('0712345678', 2500, 'Refund for order 41');
Daraja::b2c()->salary('0712345678', 45000, 'March salary');
Daraja::b2c()->promotion('0712345678', 1000, 'Competition winner');

Each maps to a CommandID: BusinessPayment, SalaryPayment and PromotionPayment.

Minimum KES 10
Maximum per transaction KES 250,000
Maximum customer balance KES 500,000
Maximum daily value KES 500,000

Pays a customer’s business wallet rather than their personal one. Same payload, different endpoint.

POST mpesa/b2pochi/v1/paymentrequest
Daraja::b2c()->pochi('0712345678', 3000, 'Supplier payment');

The recipient must actually have a Pochi la Biashara wallet.

use Starnerz\LaravelDaraja\Events\ResultReceived;
public function handle(ResultReceived $event): void
{
if ($event->type !== 'b2c') {
return;
}
$result = $event->result;
if ($result->successful()) {
Payout::markSent(
$result->originatorConversationId,
$result->receipt(),
$result->receiverName(), // "254705912645 - NICHOLAS JOHN SONGOK"
);
}
}
Result code Meaning
0 Paid
1 Insufficient balance in the Utility account
2 / 3 Below minimum / above maximum
4 Would exceed the daily transfer limit
8 Would exceed the recipient’s maximum balance
11 B2C account not active
21 Initiator lacks the ORG B2C API initiator role
2001 Invalid initiator information
2040 Recipient is not a registered M-Pesa customer
8006 Security credential is locked