Live in the Republic of Congo · XAF

Mobile money collections and payouts, in seconds.

One REST API to collect from and pay out to mobile money wallets. Asynchronous, idempotent and webhook-driven, so your platform never waits on a network round trip.

Two endpoints move money. The rest tell you what happened.

POST /v1/payments XAF 11 800 → 242•••••1331
202Accepted
pendingCustomer prompt
processingWith operator
successWebhook sent
idempotency_key X-Maly-Signature payment.succeeded balance updated
What it does

Money in. Money out.

The API moves value in two directions over mobile money. Everything else in the reference exists to tell you where a transaction stands and what it did to your balance.

← collect

Collections

Pull funds from a customer's mobile money wallet into your position. The customer approves the prompt on their handset; you get a webhook the moment it settles.

  • Deposits, top-ups, checkout, subscriptions
  • Line items and tax recorded on the payment
  • Ends success, failed or expired
payout →

Disbursements

Push funds out to a customer's wallet. There is no approval step and nothing to time out, so a payout either succeeds or fails.

  • Refunds, winnings, payroll, marketplace payouts
  • Reserved against your balance at submission
  • Ends success or failed
Built for volume

Designed so nothing blocks.

Mobile money is slow and unreliable underneath. The API is shaped so that never becomes your problem.

Asynchronous by default

Every create returns 202 immediately and settles later by webhook. No polling loops, no threads parked waiting on an operator.

Safe to retry

Every payment and payout carries an idempotency key, so a timeout or a retry can never charge a customer twice.

Signed webhooks

HMAC-SHA256 over the timestamp and raw body, with a five-minute replay window. Verification is a few lines in any language.

Integration

A collection, end to end.

Amounts are minor units as strings. Phone numbers are digits only. That is most of what you need to know before your first call.

# Collect XAF 11,800 from a customer
curl -X POST "$BASE_URL/payments" \
  -H "X-Api-Key: $MALY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "method": "mobile_money_mtn",
    "country": "CG",
    "amount": { "value": "11800", "currency": "XAF" },
    "customer": { "phone": "242064661331" },
    "idempotency_key": "8f14e45f-ea0a-4c1b-9f2d",
    "reference": "ORDER-4471"
  }'

# → 202 Accepted, status: pending
# → webhook: payment.succeeded
  1. Get your credentialsA base URL and an API key, issued at activation. The key goes in X-Api-Key, from your backend only.
  2. Create the paymentYou get 202 Accepted and a transaction id straight away. The customer approves on their handset.
  3. Handle the webhookVerify the signature, dedupe on the transaction id, and act on the final status.
  4. ReconcileThe ledger gives every entry that moved your balance, with the balance before and after.
How it is structured

A technology layer, not a bank.

Being precise about this matters, to you and to your compliance team.

Maly Tech

Provides the gateway. Maly is a technology provider: it does not hold, own or take custody of funds, and does not carry out regulated payment activity.

Licensed institution

Holds and safeguards all funds, operates the merchant and customer wallets, and performs regulated payment activity under its own permissions.

Your platform

Instructs collections and payouts through the API, and owns its own customer relationship and use case.

Start here

Everything you need to integrate.

The full reference is public and needs no login. The commercial and legal set sits behind a partner password.

Documentation

API reference, integration guide, webhooks and signature verification, error handling, reconciliation, and the go-live checklist.

Open the documentation →
🔒 Password protected

Partner area

Partnership agreement, schedule of charges, governance pack and appendices. Maly shares the password with approved partners directly.

Go to partner area →