Xendly Pay

Xendly Pay moves Rwandan francs over MTN MoMo and Airtel Money. One HTTPS API, signed webhooks, and a test mode you can build the whole thing against before anyone verifies anything.

What this is

Two things move money, and everything else is reporting on them:

What it doesEndpoint
Cash inTakes money from a customer's wallet. They approve a prompt on their phone.POST /v1/payments
Cash outSends money to a wallet: a supplier, a refund, a payout.POST /v1/payouts

Both are asynchronous. Both return a pending transaction and tell you the outcome by webhook.

What we support

CountryRwanda
CurrencyRWF only. Amounts are integers, so there are no cents.
NetworksMTN MoMo and Airtel Money. We route on the number; you do not choose.
SettlementAvailable as soon as a payment succeeds. No holding period.
Fee2.5% per successful cash in, and the same on a cash out. Failed payments cost nothing.

RWF, and only RWF

There is no currency conversion here and no other market. If you need to charge someone in dollars, this is not the product, yet.

Base URL

https://api.xendlypay.com

Everything is HTTPS and JSON. There is one base URL for both test and live. The key decides which world you are in, not the hostname, so going live never means changing a URL.

Your first payment

curl https://api.xendlypay.com/v1/payments \
  -H "Authorization: Bearer $XENDLY_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: order-1043" \
  -d '{
    "amount": 5000,
    "currency": "RWF",
    "msisdn": "250781234567",
    "description": "Order #1043",
    "reference": "1043",
    "metadata": { "order_id": "1043" }
  }'

That returns a transaction in pending. Your customer now has a prompt on their phone. What happens next is worth two minutes before you build anything else.