Balance and withdrawals

Money you collect is yours the moment your customer approves the prompt. There is no holding period. Here is exactly where it sits and how to take it.

Two numbers, not one

GET/v1/balance
Paste a key and send this exact request from your browser.
curl https://api.xendlypay.com/v1/balance \
  -H "Authorization: Bearer $XENDLY_KEY"
{
  "success": true,
  "payload": {
    "currency": "RWF",
    "mode": "live",
    "pending": 12000,
    "available": 48500
  },
  "timestamp": "2026-09-12T09:14:02.000Z"
}
What it is
pendingPayments the network has accepted but not yet confirmed: a prompt sitting on somebody's phone. Not money yet, and not counted as yours.
availableWhat you can pay out or withdraw right now, after fees. A collection lands here the moment it succeeds.

No holding period

Plenty of processors hold your money for a day or three. We do not. The instant a collection succeeds it is in available and you can withdraw it. The one thing you need first is a verified business, because Rwandan law requires us to know who is taking payments through our rails: that is a legal requirement, not a buffer we keep for our own convenience.

Where a payment's money goes

Following one 20,000 RWF collection all the way through:

WhenpendingavailableWhat happened
You create the paymentno changeno changeA prompt goes to your customer's phone. Nothing has moved; the payment is `pending`.
Customer approvesno change+19,500The full 20,000 arrives, our 500 fee comes off, and the rest is withdrawable straight away.
You withdrawno change−19,500It leaves for your own MoMo number.

Every one of those movements is a double-entry ledger transaction whose entries sum to zero. Balances are derived by summing entries, never stored in a column and adjusted, so a balance cannot drift away from the transactions that produced it, and every franc has a row naming where it came from.

Test and live never mix

Balances are scoped to a mode and kept on separate books. Both are real money, and only the live one is withdrawable: withdrawing is what verification gates. An app in test mode reading /v1/balancesees only test money, and no arithmetic anywhere in the system adds the two together.

Withdrawing

A withdrawal moves your available balance to the mobile money number on your account. It runs through exactly the same code as a payout, so there is one money-moving path to keep correct rather than two. All that differs is who asked and where it goes.

WhereDashboard → Withdraw
DestinationThe payout number on your account. Not chosen per withdrawal; that is what payouts are for.
RequiresA verified business. Live and test balances are one balance: both are real money, and a withdrawal draws on both.
Fee2.5%, the same as a cash in, on top of the amount
Minimum10,000 RWF. The network does not send less.
SpeedSeconds, like any payout.

Set a payout number first

Withdrawals refuse with a 400 until there is a number on the account. Set it in Settings . Set it to a number you control, because a withdrawal, like every payout, cannot be pulled back.

Not yet built

Bank withdrawals. Everything today lands on a mobile money wallet. Moving a balance to a BK or Equity account is a different rail with different settlement times and a different compliance conversation, and we would rather not have a half-built version of it. If your volume makes MoMo withdrawal limits painful, tell us. That is the signal that moves it up the list.