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.

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.

On this page