Business to Customer
B2C sends money from your short code to a customer — salaries, refunds, winnings, loan disbursements.
POST mpesa/b2c/v3/paymentrequest
Make a payout
Section titled “Make a payout”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.
Limits
Section titled “Limits”| Minimum | KES 10 |
| Maximum per transaction | KES 250,000 |
| Maximum customer balance | KES 500,000 |
| Maximum daily value | KES 500,000 |
Pochi la Biashara
Section titled “Pochi la Biashara”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.
The result
Section titled “The result”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 |