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

AttributeTypeDescription
idstringUnique identifier
objectstringAlways "disbursement"
amountnumberAmount in GHS
currencystringCurrency code (GHS)
feenumberTransaction fee in GHS
statusstringcreated, pending, processing, completed, failed, cancelled
destinationobjectDestination account details
destination.typestringmobile_money, bank_transfer, or shika_wallet
destination.providerstringProvider (e.g., mtn, telecel, airteltigo)
destination.numberstringMasked account/phone number
destination.namestringRecipient name
descriptionstringDisbursement description
referencestringYour custom reference
metadataobjectCustom metadata
provider_referencestringProvider transaction reference
failure_reasonstringError message if failed
created_atstringCreation timestamp
completed_atstringCompletion timestamp

Create a Disbursement

Sends money directly to a destination account.

POST /v1/disbursements

Request Body

ParameterTypeRequiredDescription
amountnumberYesAmount in GHS
currencystringNoCurrency (default: GHS)
destinationobjectYesDestination account details
destination.typestringYesmobile_money, bank_transfer, or shika_wallet
destination.phone_numberstringYes*Phone number (for mobile money)
destination.providerstringNoProvider code (auto-detected from phone)
destination.account_numberstringYes*Account number (for bank transfer)
destination.bank_codestringYes*Bank code (for bank transfer)
destination.account_namestringNoRecipient name
destination.account_idstringYes*Consumer account ID (for shika_wallet)
descriptionstringNoDescription (max 500 chars)
referencestringNoYour reference (max 100 chars)
metadataobjectNoCustom 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/qr

Request Body

ParameterTypeRequiredDescription
qr_payloadstringYesBase64-encoded QR code payload
amountnumberNo*Amount in GHS (required if QR has no fixed amount)
currencystringNoCurrency (default: GHS)
descriptionstringNoDescription
referencestringNoYour reference
metadataobjectNoCustom 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/:id

List Disbursements

GET /v1/disbursements

Query Parameters

ParameterTypeDescription
limitintegerNumber of results (1-100, default 10)
starting_afterstringCursor for pagination
statusstringFilter by status