Introduction
One API for collections and payouts across Rwanda, Uganda and the EU.
InversePay moves money in and out of mobile money wallets and bank accounts in Rwanda and Uganda, and SEPA accounts in the EU. You call one endpoint to collect and one to pay out; we choose the rail from the corridor.
What that means for your integration
You never name a partner. A charge in Rwandan francs settles through InTouchPay and one in Ugandan shillings through Xente, and if that changes it changes on our side — a routing table, not a release of your app.
Quickstart
A test key to a settled charge, in about ten minutes.
Sandbox
Test keys, simulated rails, and amounts that fail on purpose.
Authentication
API keys, scopes, and what a key may never do.
API reference
Generated from the running API, so it cannot drift.
The shape of everything
Amounts are minor units. 5,000 RWF is 500000. Nothing in the API accepts a
decimal amount, because a decimal amount is a rounding argument waiting to
happen.
Writes need an idempotency key. Send the same key again and you get the original object back, not a second one. This is how you retry safely after a timeout, which is the only sane thing to do when you did not hear our answer.
Test and live never mix. A test key cannot see live data and a live key cannot see test data — including idempotency keys, so the order references you used while building do not collide with the real ones later.