Escrow Safe Trade is live: protect your next high-value deal Learn more
ProductsPayment 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
SolutionsMerchantsBuyersChama groupsBusiness solutionsIndustries
Pricing
DevelopersDeveloper overviewQuickstart, auth and sandboxREST APIsCheckout, invoices and requestsWebhooksSigned, real-time eventsWallet-as-a-ServiceVirtual sub-accountsDocumentationGuides and API reference
Security
CompanyAbout usCareersPartnersBlogHelp 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

MethodPathSummary
GET/currenciesList enabled currencies (session required).

Checkout sessions6 endpoints

MethodPathSummary
POST/checkout/sessionsCreate a new checkout session.
GET/checkout/sessions/:idRetrieve a checkout session by ID to check payment status.
POST/checkout/requestsPOS-focused helper endpoint.
POST/checkout/discovery/paybillBusiness paypoint helper: create a custom-amount hosted checkout.
POST/checkout/sessions/:id/payInitiate payment on an existing checkout session.
POST/checkout/sessions/:id/cancelCancel an active checkout session when the customer exits payment or requests cancellation.
MethodPathSummary
POST/payment-links

Invoices & recurring billing6 endpoints

MethodPathSummary
POST/invoicesCreate an invoice. Requires business_id when using API key auth.
GET/invoicesList invoices for your business.
GET/invoices/:idRetrieve invoice status (paid, pending, amount_remaining).
POST/invoices/:id/sendEmail or SMS the invoice link to the customer (includes payment_url ).
GET/invoices/:id/publicNo authentication — used by the hosted payment page.
POST/invoices/:id/checkoutNo authentication — start M-PESA payment from your own UI (returns hosted_url ).

Subscriptions7 endpoints

MethodPathSummary
POST/billing/customersCreate billing customer
POST/billing/productsCreate product
POST/billing/pricesRecurring price ( amount minor units, interval day|week|month|year)
POST/subscriptionsCreate subscription; returns payment_url for first invoice
POST/subscriptions/checkoutCreate a subscription and return a checkout URL
POST/subscriptions/:id/cancel|pause|resumeCancel, pause, or resume a subscription
GET/subscriptions/portalCustomer portal (subscription_id + email or phone)

Donations8 endpoints

MethodPathSummary
GET/donations/campaignsList campaigns
POST/donations/campaignsCreate draft campaign (purpose + beneficiary required)
PATCH/donations/campaigns/:idUpdate campaign; set status to active|paused|closed
GET/donations/giftsList gifts (optional campaign_id, q)
GET/donations/campaigns/:id/exportCSV export of gifts/receipts
GET/donations/public/:slugPublic campaign payload
POST/donations/public/:slugWallet pay (signed-in donor)
POST/donations/public/:slug/mpesa-checkoutCreate M-Pesa STK checkout session

Reconciliation2 endpoints

MethodPathSummary
GET/mp/c2b/reconciliationList unmatched callback items and candidate checkout sessions.
POST/mp/c2b/reconciliation/:unmatchedId/matchResolve one unmatched callback by matching it to a checkout session.

Wallets & conversion3 endpoints

MethodPathSummary
GET/wallets/convert/quoteQuery: from_wallet_id , to_wallet_id , amount (minor units in source currency).
POST/wallets/convert
POST/walletsCreate an additional currency wallet: { currency: "USD", wallet_type: "individual" } .

Wallet-as-a-Service16 endpoints

MethodPathSummary
GET/businesses/:id/waasWaaS settings (enable, reserved, manual/API deposit toggles)
PATCH/businesses/:id/waasWaaS settings (enable, reserved, manual/API deposit toggles)
GET/waas/virtual-accountsList/create VAs (?include_ledger=1). Body: external_id, display_name?, display_identifier?. Response includes mpesa_account_number
POST/waas/virtual-accountsList/create VAs (?include_ledger=1). Body: external_id, display_name?, display_identifier?. Response includes mpesa_account_number
GET/waas/virtual-accounts/:idGet/update VA (status, display_name, display_identifier; ?include_transactions=1)
PATCH/waas/virtual-accounts/:idGet/update VA (status, display_name, display_identifier; ?include_transactions=1)
POST/waas/deposits/intentTime-bound PayBill deposit intent
GET/waas/deposits/intent/:idDeposit intent status
POST/waas/deposits/checkoutHosted checkout session (wallet + M-Pesa)
POST/waas/deposits/stkCheckout + one-shot M-Pesa STK
POST/waas/withdrawWithdraw to M-Pesa or Paysasa wallet (fee_bearer: master|va)
GET/waas/withdraw/quoteQuote fee + debits (?amount=&fee_bearer=)
GET/waas/withdraw/statusPoll withdrawal (?transaction_id= or ?reference=)
GET/waas/transactionsWaaS tx history (?external_id=, ?virtual_account_id=, ?type=)
GET/waas/reconciliationMaster wallet vs aggregates snapshot
POST/waas/sandbox/simulate-depositSandbox-only simulated C2B (test API keys)

Payroll4 endpoints

MethodPathSummary
GET/ext/payroll/employeesList employees for a business
POST/ext/payroll/employeesCreate an employee
POST/ext/payroll/runsCalculate or approve a payroll run (action in the body)
GET/ext/payroll/reportsStatutory reports and the P9 annual summary

Business ownership transfer3 endpoints

MethodPathSummary
GET/businesses/:id/ownership-transferOwner only. Returns { enabled, transfer } .
POST/businesses/:id/ownership-transferaction: "send_otp" with pin , or create request with toEmail , pin , otp , optional revokeApiKeys (default true).
DELETE/businesses/:id/ownership-transferBody/query transferId .

Lengo (Save Now, Buy Later)10 endpoints

MethodPathSummary
POST/lengo/offersCreate a merchant Lengo offer using your business API key or an authenticated dashboard session.
POST/lengo/goalsCustomer-authenticated route to create a Lengo goal from an existing merchant offer.
POST/lengo/goals/:id/depositDeposit from the customer's active personal wallet into the savings wallet backing the Lengo goal.
GET/lengo/offersPublic catalog list. Filter by business_id , business_slug , external_product_id (requires business_id), status , currency , page…
GET/lengo/offers/resolveSingle-call resolver for embed widgets: pass offer_id or business_id + external_product_id .
GET/lengo/storespaginated businesses with active Lengo offers ( page , limit )
GET/lengo/goalscustomer goals (paginated)
GET/lengo/merchant/offerspaginated
GET/lengo/merchant/goalspaginated
GET/lengo/merchant/overview

Deni (IOUs)5 endpoints

MethodPathSummary
POST/deni
GET/deni?role=creditor|debtor|all
PATCH/deni/:idCreditor adjusts remaining balance; debtor is notified.
POST/deni/:id/remindBody: { "channels": ["sms","email"] }
POST/deni/:id/payAuthenticated debtor wallet + PIN (P2P fees).

POS Lite1 endpoint

MethodPathSummary
POST/posComplete a sale or push a catalogue item (action in the body)

eTIMS (KRA)11 endpoints

MethodPathSummary
POST/etims/invoicesCreate fiscal invoice (QUEUED or PENDING_MANUAL)
GET/etims/invoices/:idFetch status + KRA CU / QR when accepted
POST/etims/invoices/:id/confirm-manual-filingMark PENDING_MANUAL as filed (CU #)
GET/etims/invoicesList recent documents (?status=&limit=)
POST/etims/credit-notesCreate credit note (needs originalDocumentId)
GET/etims/reports/manual-exportCSV export for KRA portal re-entry
GET/etims/itemsList item ↔ KRA classification mappings
POST/etims/itemsUpsert item mapping
GET/etims/tax-codesTax types (A–E)
GET/etimsAccount setup / activate (dashboard + API)
POST/etimsAccount setup / activate (dashboard + API)

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