Send money to mobile money users instantly
The Send Money API allows you to send money directly to mobile money users. Funds are deducted from your balance instantly when the transaction is successful.
https://livepay.me/api/send-money
Method: POST
curl "https://livepay.me/api/send-money" \
-X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <Your API Key>" \
-d '{
"accountNumber": "LP2305443309",
"phoneNumber": "0777123456",
"amount": 50000,
"currency": "UGX",
"reference": "WITHDRAW123456789",
"description": "Salary payment"
}'
Note: For non-UGX currencies, you must include the "network" field in the request body.
All API requests require Bearer token authentication using your API key in the Authorization header.
Bearer <Your API Key>
application/json
Your API key is provided in your dashboard. Use it directly in the Authorization header as shown above.
| Parameter | Type | Required | Description |
|---|---|---|---|
accountNumber
|
String | Yes | Your account number |
phoneNumber
|
String | Yes | Recipient's phone number (any format accepted) |
amount
|
Number | Yes | Amount to send (subject to min/max per account) |
currency
|
String | Yes | Currency code (e.g., UGX, USD, KES) |
reference
|
String | Yes | Unique reference ID (no spaces, max 30 characters) |
description
|
String | Yes | Transaction description or reason |
network
|
String | Conditional | Required for non-UGX currencies |
{
"success": true,
"message": "Payment request in progress.",
"reference": "WITHDRAW123456789",
"internal_reference": "550e8400-e29b-41d4-a716-446655440000"
}
| Status Code | Error Message | Description |
|---|---|---|
| 400 | Missing required fields |
Required field missing |
| 400 | Invalid amount |
Amount is not a valid number |
| 400 | Amount must be at least X UGX |
Amount below minimum allowed |
| 400 | Amount must not exceed X UGX |
Amount above maximum allowed |
| 400 | Insufficient balance |
Not enough funds in wallet |
| 400 | Daily withdrawal limit exceeded |
Daily limit reached |
| 400 | Reference already used for this account |
Duplicate reference ID |
| 400 | Reference must not contain spaces |
Reference has spaces |
| 400 | Network is required for non-UGX currencies |
Network field missing for non-UGX |
| 401 | Authorization required |
Missing Authorization header |
| 401 | Invalid API key |
Invalid API key format or value |
| 403 | Account number does not match API key owner |
Account number mismatch |
| 403 | Withdrawals are disabled for this account |
Withdrawals not allowed |
| 429 | Too many withdrawal attempts. Maximum 5 withdrawals per minute. |
Rate limit exceeded |
| 500 | Internal server error |
Server error |
| 504 | Payment service timeout. Please try again. |
Payment service timeout |
async function sendMoney(apiKey, data) { const response = await fetch('https://livepay.me/api/send-money', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${apiKey}` }, body: JSON.stringify({ accountNumber: data.accountNumber, phoneNumber: data.phoneNumber, amount: data.amount, currency: data.currency, reference: data.reference, description: data.description }) }); if (!response.ok) { const error = await response.json(); throw new Error(error.error || 'Request failed'); } return await response.json(); }