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
Get started

Multi-Currency & Amounts

Amounts are always integers in the smallest currency unit. Learn how that works for KES, USD and zero-decimal currencies, and which payment rails need which currency.

Base URLhttps://api.paysasa.com/api/v1Authx-api-keyFormatJSON

All money-moving APIs use minor units (integer amounts). For KES and USD this is cents (100 minor = 1.00). UGX and similar zero-decimal currencies use 1 minor = 1 unit. Only currencies enabled for your account are accepted; disabled codes return 400.

GET/currencies#

List enabled currencies (session required). Use this to populate checkout and wallet selectors.

JavaScript
const res = await fetch("https://api.paysasa.com/api/v1/currencies", { credentials: "include" });
const { currencies } = await res.json();
// [{ code: "KES", name: "Kenyan Shilling", decimal_places: 2, is_base: 0 }, ...]
Payment rails: M-Pesa checkout and withdrawals require KES. PayPal top-up settles to USD. Other pairs use wallet balance and conversion.