Kenya (KE / KES)
Kenya supports M-PESA mobile money and bank rails for OnRamp and OffRamp.Discovery
Sandbox test values
Full matrix: Sandbox success & failure. Sandbox only — live uses real customer phones / accounts.Example network IDs (sandbox — verify via catalog)
OnRamp (momo)
Customer pays KES via M-PESA → receives USDC/USDT on yourwallet_address.
See Quickstart for a full curl.
OffRamp (momo)
Use Polygon USDT on the quote:
Sandbox: do not send crypto on-chain. Include
Successful in customer.name and use success phone +2541111111111 so the crypto leg auto-credits. Details: Sandbox success & failure.
Production: after accept, the customer sends the exact crypto amount to the deposit wallet in data.accepted.payment_instructions.crypto_deposit before expires_at.
- Quote with
order_type: OffRamp,crypto_amount, Polygon USDTasset,refund_address - Accept → for live, read
payment_instructions.crypto_deposit - Sandbox: wait for webhook; production: customer sends exact amount before
expires_at - Webhook
order.settledwhen fiat is paid out to momo
Bank rail
Usepayment_method.type: bank and network_id from payment-methods (preferred) or catalog. Provider lists differ by direction — look up with the same country and order_type as the quote (do not reuse an OnRamp id on OffRamp).
GET /partner/banks returns 422 for mobile_money and is not the primary path for African local fiat bank institutions.
Institution (B2B)
Same OnRamp/OffRamp quote body as retail; setcustomer_type: "institution" and customer.type: "institution". Required customer fields: uid, business_name, business_id, email — no DOB, national ID, or personal name. business_id is the paying business’s legal registration/tax id (not an Element Pay console id).
For bank rails, the payee is payment_method.account_name + account_number + network_id (payee company may differ from the paying business). Discover exact fields with customer_type=institution on order-requirements (above). Copy-paste OffRamp bank example: Sandbox test payloads.