MarzPay gives your business a single REST API for mobile money, cards, bank transfers, utility bills, and airtime across Africa. You collect from a customer’s wallet, pay out to a recipient, and get the outcome on a webhook, using the same endpoints in every market.

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

Uganda is the only market where bill payments, bank transfers, airtime, and card payments are live today. Collections and disbursements work in all 12.

Your first collection

The API uses HTTP Basic auth. Encode api_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

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.
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.
Send +256700000000, never 0700000000. The network is detected from the prefix, so a malformed number comes back as INVALID_PHONE_FORMAT before money moves.
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.
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.