Documentation

East Africa Guide

Token-x is built for Africa's 300M+ mobile money users. This guide covers supported payment providers, per-country KYC configurations, FX rates, and regulatory context for each jurisdiction.

Payment Providers

M-Pesa Kenya

mpesa-ke

Safaricom STK push / C2B API

KES

Paybill 123456, account = investorID

M-Pesa Tanzania

vodacom-tz

Vodacom M-Pesa USSD + REST API

TZS

Supports mobile push and pull

Airtel Money

airtel

Airtel Money REST (collections + disbursements)

KES/UGX/ZMW

Kenya, Uganda, Zambia

MTN Mobile Money

mtn

MTN MoMo API — RequestToPay + Transfer

GHS/UGX/XOF

Ghana, Uganda, Côte d'Ivoire

Orange Money

orange

Orange Money REST

XOF/XAF

West/Central Africa

Wave

wave

Wave merchant payment links

XOF

Senegal, Côte d'Ivoire, Mali

PayShap

payshap

PayShap ISO 20022 / bank proxy lookup

ZAR

South Africa, instant EFT

Ozow

ozow

Ozow EFT + SHA-512 HashCheck

ZAR

South Africa

All mobile money payments are reconciled server-side via provider webhooks — the investor wallet is credited only after payment confirmation.

Supported Jurisdictions

CountryCurrencyKYC LevelRegulator
🇰🇪Kenya
KESbasic-kyc-levelCMA Kenya regulated
🇳🇬Nigeria
NGNbasic-kyc-levelSEC Nigeria, CBN
🇬🇭Ghana
GHSbasic-kyc-levelSEC Ghana
🇿🇦South Africa
ZARsa-kyc-levelFSCA, FIC, FICA
🇺🇬Uganda
UGXbasic-kyc-levelCMA Uganda
🇷🇼Rwanda
RWFbasic-kyc-levelCMA Rwanda
🇹🇿Tanzania
TZSbasic-kyc-levelCMSA Tanzania
🇸🇳Senegal
XOFbasic-kyc-levelAMF-UMOA
🇨🇮Côte d'Ivoire
XOFbasic-kyc-levelAMF-UMOA
🇪🇹Ethiopia
ETBbasic-kyc-levelNBE

FX Rate Coverage

FX rates are fetched every 30 minutes from an external API, cached in Redis, and surfaced viaGET /admin/fx-rates. The KES/USD pair is used as the base for East Africa subscription pricing.

KESNGNGHSZARUGXTZSXOFXAFETBZMWMWKMZNBWPRWF

KYC Flow (Sumsub)

  1. 1Investor clicks 'Complete KYC' — frontend calls POST /investors/kyc/start which returns a Sumsub applicantToken
  2. 2Sumsub WebSDK renders in-browser — investor submits ID document + selfie
  3. 3Sumsub webhook fires to POST /sumsub/webhook — platform parses reviewResult.reviewAnswer
  4. 4On GREEN: investor.kyc_status = 'approved', kyc_approved_at = now()
  5. 5SANCTIONS or PEP in reviewResult.rejectLabels → sanctions_flag / pep_flag = true — investor cannot be whitelisted regardless of manual override
  6. 6Wallet whitelist approval remains a separate step — Compliance Officer approves in the compliance portal