Key Points
Authentication
The Pochipay API uses JWT for authentication. Retrieve an access token using your credentials — the token expires after 3600 seconds (1 hour).
https://app.pochipay.com/api/v1/account/tokenGet Access Token
Retrieve a JWT access token using your email and password.
Request Body
{ "password": "YourPa$$w0d"}Field Notes
- Save the accessToken and use it in the Authorization header for subsequent requests
- Authorization: Bearer your-access-token
- Token expires after 3600 seconds (1 hour)
Response
{ "result": { "accessToken": "eyJhbGciOiJSUzI1....", "tokenType": "Bearer", "expiresIn": 3600 }, "errors": []}Disbursement
Send funds to mobile numbers, bank accounts, and businesses.
https://app.pochipay.com/api/v1/disbursement/banksGet Banks
Retrieves a list of available banks for disbursement.
Headers
Response
{ "result": [ { "bankCode": "00", "name": "Example 1 Bank" }, { "bankCode": "02", "name": "Example 2 Bank" } ], "message": "success", "errors": []}https://app.pochipay.com/api/v1/disbursement/send-to-mobileSend to Mobile
Sends funds to a valid Mpesa mobile number.
Headers
Request Body
{ "callbackUrl": "", "requestId": "", "disbursementTitle": "", "recipients": [ { "amount": 0, "remarks": "", "trackingReference": "", "phoneNumber": "" } ]}Field Notes
- callbackUrl — Your callback URL
- requestId — Unique reference for the disbursement batch
- disbursementTitle — A title for the disbursement
- amount — An amount greater than 0
- remarks — The narrations
- trackingReference — Unique reference for this recipient
- phoneNumber — Target phone number
Response
{ "result": { "isProcessing": true }, "message": null, "errors": [] }https://app.pochipay.com/api/v1/disbursement/send-to-bankSend to Bank
Sends funds to a supported bank account.
Headers
Request Body
{ "callbackUrl": "", "requestId": "", "disbursementTitle": "", "recipients": [ { "amount": 0, "remarks": "", "trackingReference": "", "bankCode": "", "accountNumber": "" } ]}Field Notes
- bankCode — Bank code from the Get Banks endpoint
- accountNumber — Bank account number
Response
{ "result": { "isProcessing": true }, "message": null, "errors": [] }https://app.pochipay.com/api/v1/disbursement/send-to-businessSend to Paybill or Till
Transfer funds to Mpesa Paybill and Till numbers.
Headers
Request Body
{ "callbackUrl": "", "requestId": "", "disbursementTitle": "", "recipients": [ { "amount": 0, "remarks": "", "trackingReference": "", "shortCode": "", "accountNumber": null, "IsPaybill": false } ]}Field Notes
- shortCode — Paybill or till number
- accountNumber — Account number if paybill, or null
- IsPaybill — true if shortcode is a paybill
Response
{ "result": { "isProcessing": true }, "message": null, "errors": [] }Your Callback URLDisbursement Callback
Callback dispatched to your URL once processing completes. Ensure your endpoint accepts POST and is not behind authentication.
Field Notes
- successful — true or false
- thirdPartyReference — Transaction reference from Mpesa
- failReason — Reason if successful was false
Response
{ "successful": true, "requestId": "", "trackingReference": "", "thirdPartyReference": "", "failReason": null}https://app.pochipay.com/api/v1/disbursement/transaction-statusDisbursement Status
Query the status of a disbursement when you missed the callback.
Headers
Request Body
{ "trackingReference": "unique-ref-01-19" }cURL Example
curl -X 'POST' \ 'https://app.pochipay.com/api/v1/disbursement/transaction-status' \ -H 'Authorization: Bearer eyJhbGciOi....' \ -H 'Content-Type: application/json' \ -d '{ "trackingReference": "unique-ref-01-19" }'Response
{ "result": { "trackingReference": "unique-ref-01-19", "status": "Pending", "message": "Transaction can be retried with the narrationId", "narrationId": "0199a09b-4716-77cb-9883-6bcd3876ce00" }, "errors": []}https://app.pochipay.com/api/v1/disbursement/execute-narrationRetry Pending Disbursement
Retries a pending disbursement using the narration ID.
Headers
Request Body
{ "narrationId": "0199a09b-4716-77cb-9883-6bcd3876ce00" }Response
{ "result": true, "message": "Disbursement list queued successfully", "errors": [] }https://app.pochipay.com/api/v1/disbursement/cancelCancel Pending Disbursement
Cancels a pending disbursement. Can only cancel if pending for at least 24 hours.
Headers
Request Body
{ "trackingReference": "TX1234567" }Response
{ "result": { "narrationId": "01923da9-ddd0-729e-88fe-f063b1ba7648", "phoneNumber": "+2547xxxxxxxx", "amount": 10, "trackingReference": "TX1234567", "status": "Cancelled" }, "message": "Transaction cancelled successfully", "errors": []}Account
Retrieve account information.
https://app.pochipay.com/api/v1/account/balanceGet Balance
Retrieves the current account balance. Currently only KES is supported.
Headers
Response
{ "result": { "currency": "KES", "balance": 0.00 }, "message": null, "errors": []}Transactions
Retrieve transaction summaries.
https://app.pochipay.com/api/v1/transactions/summariesTransaction Summaries
Retrieves aggregated transaction summaries.
Headers
Field Notes
- totalInternalCollections — Collections that top up your wallet
- totalThirdPartyCollections — Collections redirected to your alternative paybill/till
- totalDisbursements — Total disbursement value
Response
{ "result": { "totalInternalCollections": 0, "totalThirdPartyCollections": 0, "totalDisbursements": 0 }, "errors": []}Collections
Initiate and query Mpesa collections.
https://app.pochipay.com/api/v1/collections/mpesaInitiate Mpesa Collection
Initiates an Mpesa STK push collection.
Headers
Request Body
{ "orderId": "", "billRefNumber": "", "phoneNumber": "", "amount": 0, "narration": "", "callbackUrl": ""}Field Notes
- orderId — Your collection identifier
- billRefNumber — A reference number for the payment
- phoneNumber — Valid Mpesa phone number
- amount — An amount greater than 0
- narration — Description of the transaction
- callbackUrl — Your callback URL
Response
{ "result": { "collectionId": "xxxxxx-xxxxx-xxxx-xxxx", "isProcessing": true }, "errors": []}Your Callback URLCollection Callback
Callback dispatched to your URL once collection processing completes.
Response
{ "orderId": "", "billRefNumber": "", "phoneNumber": "", "amount": 0, "thirdPartyReference": "", "failReason": null, "isSuccessful": true}https://app.pochipay.com/api/v1/collections/mpesa/collection-queryCollection Query
Query collections using MpesaReference, BillReferenceNumber, or OrderId.
Headers
cURL Example
# By MpesaReferencecurl -X 'GET' \ 'https://app.pochipay.com/api/v1/collections/mpesa/collection-query?MpesaReference=TXXXX8KK3M' \ -H 'Authorization: Bearer eyJhbGci...'# By BillReferenceNumbercurl -X 'GET' \ 'https://app.pochipay.com/api/v1/collections/mpesa/collection-query?BillReferenceNumber=271025AAB58923ZY' \ -H 'Authorization: Bearer eyJhbGci...'# By OrderIdcurl -X 'GET' \ 'https://app.pochipay.com/api/v1/collections/mpesa/collection-query?OrderId=271025AAB58923ZY' \ -H 'Authorization: Bearer eyJhbGci...'Response
{ "result": { "phoneNumber": "2547xxxxxxxx", "orderId": "271025AAB58923ZY", "billReferenceNumber": "ABC947578", "narration": "test", "amount": 10, "resultCode": "0", "resultDescription": "The service request is processed successfully.", "mpesaReference": "TXXXX8KK3M", "isSuccessful": true, "status": "Complete", "isOfflinePayment": false }, "errors": []}https://app.pochipay.com/api/v1/collections/mpesa/transaction-statusCollection Status
Check the status of an Mpesa collection when you missed the callback.
Headers
Request Body
{ "collectionId": "" }Response
{ "result": { "orderId": "your-order-id", "billRefNumber": "bill-ref", "phoneNumber": "254712345678", "amount": 100, "thirdPartyReference": "mpesa-reference", "failReason": null, "isSuccessful": true }, "message": "success", "errors": []}