A payment link is a hosted checkout page that Kotani Pay generates for you. Create the link once, share the URL anywhere, and Kotani Pay handles the checkout experience. No need to build your own payment form.Documentation Index
Fetch the complete documentation index at: https://developers.kotanipay.com/llms.txt
Use this file to discover all available pages before exploring further.
Before You Start
- An API key — see API Keys
- A fiat wallet for the currency you’re collecting in
- A
callbackUrlon your server for payment notifications
1. Create the Payment Link
CallPOST /api/v3/payment-links. At a minimum you’ll configure:
- Pricing type — fixed amount, variable (customer chooses within a range), package tiers, or open customer choice
- Payment methods — which of mobile money, bank checkout, card, and crypto to enable
- Usage limit — single-use, limited to a max count, or unlimited
- callbackUrl — where to receive payment notifications
https://pay.kotanipay.com/l/{shortCode}). Share it via SMS, email, social, or embed it as a button.
2. Customer Pays
The customer opens the link in their browser. What happens next depends on the method they select:- Mobile money — the customer enters their phone number; Kotani Pay sends an STK push or USSD prompt; the customer confirms with their PIN
- Bank checkout — the customer is redirected to the bank’s hosted page to authenticate and authorise the payment
- Card — the customer enters card details on a secure page; 3DS challenge is handled inline if required
- Crypto — Kotani Pay shows a deposit address and QR code; the customer sends from their own wallet; the page updates as confirmations arrive
3. Kotani Pay Notifies You
Payment link transactions are backed by standard deposit transactions. When a payment settles, Kotani Pay fires atransaction.deposit.status.updated event to your callbackUrl. The payload includes the standard deposit fields plus identifiers for the originating payment link.
SUCCESSFUL— payment received, your deposit balance will be creditedFAILED— payment failed or timed out
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.4. Poll for Status
GET /api/v3/payment-links/transactions/:referenceId— status of a specific paymentGET /api/v3/payment-links/:shortCode/transactions— all payments for a given link
Monitoring from the Dashboard
- Log in to backoffice.kotanipay.com
- Navigate to Payment Links in the left sidebar
- Click any link to see all transactions associated with it