Quickstart
Create your account, copy your API credentials, and make your first collection in five minutes.
Collections
Request money from a mobile money wallet or a card, then settle it into your MarzPay wallet.
Send money
Pay recipients into MTN, Airtel, M-Pesa, Vodacom, Orange, Zamtel, Moov, or Free wallets.
API reference
Every endpoint, parameter, and response, with a playground you can call from the browser.
Webhooks
Signed callbacks for completed and failed payments, with verification snippets in four languages.
Country guides
Country codes, currencies, phone formats, networks, and fee tables for all 12 markets.
How it works
1
Collect
You call
POST /collect-money with an amount, a country, and the customer’s phone number. MarzPay detects the network from the number and prompts the customer on their phone. For card payments you set method to card and redirect the customer to the redirect_url we return.2
Settle
The customer approves the prompt. On success the collected amount lands in your MarzPay wallet, minus the transaction charge. Card collections settle into a separate card wallet.
3
Disburse
You call
POST /send-money or POST /bank-transfer to move money out. Payouts debit the wallet you choose, and the recipient receives the full amount you sent.4
Confirm
Every final outcome arrives as a signed
POST to your callback_url or registered webhook, and can be re-read at any time with GET /transactions/{uuid}.Supported markets
- East Africa
- Central & Southern
- West Africa
Your first collection
The API uses HTTP Basic auth. Encodeapi_key:api_secret, base64 it, and send it on every request.
Collect 1,000 UGX from a Ugandan wallet
Response
reference must be a unique UUID v4 that you generate. It is your idempotency key and the value we echo back on the callback, so store it against the order before you send the request.Rules that apply everywhere
Always send country
Always send country
country selects the market wallet and the payout rail. Two markets can share a currency: XOF is used by Benin, Côte d’Ivoire, and Senegal, and XAF by Cameroon, Gabon, and Congo-Brazzaville. The country code, not the currency, decides where the money moves. DRC is CD and Congo-Brazzaville is CG.Currency follows the market
Currency follows the market
Amounts are in local currency units, not cents:
1000 means UGX 1,000 or KES 1,000 depending on country. DRC is the exception, where you must send currency as CDF (default) or USD to pick the wallet.Phones are E.164
Phones are E.164
Send
+256700000000, never 0700000000. The network is detected from the prefix, so a malformed number comes back as INVALID_PHONE_FORMAT before money moves.Payouts need permissions
Payouts need permissions
Send money, bank transfer, balance, and airtime endpoints require your server IP to be on the API whitelist, plus an active subscription for that product in the marketplace. Collections do not.
Final statuses arrive by webhook
Final statuses arrive by webhook
A create call returns
processing or pending. Only *.completed and *.failed are final, and only final statuses trigger callbacks. Treat callbacks as at-least-once and dedupe on transaction.reference.Build with the tools you already use
API playground
Call every merchant endpoint from the browser with your own keys.
OpenAPI spec
Generate clients, validate requests, or wire up contract tests.
Sandbox mode
Every new business starts in sandbox, so you can integrate before verification clears.
WhatsApp +256 790 809 954 or email info@wearemarz.com, Monday to Friday, 8am to 6pm EAT.

