Reseller-initiated Customer Payment

This is one of the 2 ways a reseller can receive cash from their customers. In the Mobile Money space, this is achieved through USSD push or STK push. The customer receives a prompt to enter their mobile money account PIN.

This acts as consent and completes the transaction by transfering e-value from the customer's wallet to a business short code (Paybill) or to a merchant short code (Till). The Tanda I/O RESTful API supports this channel natively.

For easier reconciliations, Tanda handles the Mobile Money accountReference in a special way. The accountReference is built from the reseller's wallet A/c number and the customer's phone number using the format {resellerWallerAccout}{accountNumber}. The calling code is stripped from the accountNumber prior.

Expected command ID

  • CustomerPayment

Expected Service Provider ID(s)


Expected request parameters

  • amount (Transaction Amount)
  • accountNumber (Customer's mobile number)
  • merchantWallet (Merchant Collection Wallet Number issued by Tanda. This parameter is Optional)

Expected result parameters

  • transactionRef (Reference number generated by the MMO)

Customer-initiated Customer Payment

There is going to be a time when Reseller-initiated Customer Payment won't be suitable due to technical or business reasons. In that case, the customer will need:

  • Business number (Shared by Tanda)
  • Account Number {resellerWallerAccount}{customer's mobile number without calling code} e.g. if resellerWallerAccount = 123456, customer's mobile number = 07XXXXXXXX, then the Account number will be: 1234567XXXXXXXX


Configure your preferred callback URL and Basic Auth username and password from the Tanda Reseller Portal. All Customer-initiated customer payments will be POSTed to that callback URL.


Secure your callback URL using Basic Auth. The username and password are configured from the Tanda Reseller Portal

The configured callback URL MUST:

  • Accept POST HTTP requests
  • Accept application/json Content-Type
  • Be publicly accessible

The IPN request body should have the following JSON format:

  "wallet": {
    "id": {collectionsWalletId},
    "account": {collectionsWalletAccountNumber},
    "actual": {collectionsWalletActualBalance},
    "available": {collectionsWalleAvailableBalance},
    "currency": "KES"
  "customer": {
    "account": {customerMobileNumber},
    "name": {customerFullName}
  "transaction": {
    "id": {transactionId},
    "amount": {amount},
    "currency": "KES",
    "channel": {collectionChannel},
    "type": {D/W},
    "reference": {reference},
    "timestamp": "yyyy-MM-dd'T'HH:mm:ssZ"
Click Try It! to start a request and see the response here!