API reference
Every endpoint in one place
A flat index of the 84 documented endpoints, grouped by area. Select a path to jump to its full description and examples.
Base URL
https://api.paysasa.com/api/v1Authx-api-keyFormatJSON
84 endpoints
Multi-currency & amounts1 endpoint
| Method | Path | Summary |
|---|---|---|
| GET |
/currencies
|
List enabled currencies (session required). |
Checkout sessions6 endpoints
| Method | Path | Summary |
|---|---|---|
| POST |
/checkout/sessions
|
Create a new checkout session. |
| GET |
/checkout/sessions/:id
|
Retrieve a checkout session by ID to check payment status. |
| POST |
/checkout/requests
|
POS-focused helper endpoint. |
| POST |
/checkout/discovery/paybill
|
Business paypoint helper: create a custom-amount hosted checkout. |
| POST |
/checkout/sessions/:id/pay
|
Initiate payment on an existing checkout session. |
| POST |
/checkout/sessions/:id/cancel
|
Cancel an active checkout session when the customer exits payment or requests cancellation. |
Payment links1 endpoint
| Method | Path | Summary |
|---|---|---|
| POST |
/payment-links
|
Invoices & recurring billing6 endpoints
| Method | Path | Summary |
|---|---|---|
| POST |
/invoices
|
Create an invoice. Requires business_id when using API key auth. |
| GET |
/invoices
|
List invoices for your business. |
| GET |
/invoices/:id
|
Retrieve invoice status (paid, pending, amount_remaining). |
| POST |
/invoices/:id/send
|
Email or SMS the invoice link to the customer (includes payment_url ). |
| GET |
/invoices/:id/public
|
No authentication — used by the hosted payment page. |
| POST |
/invoices/:id/checkout
|
No authentication — start M-PESA payment from your own UI (returns hosted_url ). |
Subscriptions7 endpoints
| Method | Path | Summary |
|---|---|---|
| POST |
/billing/customers
|
Create billing customer |
| POST |
/billing/products
|
Create product |
| POST |
/billing/prices
|
Recurring price ( amount minor units, interval day|week|month|year) |
| POST |
/subscriptions
|
Create subscription; returns payment_url for first invoice |
| POST |
/subscriptions/checkout
|
Create a subscription and return a checkout URL |
| POST |
/subscriptions/:id/cancel|pause|resume
|
Cancel, pause, or resume a subscription |
| GET |
/subscriptions/portal
|
Customer portal (subscription_id + email or phone) |
Donations8 endpoints
| Method | Path | Summary |
|---|---|---|
| GET |
/donations/campaigns
|
List campaigns |
| POST |
/donations/campaigns
|
Create draft campaign (purpose + beneficiary required) |
| PATCH |
/donations/campaigns/:id
|
Update campaign; set status to active|paused|closed |
| GET |
/donations/gifts
|
List gifts (optional campaign_id, q) |
| GET |
/donations/campaigns/:id/export
|
CSV export of gifts/receipts |
| GET |
/donations/public/:slug
|
Public campaign payload |
| POST |
/donations/public/:slug
|
Wallet pay (signed-in donor) |
| POST |
/donations/public/:slug/mpesa-checkout
|
Create M-Pesa STK checkout session |
Reconciliation2 endpoints
| Method | Path | Summary |
|---|---|---|
| GET |
/mp/c2b/reconciliation
|
List unmatched callback items and candidate checkout sessions. |
| POST |
/mp/c2b/reconciliation/:unmatchedId/match
|
Resolve one unmatched callback by matching it to a checkout session. |
Wallets & conversion3 endpoints
| Method | Path | Summary |
|---|---|---|
| GET |
/wallets/convert/quote
|
Query: from_wallet_id , to_wallet_id , amount (minor units in source currency). |
| POST |
/wallets/convert
|
|
| POST |
/wallets
|
Create an additional currency wallet: { currency: "USD", wallet_type: "individual" } . |
Wallet-as-a-Service16 endpoints
| Method | Path | Summary |
|---|---|---|
| GET |
/businesses/:id/waas
|
WaaS settings (enable, reserved, manual/API deposit toggles) |
| PATCH |
/businesses/:id/waas
|
WaaS settings (enable, reserved, manual/API deposit toggles) |
| GET |
/waas/virtual-accounts
|
List/create VAs (?include_ledger=1). Body: external_id, display_name?, display_identifier?. Response includes mpesa_account_number |
| POST |
/waas/virtual-accounts
|
List/create VAs (?include_ledger=1). Body: external_id, display_name?, display_identifier?. Response includes mpesa_account_number |
| GET |
/waas/virtual-accounts/:id
|
Get/update VA (status, display_name, display_identifier; ?include_transactions=1) |
| PATCH |
/waas/virtual-accounts/:id
|
Get/update VA (status, display_name, display_identifier; ?include_transactions=1) |
| POST |
/waas/deposits/intent
|
Time-bound PayBill deposit intent |
| GET |
/waas/deposits/intent/:id
|
Deposit intent status |
| POST |
/waas/deposits/checkout
|
Hosted checkout session (wallet + M-Pesa) |
| POST |
/waas/deposits/stk
|
Checkout + one-shot M-Pesa STK |
| POST |
/waas/withdraw
|
Withdraw to M-Pesa or Paysasa wallet (fee_bearer: master|va) |
| GET |
/waas/withdraw/quote
|
Quote fee + debits (?amount=&fee_bearer=) |
| GET |
/waas/withdraw/status
|
Poll withdrawal (?transaction_id= or ?reference=) |
| GET |
/waas/transactions
|
WaaS tx history (?external_id=, ?virtual_account_id=, ?type=) |
| GET |
/waas/reconciliation
|
Master wallet vs aggregates snapshot |
| POST |
/waas/sandbox/simulate-deposit
|
Sandbox-only simulated C2B (test API keys) |
Payroll4 endpoints
| Method | Path | Summary |
|---|---|---|
| GET |
/ext/payroll/employees
|
List employees for a business |
| POST |
/ext/payroll/employees
|
Create an employee |
| POST |
/ext/payroll/runs
|
Calculate or approve a payroll run (action in the body) |
| GET |
/ext/payroll/reports
|
Statutory reports and the P9 annual summary |
Business ownership transfer3 endpoints
| Method | Path | Summary |
|---|---|---|
| GET |
/businesses/:id/ownership-transfer
|
Owner only. Returns { enabled, transfer } . |
| POST |
/businesses/:id/ownership-transfer
|
action: "send_otp" with pin , or create request with toEmail , pin , otp , optional revokeApiKeys (default true). |
| DELETE |
/businesses/:id/ownership-transfer
|
Body/query transferId . |
Lengo (Save Now, Buy Later)10 endpoints
| Method | Path | Summary |
|---|---|---|
| POST |
/lengo/offers
|
Create a merchant Lengo offer using your business API key or an authenticated dashboard session. |
| POST |
/lengo/goals
|
Customer-authenticated route to create a Lengo goal from an existing merchant offer. |
| POST |
/lengo/goals/:id/deposit
|
Deposit from the customer's active personal wallet into the savings wallet backing the Lengo goal. |
| GET |
/lengo/offers
|
Public catalog list. Filter by business_id , business_slug , external_product_id (requires business_id), status , currency , page… |
| GET |
/lengo/offers/resolve
|
Single-call resolver for embed widgets: pass offer_id or business_id + external_product_id . |
| GET |
/lengo/stores
|
paginated businesses with active Lengo offers ( page , limit ) |
| GET |
/lengo/goals
|
customer goals (paginated) |
| GET |
/lengo/merchant/offers
|
paginated |
| GET |
/lengo/merchant/goals
|
paginated |
| GET |
/lengo/merchant/overview
|
Deni (IOUs)5 endpoints
| Method | Path | Summary |
|---|---|---|
| POST |
/deni
|
|
| GET |
/deni?role=creditor|debtor|all
|
|
| PATCH |
/deni/:id
|
Creditor adjusts remaining balance; debtor is notified. |
| POST |
/deni/:id/remind
|
Body: { "channels": ["sms","email"] } |
| POST |
/deni/:id/pay
|
Authenticated debtor wallet + PIN (P2P fees). |
POS Lite1 endpoint
| Method | Path | Summary |
|---|---|---|
| POST |
/pos
|
Complete a sale or push a catalogue item (action in the body) |
eTIMS (KRA)11 endpoints
| Method | Path | Summary |
|---|---|---|
| POST |
/etims/invoices
|
Create fiscal invoice (QUEUED or PENDING_MANUAL) |
| GET |
/etims/invoices/:id
|
Fetch status + KRA CU / QR when accepted |
| POST |
/etims/invoices/:id/confirm-manual-filing
|
Mark PENDING_MANUAL as filed (CU #) |
| GET |
/etims/invoices
|
List recent documents (?status=&limit=) |
| POST |
/etims/credit-notes
|
Create credit note (needs originalDocumentId) |
| GET |
/etims/reports/manual-export
|
CSV export for KRA portal re-entry |
| GET |
/etims/items
|
List item ↔ KRA classification mappings |
| POST |
/etims/items
|
Upsert item mapping |
| GET |
/etims/tax-codes
|
Tax types (A–E) |
| GET |
/etims
|
Account setup / activate (dashboard + API) |
| POST |
/etims
|
Account setup / activate (dashboard + API) |
No endpoint matches that filter.
Paths are relative to the base URL above. Parameters in a path such as :id are
placeholders you replace.