Skip to Content
DocsApi ReferenceData Models

UssdPushRequest

ParameterTypeDescription
merchantRequestIdStringUnique transaction ID
businessShortCodeNumericOrganization’s shortcode (5-6 digits)
passkeyStringPasskey
transactionTypeStringTransaction type: “CustomerPayBillOnline” or “CustomerBuyGoodsOnline”
amountNumericTransaction amount (whole numbers only)
partyANumericSender’s phone number (12-digit Safaricom number)
partyBNumericReceiver’s shortcode (5-6 digits)
phoneNumberNumericPhone number to receive STK Pin Prompt
transactionDescStringAdditional info/comment (max 13 characters)
callBackUrlURLSecure URL for receiving API notifications
accountReferenceAlpha-NumericIdentifier for the transaction (max 12 characters)
referenceDataListAdditional reference data
UssdPushRequest request = UssdPushRequest.builder() .merchantRequestId("Partner name some testing") .businessShortCode("1020") .passkey("2324343") .transactionType("CustomerPayBillOnline") .amount("20") .partyA("251777890420") .partyB("1020") .phoneNumber("251777890420") .transactionDesc("Payment Reason") .callBackUrl("https://www.myservice.com/result") .accountReference("Partner Unique ID") .referenceData(List.of(new ReferenceData("ThirdPartyReference", "Ref-12345"))) .build();

PayOutRequest

ParameterTypeDescription
originatorConversationIDStringUnique transaction ID
initiatorNameStringAPI user initiating the request
securityCredentialStringEncrypted password
commandIDStringTransaction type
partyAStringSender’s shortcode
partyBStringReceiver’s phone number
amountintTransaction amount
remarksStringTransaction details
occasionStringAdditional transaction info
queueTimeOutURLStringTimeout callback URL
resultURLStringResult callback URL
PayOutRequest request = PayOutRequest.builder() .originatorConversationID("Partner name some testing") .initiatorName("apitest") .securityCredential("ENCODED_CREDENTIAL") .commandID("BusinessPayment") .partyA("600982") .partyB("251700404709") .amount(10) .remarks("Pay to Customer") .occasion("PayOut") .queueTimeOutURL("https://www.myservice.com/result") .resultURL("https://www.myservice.com/result") .build();

TransactionStatusRequest

ParameterTypeDescription
initiatorStringAPI initiator name
securityCredentialStringEncrypted API user credential
commandIdStringTransaction type
transactionIdStringUnique transaction identifier
originalConversationIdStringGlobal unique transaction ID
partyAStringOrganization/MSISDN receiving the transaction
identifierTypeStringType of organization identifier
resultUrlStringCallback URL for transaction result
queueTimeoutUrlStringCallback URL for timeout notifications
remarksStringAdditional transaction information
occasionStringAdditional transaction occasion
TransactionStatusRequest request = TransactionStatusRequest.builder() .initiator("apitest") .securityCredential("ENCODED_CREDENTIAL") .commandId("TransactionStatusQuery") .transactionId("0") .originalConversationId("AG-20190826-0000777ab7d848b9e721") .partyA("1020") .identifierType("4") .resultUrl("https://www.myservice.com/result") .queueTimeoutUrl("https://www.myservice.com/result") .remarks("Trans Status") .occasion("Query trans status") .build();

TransactionReversalRequest

ParameterTypeDescription
originatorConversationIdStringUnique transaction ID
originalConversationIdStringOriginal transaction ID
initiatorStringAPI initiator name
securityCredentialStringEncrypted API user credential
commandIdStringTransaction type
transactionIdStringUnique transaction identifier
amountStringTransaction amount
receiverIdentifierTypeStringIdentifier type
receiverPartyStringPhone number initiating the transaction
resultUrlStringCallback URL for transaction result
queueTimeOutUrlStringCallback URL for timeout notifications
remarksStringTransaction description
occasionStringTransaction occasion
TransactionReversalRequest request = TransactionReversalRequest.builder() .originatorConversationId("Partner name -{{$guid}}") .originalConversationId("Partner name -{{$guid}}") .initiator("apitest") .securityCredential("ENCODED_CREDENTIAL") .commandId("TransactionReversal") .transactionId(" ") .amount("200") .receiverIdentifierType("1") .receiverParty("444000") .resultUrl("https://www.myservice.com/result") .queueTimeOutUrl("https://www.myservice.com/result") .remarks("B2C Reversal") .occasion("Payout") .build();

AccountBalanceRequest

ParameterTypeDescription
initiatorStringName of the API initiator
securityCredentialStringEncrypted API user credential
commandIDStringUse ‘AccountBalance’ as the command ID
partyAStringOrganization’s shortcode
identifierTypeStringType of organization identifier
remarksStringComments sent with the transaction
queueTimeoutURLStringURL for timeout callback notifications
resultURLStringURL for transaction result callback
AccountBalanceRequest request = AccountBalanceRequest.builder() .originatorConversationID("Partner name -{{$guid}}") .initiator("apitest") .securityCredential("ENCODED_CREDENTIAL") .commandID("AccountBalance") .partyA("1020") .identifierType("4") .remarks("Balance check") .queueTimeOutURL("https://www.myservice.com/result") .resultURL("https://www.myservice.com/result") .build();

SimulateRequest

ParameterTypeDescription
commandIDStringUnique command ID
amountStringTransaction amount
msisdnStringCustomer’s phone number
billRefNumberStringUnique reference number
shortCodeStringOrganization’s unique shortcode
SimulateRequest request = SimulateRequest.builder() .commandID("CustomerPayBillOnline") .amount("110") .msisdn("251945628580") .billRefNumber("091091") .shortCode("443443") .build();

RegisterUrlRequest

ParameterTypeDescription
shortCodeStringUnique number tagged to an M-PESA pay bill/till number of the organization
responseTypeStringAction if the validation URL is unreachable: “Completed” or “Cancelled”
commandIDStringUse “RegisterURL” to differentiate the service
confirmationURLURLURL that receives the confirmation request upon payment completion
validationURLURLURL that receives the validation request upon payment submission
RegisterUrlRequest request = RegisterUrlRequest.builder() .shortCode("123456") .responseType("Completed") .commandID("RegisterURL") .confirmationURL("https://www.myservice.com/confirmation") .validationURL("https://www.myservice.com/validation") .build();

C2BPaymentValidationRequest

ParameterTypeDescription
transTypeStringThe transaction type specified during the payment request (e.g., Buy Goods)
transIDStringUnique M-Pesa transaction ID for every payment request
transTimeStringTimestamp of the transaction in the format YYYYMMDDHHMMSS
transAmountStringAmount transacted, money paid by the customer (whole numbers only)
businessShortCodeStringOrganization’s shortcode (Paybill or Buygoods, 6 digits)
billRefNumberStringAccount number for which the customer is making the payment
invoiceNumberStringInvoice number for the payment
orgAccountBalanceStringCurrent utility account balance of the receiving organization shortcode
thirdPartyTransIDStringA transaction ID the partner can use to identify the transaction
msisdnStringMasked mobile number of the customer making the payment
firstNameStringCustomer’s first name as per the M-Pesa register
middleNameStringCustomer’s middle name as per the M-Pesa register
lastNameStringCustomer’s last name as per the M-Pesa register
kycInfoListA list of key-value pairs representing Know Your Customer (KYC) information
C2BPaymentValidationRequest request = C2BPaymentValidationRequest.builder() .transType("BuyGoods") .transID("LHG31AA5TX") .transTime("20240904T123000") .transAmount("100") .businessShortCode("123456") .billRefNumber("Bill123") .invoiceNumber("Invoice123") .orgAccountBalance("") .thirdPartyTransID("TP123456") .msisdn("25170****149") .firstName("John") .middleName("Doe") .lastName("Smith") .kycInfo(List.of(new KYCInfo("Key1", "Value1"), new KYCInfo("Key2", "Value2"))) .build();
Last updated on