Disbursements pay money out of your settled Web Rabbit balance to third parties — drivers, couriers, vendors, restaurants, affiliates — in batches of up to 500 recipients, over mobile money or bank transfer. This is the payout rail for platforms; the split payments API decides who is owed what, and disbursements move that money.
403 disbursements_not_enabled. Ask us in the dashboard or by email and we will review your volumes, your recipient list and your model.Release tiers
A disbursement is never released the moment you create it. Money leaving a balance to arbitrary recipients is the highest-risk flow we operate, so each business sits in a tier that sets how long a batch settles for and how much human review it passes through.
| Field | Type | Description |
|---|---|---|
individual | T+7 · reviewed | Sole proprietors and creators. Every batch is reviewed by a person. One batch per rolling 7 days. Minimum batch GHS 100. |
business | T+3 · reviewed | Registered entities with completed business verification. Every batch is reviewed. One batch per rolling 7 days. Minimum batch GHS 50. |
powered | T+1 · automatic | Businesses built and vetted end to end by Web Rabbit Media. Approved automatically, no weekly cap, minimum batch GHS 20. Still subject to holds and clawback. |
The tier on your business is returned on every list call as tier, alongside disbursements_enabled. We may hold or reverse a batch at any point if activity looks like fraud, money laundering, or payouts to people your platform cannot account for.
Create a disbursement
/v1/disbursements| Field | Type | Description |
|---|---|---|
channel | enum | momo (default) or bank. One channel per batch. |
reference | string | Your own label for the batch, e.g. "friday-riders". |
recipients | array · required | 1–500 transfers. Each needs a name and an amount. |
recipients[].name | string · required | Name of the person or business being paid. |
recipients[].msisdn | string | Wallet number for channel=momo, e.g. 0244000000. |
recipients[].network | enum | Required for momo: MTN · TELECEL · AT · GMONEY. |
recipients[].account_number | string | Account number for channel=bank. |
recipients[].bank_code | string | Required for channel=bank. |
recipients[].amount | number | GHS. Send this or amount_minor, not both. |
recipients[].amount_minor | integer | Pesewas. Exact — preferred machine to machine. |
recipients[].reference | string | Your reference for this transfer. Generated if omitted. |
recipients[].narration | string | Optional text shown to the recipient where the rail supports it. |
Send an Idempotency-Key header (or idempotency_key in the body). A retry with the same key returns the original batch instead of paying anyone twice.
curl -X POST https://api.webrabbitmedia.com/v1/disbursements \
-H "Authorization: Bearer wr_test_..." \
-H "Idempotency-Key: friday-riders-2026-09-11" \
-H "Content-Type: application/json" \
-d '{
"channel": "momo",
"reference": "friday-riders",
"recipients": [
{ "reference": "driver_8814", "name": "Kwame Mensah", "msisdn": "0244000000", "network": "MTN", "amount": 120 },
{ "reference": "driver_8815", "name": "Ama Boateng", "msisdn": "0559876543", "network": "TELECEL", "amount_minor": 8500 }
]
}'{
"id": "94afd213-8dbe-450e-958d-53b6d8f852f8",
"object": "disbursement",
"status": "pending_review",
"mode": "live",
"channel": "momo",
"tier": "business",
"currency": "GHS",
"amount": 205,
"amount_minor": 20500,
"fee": 3.08,
"item_count": 2,
"reference": "friday-riders",
"scheduled_for": "2026-09-14T09:12:04.000Z",
"released_at": null,
"created_at": "2026-09-11T09:12:04.000Z",
"recipients": [
{
"id": "6f1a...",
"reference": "driver_8814",
"status": "queued",
"name": "Kwame Mensah",
"account_number": "0244000000",
"network": "MTN",
"amount": 120,
"amount_minor": 12000,
"fee": 1.8
}
]
}fee on each recipient is the fee quoted when you submitted the batch.scheduled_for on the batch always shows the actual release date. Batch amounts also count toward your daily and monthly payout limits, same as withdrawals.Statuses
| Field | Type | Description |
|---|---|---|
pending_review | batch | Waiting for a person to approve it. Individual and business tiers. |
approved | batch | Cleared, waiting for its release date. |
declined | batch | Rejected on review. See decision_reason. Nothing was paid. |
held | batch | Paused while we look into it. See hold_reason. |
processing | batch | Released and being paid out recipient by recipient. |
completed | batch | Every recipient succeeded. |
partially_completed | batch | Some recipients failed. Check each recipient. |
failed | batch | Every recipient failed. Funds return to your balance. |
cancelled | batch | You cancelled it before release. |
queued / processing / succeeded / failed | recipient | Per-transfer status inside the batch. |
List, retrieve and cancel
/v1/disbursementsNewest first, in the key's mode, with opaque cursors — pass ?cursor= from next_cursor. The response also carries your tier and disbursements_enabled.
/v1/disbursements/{id}/v1/disbursements/{id}/cancelA batch can be cancelled any time before it is released. Once it is processing, cancellation returns an error — individual failed transfers are returned to your balance automatically.
Test mode
Test disbursements are fully simulated: no rail is contacted and no money moves. Wallet numbers ending 0000 succeed, 1111 fail, and the GHS 10 test-mode amount cap applies per recipient. Test batches skip the tier clock so you can see the whole lifecycle immediately. See Test data.
Webhook events
| Field | Type | Description |
|---|---|---|
payout.queued | event | A batch was created and is awaiting review or its release date. |
payout.completed | event | A transfer succeeded. Sent per recipient. |
payout.failed | event | A transfer failed, with the mapped provider code and reason. |
Events are signed exactly like every other Web Rabbit webhook — see Webhooks for verification.
