WistfareWistfare Docs

Disbursements

Send payouts from a business wallet to mobile money or other destination rails.

Disbursements are the outbound side of the payments system. Use them when your business needs to send money out to customers, vendors, or staff.

Install

npm install @wistfare/core @wistfare/payments
pip install wistfare
go get github.com/wistfare/wistfare-go
dependencies:
  wistfare_core: ^0.1.0
  wistfare_payments: ^0.1.0
cargo add wistfare
dependencies: [
  .package(path: "../sdks/swift")
]
implementation("com.wistfare:sdk:0.1.0")
dotnet add package Wistfare.Core
dotnet add package Wistfare.Payments

Get the Disbursements Client

import { Wistfare } from '@wistfare/core';
import { PaymentsClient } from '@wistfare/payments';

const wf = new Wistfare({
  apiKey: process.env.WISTFARE_API_KEY!,
});

const disbursements = new PaymentsClient(wf);
from wistfare import Wistfare

wf = Wistfare(api_key="wf_live_xxx")

disbursements = wf.payments
import (
  "os"

  "github.com/wistfare/wistfare-go/core"
  "github.com/wistfare/wistfare-go/payments"
)

client := core.New(os.Getenv("WISTFARE_API_KEY"))
disbursements := payments.New(client)
import 'package:wistfare_core/wistfare_core.dart';
import 'package:wistfare_payments/wistfare_payments.dart';

final wf = Wistfare(apiKey: 'wf_live_xxx');
final disbursements = PaymentsClient(wf);
use wistfare::Wistfare;

let client = Wistfare::new("wf_live_xxx")?;
let disbursements = client.payments();
import Wistfare

let client = try Wistfare(apiKey: "wf_live_xxx")
let disbursements = client.payments
import com.wistfare.sdk.Wistfare
import com.wistfare.sdk.WistfareConfig

val client = Wistfare(WistfareConfig(apiKey = "wf_live_xxx"))
val disbursements = client.payments
using Wistfare.Core;
using Wistfare.Payments;

var client = new WistfareClient(new WistfareOptions
{
    ApiKey = Environment.GetEnvironmentVariable("WISTFARE_API_KEY")!,
});

var disbursements = new PaymentsClient(client);

Current SDK coverage

Disbursement helpers are available today in TypeScript, Python, Go, Dart, and .NET. The Rust, Swift, and Kotlin preview SDKs do not yet expose a first-class disbursement helper, so those stacks should use the cURL example on this page when needed.

Initiate a Disbursement

const payout = await disbursements.initiateDisbursement({
  businessId: 'biz_123',
  walletId: 'wal_456',
  amount: '5000',
  destinationType: 'mobile_money',
  destinationRef: '250788000000',
  referenceId: 'vendor_payout_001',
  description: 'Vendor payout',
});
payout = disbursements.initiate_disbursement(
    business_id="biz_123",
    wallet_id="wal_456",
    amount="5000",
    destination_type="mobile_money",
    destination_ref="250788000000",
    reference_id="vendor_payout_001",
    description="Vendor payout",
)
result, err := disbursements.InitiateDisbursement(ctx, &payments.InitiateDisbursementParams{
  BusinessID:      "biz_123",
  WalletID:        "wal_456",
  Amount:          "5000",
  DestinationType: "mobile_money",
  DestinationRef:  "250788000000",
  ReferenceID:     "vendor_payout_001",
  Description:     "Vendor payout",
})
final payout = await disbursements.initiateDisbursement(
  InitiateDisbursementParams(
    businessId: 'biz_123',
    walletId: 'wal_456',
    amount: '5000',
    destinationType: 'mobile_money',
    destinationRef: '250788000000',
    referenceId: 'vendor_payout_001',
    description: 'Vendor payout',
  ),
);
var payout = await disbursements.InitiateDisbursementAsync(new InitiateDisbursementParams
{
    BusinessId = "biz_123",
    WalletId = "wal_456",
    Amount = "5000",
    DestinationType = "mobile_money",
    DestinationRef = "250788000000",
    ReferenceId = "vendor_payout_001",
    Description = "Vendor payout",
});
curl -X POST https://api-production.wistfare.com/v1/disbursements \
  -H "X-API-Key: wf_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "businessId": "biz_123",
    "walletId": "wal_456",
    "amount": "5000",
    "destinationType": "mobile_money",
    "destinationRef": "250788000000",
    "referenceId": "vendor_payout_001",
    "description": "Vendor payout"
  }'

Response

{
  "id": "disb_def456",
  "businessId": "biz_123",
  "walletId": "wal_456",
  "amount": "5000",
  "currency": "RWF",
  "destinationType": "mobile_money",
  "destinationRef": "250788000000",
  "referenceId": "vendor_payout_001",
  "status": "pending",
  "description": "Vendor payout",
  "createdAt": "2026-03-19T12:00:00Z",
  "updatedAt": "2026-03-19T12:00:00Z"
}

Reconcile a Payout

After initiation, use getDisbursement or listDisbursements to reconcile status changes and update your own ledger. Do not mark a payout as final purely from the request submission response.

  • Always provide a referenceId for payouts so you can look them up later.
  • Separate customer-facing payment collections from operational payout flows.
  • Reconcile asynchronous status updates before marking a payout complete in your own system.

On this page