Changelog
Every partner-visible change to the API contract, callback shape, or error codes.
v2.5 — 2026-10-13
- Optional section shrunk to 3 fields on
POST /inbound. The following five are promoted to Required:permanent_addressreceiver_birthplacesender_msisdn(send""for cash-counter and web-only channels)sender_middle_name(send""when the sender has no middle name)receiver_middle_name(send""when the receiver has no middle name)
- Remaining optional fields:
reason_details,provider_name,callback_url— all three are either internal metadata or a per-request override of a merchant-channel default. - Updated the full-compliance curl example to include all newly-required fields.
- No change to error codes, response shape, callbacks or auth.
v2.4 — 2026-10-13
- 5 fields promoted to hard-required on
POST /inbound(previously documented as optional). Vodacom's M-Pesa IMT transfer step rejects the live payout withINS-10005when any of these are missing, even though the switch accepts validation. Enforcing them at submission withRMT-1005avoids a late silent Submitted → Failed transition:sender_citycurrent_addressprofessiondocument_issue_datedocument_expiration_date
- No change to error codes, response shape, callbacks or auth.
v2.3 — 2026-10-07
- New guide: Sandbox testing covering default test MSISDNs per operator, prefix validation rules, mock callback format (
SIMULATED-/SIM-references), the 1 USD per-transaction cap (RMT-9003), theX-Skip-Name-Checkheader workaround for the M-Pesa pre-validation step, how to top up a sandbox wallet, and the real-switch dry-run option before Go Live. - No API contract change. Auth, endpoint URLs, callback contract, required fields unchanged.
v2.2 — 2026-08-14
reason_of_transactionenum extended with 12 new values to align with the finer-grained WakapaypurposeOfTransferset. Full enum now 23 values (was 11).- New values:
INVESTMENT,CONSTRUCTION,RENT,GENERAL,FUEL,REPAIRS,PERSONAL_CARE,FOOD_AND_GROCERIES,TRANSPORT,SHOPPING,ENTERTAINMENT,DONATIONS. - No other API contract change. Auth, endpoint URLs, callback contract, required fields unchanged.
v2.1 — 2026-08-13
- 8 KYC fields promoted from soft-required to hard-required on
/inboundper BCC RTS Art.66 Instr.15 + FATF R.16:sender_birthplacesender_document_type(enum:PASSPORT,NATIONAL_ID,DRIVING_LICENCE,VOTER_CARD,OTHER)reason_of_transaction(enum, then 11 values, extended to 23 in v2.2)source_of_funds(enum, 10 values)receiver_birthdatereceiver_document_typereceiver_document_numberreceiver_current_addressorreceiver_permanent_address(either-or, new codeRMT-1018when both missing)
- Corrected:
sender_birthdatewas already required since 2026-07-23; docs finally aligned. - Documented as permanent optional with rationale:
sender_msisdn,reason_details,sender_middle_name,receiver_middle_name. - New error codes:
RMT-1015(invalidsender_document_type),RMT-1016(invalidreason_of_transaction),RMT-1017(invalidsource_of_funds),RMT-1018(bothreceiver_*_addressmissing).
v2.0 — 2026-06-25
- Mandatory
expected_receiver_nameon/inbound(FATF R.16 aggregator KYC). - Live name match in the
/account-lookupresponse (name_matchblock). - New endpoint
GET /transactions/{reference}/timelinefor full per-transaction event audit. - Multi-currency sender support — EUR, NGN, GHS, UGX, CAD in addition to USD.
- New endpoint
GET /remittance/rate/livefor on-demand FX rates. - New error codes
RMT-1005(missing field),RMT-4006(name mismatch),RMT-9001(endpoint disabled). /outboundexplicitly disabled (RMT-9001) until further notice.- Receiver currency on DRC corridor confirmed as USD-only.
v1.0 — 2026-03-26
- Initial release.
- Endpoints:
/inbound,/balance,/transactions,/transaction/status,/rate, plus HMAC-SHA256 webhook contract.
