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
Wallets & money movement

Payroll

Run Kenyan statutory payroll programmatically with a business-scoped API key.

Base URLhttps://api.paysasa.com/api/v1AuthAuthorization: BearerFormatJSON

Paysasa Payroll for Kenya statutory runs. Authenticate with a business API key. The key is scoped to one business; pass that business_id on every request. Enable payroll under Business → Settings → Products first.

Employees#

Optional email and phone contact fields are used for payroll disbursement notifications. Default payout rail: wallet | mpesa | bank.

cURL
curl "https://api.paysasa.com/api/v1/ext/payroll/employees?business_id=biz_xxxxxxxxxxxxxxxx" \
  -H "Authorization: Bearer apk_live_<prefix>.<secret>"
cURL
curl -X POST "https://api.paysasa.com/api/v1/ext/payroll/employees" \
  -H "Authorization: Bearer apk_live_<prefix>.<secret>" \
  -H "Content-Type: application/json" \
  -d '{
    "business_id": "biz_xxxxxxxxxxxxxxxx",
    "employee_number": "E001",
    "first_name": "Jane",
    "last_name": "Doe",
    "email": "[email protected]",
    "phone": "254712345678",
    "basic_salary": 75000,
    "payment_method": "mpesa",
    "mobile_money_number": "254712345678"
  }'

Runs#

cURL
curl -X POST "https://api.paysasa.com/api/v1/ext/payroll/runs" \
  -H "Authorization: Bearer apk_live_<prefix>.<secret>" \
  -H "Content-Type: application/json" \
  -d '{
    "business_id": "biz_xxxxxxxxxxxxxxxx",
    "action": "calculate",
    "month": 8,
    "year": 2026
  }'
cURL
curl -X POST "https://api.paysasa.com/api/v1/ext/payroll/runs" \
  -H "Authorization: Bearer apk_live_<prefix>.<secret>" \
  -H "Content-Type: application/json" \
  -d '{
    "business_id": "biz_xxxxxxxxxxxxxxxx",
    "action": "approve",
    "run_id": "run_xxxxxxxxxxxxxxxx"
  }'

Reports#

cURL
curl "https://api.paysasa.com/api/v1/ext/payroll/reports?business_id=biz_xxxxxxxxxxxxxxxx&year=2026" \
  -H "Authorization: Bearer apk_live_<prefix>.<secret>"

# P9 annual summary
curl "https://api.paysasa.com/api/v1/ext/payroll/reports?business_id=biz_xxxxxxxxxxxxxxxx&year=2026&view=p9" \
  -H "Authorization: Bearer apk_live_<prefix>.<secret>"

Covers exports, statutory rates, and permissions for payroll runs and payment batches.