Disbursements
Send money directly without OTP verification.
Disbursements API
The Disbursements API allows you to send money directly to mobile money wallets, bank accounts, or Shika Wallets — without requiring OTP verification or pre-created recipients. Designed for automated and programmatic use cases.
Unlike Payouts, disbursements do not require OTP verification. They are intended for server-to-server use cases like automated payouts, cashback, and service fee collection.
The Disbursement Object
{
"id": "po_abc123def456",
"object": "disbursement",
"amount": 50,
"currency": "GHS",
"fee": 0.50,
"status": "created",
"destination": {
"type": "mobile_money",
"provider": "mtn",
"number": "024****567",
"name": "John Doe"
},
"description": "Cashback reward",
"reference": "ref_123",
"metadata": {},
"provider_reference": null,
"failure_reason": null,
"created_at": "2024-01-15T10:00:00Z",
"completed_at": null
}Attributes
| Attribute | Type | Description |
|---|---|---|
id | string | Unique identifier |
object | string | Always "disbursement" |
amount | number | Amount in GHS |
currency | string | Currency code (GHS) |
fee | number | Transaction fee in GHS |
status | string | created, pending, processing, completed, failed, cancelled |
destination | object | Destination account details |
destination.type | string | mobile_money, bank_transfer, or shika_wallet |
destination.provider | string | Provider (e.g., mtn, telecel, airteltigo) |
destination.number | string | Masked account/phone number |
destination.name | string | Recipient name |
description | string | Disbursement description |
reference | string | Your custom reference |
metadata | object | Custom metadata |
provider_reference | string | Provider transaction reference |
failure_reason | string | Error message if failed |
created_at | string | Creation timestamp |
completed_at | string | Completion timestamp |
Create a Disbursement
Sends money directly to a destination account.
POST /v1/disbursementsRequest Body
| Parameter | Type | Required | Description |
|---|---|---|---|
amount | number | Yes | Amount in GHS |
currency | string | No | Currency (default: GHS) |
destination | object | Yes | Destination account details |
destination.type | string | Yes | mobile_money, bank_transfer, or shika_wallet |
destination.phone_number | string | Yes* | Phone number (for mobile money) |
destination.provider | string | No | Provider code (auto-detected from phone) |
destination.account_number | string | Yes* | Account number (for bank transfer) |
destination.bank_code | string | Yes* | Bank code (for bank transfer) |
destination.account_name | string | No | Recipient name |
destination.account_id | string | Yes* | Consumer account ID (for shika_wallet) |
description | string | No | Description (max 500 chars) |
reference | string | No | Your reference (max 100 chars) |
metadata | object | No | Custom metadata |
Use the X-Idempotency-Key header to prevent duplicate disbursements.
Mobile Money Disbursement
curl -X POST https://api.shikacreators.com/v1/disbursements \
-H "Authorization: Bearer sk_test_..." \
-H "Content-Type: application/json" \
-d '{
"amount": 50,
"destination": {
"type": "mobile_money",
"phone_number": "0241234567",
"account_name": "John Doe"
},
"description": "Cashback reward"
}'const disbursement = await shikacreators.disbursements.create({
amount: 50,
destination: {
type: 'mobile_money',
phone_number: '0241234567',
account_name: 'John Doe'
},
description: 'Cashback reward'
})disbursement = client.disbursements.create(
amount=50,
destination={
'type': 'mobile_money',
'phone_number': '0241234567',
'account_name': 'John Doe'
},
description='Cashback reward'
)Shika Wallet Disbursement
Send money directly to a consumer's Shika Wallet. This is instant — no external provider is involved.
curl -X POST https://api.shikacreators.com/v1/disbursements \
-H "Authorization: Bearer sk_test_..." \
-H "Content-Type: application/json" \
-d '{
"amount": 50,
"destination": {
"type": "shika_wallet",
"account_id": "acc_abc123def456"
},
"description": "Cashback reward"
}'const disbursement = await shikacreators.disbursements.create({
amount: 50,
destination: {
type: 'shika_wallet',
account_id: 'acc_abc123def456'
},
description: 'Cashback reward'
})disbursement = client.disbursements.create(
amount=50,
destination={
'type': 'shika_wallet',
'account_id': 'acc_abc123def456'
},
description='Cashback reward'
)You can also use phone_number instead of account_id to look up the consumer by their registered phone number. Shika Wallet disbursements are completed instantly.
Disburse via QR Code
Send money to a consumer by scanning their QR code.
POST /v1/disbursements/qrRequest Body
| Parameter | Type | Required | Description |
|---|---|---|---|
qr_payload | string | Yes | Base64-encoded QR code payload |
amount | number | No* | Amount in GHS (required if QR has no fixed amount) |
currency | string | No | Currency (default: GHS) |
description | string | No | Description |
reference | string | No | Your reference |
metadata | object | No | Custom metadata |
curl -X POST https://api.shikacreators.com/v1/disbursements/qr \
-H "Authorization: Bearer sk_test_..." \
-H "Content-Type: application/json" \
-d '{
"qr_payload": "eyJlbnRpdHkiOiJjb25zdW1lciIsImFjY291bnRJZCI6ImFjY18xMjMifQ==",
"amount": 50,
"description": "QR disbursement"
}'const disbursement = await shikacreators.disbursements.createFromQR({
qr_payload: 'eyJlbnRpdHkiOiJjb25zdW1lciIsImFjY291bnRJZCI6ImFjY18xMjMifQ==',
amount: 50,
description: 'QR disbursement'
})Retrieve a Disbursement
GET /v1/disbursements/:idList Disbursements
GET /v1/disbursementsQuery Parameters
| Parameter | Type | Description |
|---|---|---|
limit | integer | Number of results (1-100, default 10) |
starting_after | string | Cursor for pagination |
status | string | Filter by status |