Skip to main content
A deposit is a collection — money moves from your customer into your Kotani Pay deposit balance. There are three collection methods: mobile money, bank checkout, and card.
You need an API key and a reachable callbackUrl — see the Quickstart if you haven’t set those up. For this flow you also need a fiat wallet in the currency you’re collecting, and a customer record for the person paying.

Mobile Money Deposit

The most common collection method across Kenya, Uganda, Tanzania, Ghana, and other markets. 1. Create the customer if you haven’t already. The customer record holds the phone number and network details needed to trigger the collection. 2. Initiate the deposit — call Deposit via Mobile Money with your callbackUrl. The API responds immediately with a PENDING transaction. The customer has not paid yet. 3. The customer confirms. Depending on the network:
  • M-PESA / Airtel — STK push, customer enters PIN to approve
  • MTN / others — USSD prompt or SMS confirmation
4. Kotani Pay notifies you via your callbackUrl when the transaction settles:
  • SUCCESSFUL — funds collected, your deposit balance will be credited
  • FAILED — collection failed (declined, insufficient funds, timeout)
If you have a webhook secret configured, the callback arrives in a signed envelope with X-Kotani-Signature, X-Kotani-Event, and X-Kotani-Integrator headers. Without a secret, the transaction fields are posted directly to your callbackUrl. See Webhooks for both modes, and the deposit payload for every field you receive with a worked example.
5. Poll for status if needed — Get Deposit Mobile Money Status.

Bank Checkout Deposit

Call Bank Checkout Deposit with your callbackUrl, a customerRedirectUrl (where to send the customer after they finish paying), currency, amount, and a paymentMethod. What happens next depends on the currency and payment method — bank checkout is not one flow, it’s three: ZAR — CAPITECPAY or CARD. Kotani Pay returns a hosted checkout page. Redirect the customer to redirectUrl in the response; they complete payment there (Capitec Pay app or card entry) and are sent back to your customerRedirectUrl afterward. No manual reference entry — the hosted page handles matching the payment. KES — PAYBYBANK (PesaLink). There is no hosted page. The response includes a bankPaymentDetails object with bankName, accountName, accountNumber, amount, and reference. Show these to the customer so they can make a manual PesaLink transfer from their own banking app.
The customer must enter bankPaymentDetails.reference as the payment narrative/description in their banking app. This reference is how Kotani Pay matches the incoming transfer to this specific deposit — without it (or with the wrong value), the payment can’t be reconciled automatically.
NGN — Virtual account. The response’s bankPaymentDetails contains a one-time dedicated accountNumber (plus bankName, accountName, amount, expiresInMinutes). The customer pays the exact amount to that account from their own banking app before it expires. No narrative/reference is needed here — the account itself is unique to this transaction. Then, for all three: Kotani Pay notifies you via your callbackUrl when the bank confirms — same event structure as mobile money. Poll for status if needed — Bank Checkout Deposit Status.

Card Deposit

1. Initiate the charge — call Card Deposit with your callbackUrl. 2. Handle 3DS if required. If the response includes a redirect URL, send the customer there to complete 3D Secure authentication before the charge can settle. 3. Kotani Pay notifies you via your callbackUrl when the charge settles. 4. Poll for status if needed — Card Deposit Status.

Monitoring from the Dashboard

  1. Log in to backoffice.kotanipay.com
  2. Use the country and currency selector to filter by market
  3. Navigate to Collections in the left sidebar
Each row shows the reference, amount, status, customer, and timestamp. Click any row for the full detail including provider reference and callback history.
Successful deposits land in your deposit balance, not your payout balance. To use collected funds for withdrawals, transfer them to your payout balance first — see Balances & Settlement.