Send funds securely from your business account to a recipient.
Overview
Disbursements are asynchronous transactions. Store your reference and wait for a confirmed final status.
Send a disbursement
Mobile Money disbursements
Use POST {{base_url}}/payments/disburse to send a Mobile Money disbursement through mtn_ug or airtel_ug.
The request body is the same for Personal and Business accounts. Only the Authorization header changes according to the client configured on the Integrations page.
Request fields
Field
Type
Description
provider_code
string
The Mobile Money provider. Use mtn_ug or airtel_ug.
amount
integer
The disbursement amount in whole UGX. For example, 50000 represents UGX 50,000.
customer_phone
string
The recipient's phone number using digits only. It must start with country code 256.
external_id
string
A unique ID generated for this request. Webhooks return it so your application can identify the related disbursement.
Personal account disbursement
Use the Bearer-authenticated paymentGateway configured with the Personal account access token.
Personal account request
const t = await paymentGateway.post("{{base_url}}/payments/disburse", {
provider_code: "mtn_ug",
amount: 50000,
customer_phone: "256700000000",
external_id: "txn_20260717_003",
});
if (t.status !== 201) throw new Error("Disbursement request failed");
using System.Net;
using System.Net.Http.Headers;
using System.Net.Http.Json;
paymentGateway.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", accessToken);
var response = await paymentGateway.PostAsJsonAsync("{{base_url}}/payments/disburse", new
{
provider_code = "mtn_ug",
amount = 50000,
customer_phone = "256700000000",
external_id = "txn_20260717_003",
});
if (response.StatusCode != HttpStatusCode.Created)
throw new HttpRequestException("Disbursement request failed");
Business account disbursement
Use the API-key-authenticated paymentGateway configured with the Business account API key ID and secret.
Business account request
const t = await paymentGateway.post("{{base_url}}/payments/disburse", {
provider_code: "airtel_ug",
amount: 50000,
customer_phone: "256700000000",
external_id: "txn_20260717_004",
});
if (t.status !== 201) throw new Error("Disbursement request failed");
using System.Net;
using System.Net.Http.Json;
paymentGateway.DefaultRequestHeaders.TryAddWithoutValidation(
"Authorization",
$"ApiKey {apiKeyId}:{apiSecret}"
);
var response = await paymentGateway.PostAsJsonAsync("{{base_url}}/payments/disburse", new
{
provider_code = "airtel_ug",
amount = 50000,
customer_phone = "256700000000",
external_id = "txn_20260717_004",
});
if (response.StatusCode != HttpStatusCode.Created)
throw new HttpRequestException("Disbursement request failed");
Successful request
A successful disbursement request returns HTTP 201 Created. The response includes payment_id; store it so you can retrieve the payment and check its latest status.