Skip to main content

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 your wallet_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.
  1. Quote with order_type: OffRamp, crypto_amount, Polygon USDT asset, refund_address
  2. Accept → for live, read payment_instructions.crypto_deposit
  3. Sandbox: wait for webhook; production: customer sends exact amount before expires_at
  4. Webhook order.settled when fiat is paid out to momo
OffRamp deposit address is per order from accept. Do not reuse across orders. Sandbox on-chain sends (e.g. testnet USDC/USDT) are not a supported settle path — use the Successful name trigger instead.

Bank rail

Use payment_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).
For momo, use catalog or payment-methods only — 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; set customer_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.