Kenya API Reference (Merchant Server)
All endpoints use HMAC authentication on https://api.transacty.ai. Live API keys
only — a test key returns 503 payment_unavailable. The kenya market must
be approved (and KYC verified) or /v1/ke/* returns 403 market_not_enabled.
Settlement currency is KES. Native ledger — no FX swap to USDC/USDT.
Collect
| Method | Path | Scope | Purpose |
|---|---|---|---|
POST | /v1/ke/collects | payin:create | Create M-Pesa collect. Idempotency-Key required |
GET | /v1/ke/collects/:transactionId | payin:create | Get collect status |
Payout
| Method | Path | Scope | Purpose |
|---|---|---|---|
GET | /v1/ke/payouts/fee-quote | payout:create | Preview rail fees (?amount=) |
POST | /v1/ke/payouts | payout:create | Create M-Pesa payout (MSISDN + name inline). Idempotency-Key required |
GET | /v1/ke/payouts/:transactionId | payout:create | Get payout status |
Shared read endpoints
| Method | Path | Notes |
|---|---|---|
GET | /v1/transactions | Filter type=payin|payout only; then filter rail === "kenya" in your app |
GET | /v1/transactions/:transactionId | Status poll; same rail fields |
GET | /v1/balance | Read items[] — Kenya is KES |
PATCH | /v1/me/webhook | Register the URL for Transacty → merchant events |
Settlement
- Collect credits the KES wallet when the collection is credited.
- Payouts debit KES (amount + platform payout fees) on create and send to an M-Pesa MSISDN.
KESis a separate wallet pocket.- Limits: collect 20–145,000 KES; payout 20–250,000 KES.
Webhook events
When configured, Transacty sends payin.completed / payin.failed and
payout.completed / payout.failed. Payload currency for KES money movements is
KES. The same webhook URL serves all rails. See Webhooks.
Last updated on