Escrow Safe Trade is live: protect your next high-value deal Learn more
Products Payment links & checkoutM-Pesa, cards, invoices, split payoutsEscrow Safe TradeMilestone and release-based escrowWallets & P2PPersonal and business walletsChama, Lengo & DeniGroup savings, goals and IOUsBusiness toolkitAccounting, payroll, POS, ticketingBulk payments & payrollPay many people in one uploadSubscriptions & billingRecurring plans and renewalsRent, loans & donationsCollections and campaignsAll products
Solutions MerchantsBuyersChama groupsBusiness solutionsIndustries
Pricing
Developers Developer overviewQuickstart, auth and sandboxREST APIsCheckout, invoices and requestsWebhooksSigned, real-time eventsWallet-as-a-ServiceVirtual sub-accountsDocumentationGuides and API reference
Security
Company About usCareersPartnersEvents & ticketsBlogHelp centreContact us
Log in Get started Talk to sales
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 URLhttps://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.
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)

Paths are relative to the base URL above. Parameters in a path such as :id are placeholders you replace.