- Create a wallet with Privy
- Fund your Zuba account with USDC/USDT from that wallet
- Call the Zuba Payout API to pay out across Africa
- Track the payout to completion
Prerequisites
- A Privy app with your App ID and App Secret from the Privy Dashboard
- A Zuba account with API credentials (see Zuba Authentication)
cURL
access_token as Authorization: Bearer <token> on every Zuba request below.
1. Create a wallet with Privy
If your users already have Privy embedded wallets, skip ahead. Any Privy wallet holding USDC or USDT works. To create a server wallet:cURL
2. Fund your Zuba account
Provision a deposit address on the network you want to fund from:cURL
Response
Now send USDC/USDT from your Privy wallet to that address using Privy’s transaction APIs. See sending transactions on Ethereum or Solana.
Once the transfer confirms on-chain, the funds appear on your Zuba balance:
cURL
3. Pay out across Africa
One request does it all: pass the beneficiary’s local payment details inline.inputCurrency is the balance you’re paying from (your USDC/USDT), while currency and amount are what the beneficiary receives. Zuba handles the conversion:
cURL
POST /v1/beneficiaries and reference it with "beneficiary": { "id": "..." }.
Use route: "mobile_money" for mobile money corridors (GHS, XOF, XAF). Field requirements per corridor are available at GET /v1/payouts/requirements and in the Zuba payout docs.
4. Track the payout
Register a webhook endpoint and listen for payout lifecycle events:cURL
Event payload
X-Zuba-Signature header (see Zuba webhook docs). You can also poll GET /v1/payouts/{id}.
Test it in sandbox
Everything above works againsthttps://api.sandbox.zuba.com with sandbox credentials. Magic beneficiary account numbers give deterministic outcomes (0000000000 → paid, 0000000001 → failed). See the sandbox testing guide.
That’s it: a Privy wallet, one deposit address, and one API call to reach bank accounts and mobile money wallets across Africa.
