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/v1/send-money
Method: POST
curl -X POST "https://livepay.me/api/v1/send-money" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <--your-secret-key-->" \
-d '{
"apikey": "<--your-public-key-->",
"reference": "WITHDRAW123456789",
"phone_number": "256702069536",
"amount": 500,
"currency": "UGX",
"network": "AIRTEL",
"pin": "1111"
}'
All API requests require Bearer token authentication using your Secret Key in the Authorization header, and your Public Key in the request body.
Bearer <--your-secret-key-->
application/json
<--your-public-key-->
| Parameter | Type | Required | Description |
|---|---|---|---|
apikey
|
String | Yes | Your public API key |
reference
|
String | Yes | Your unique reference ID (prevents duplicates) |
phone_number
|
String | Yes | Recipient's phone number (e.g., 256702069536) |
amount
|
Number | Yes | Amount to send (subject to min/max per currency) |
currency
|
String | Yes | e.g., UGX |
network
|
String | Yes | e.g., AIRTEL |
pin
|
String | Yes | Your transaction PIN (set in your account settings) |
{
"status": "success",
"message": "Withdrawal initiated successfully",
"data": {
"reference": "875123456789",
"transaction_id": "67d4c8f3a1b29",
"amount": 500,
"currency": "UGX",
"network": "AIRTEL"
}
}
| Status Code | Response | Description |
|---|---|---|
| 400 |
{
"status": "error",
"message": "Missing required fields: amount, phone_number"
}
|
Missing required fields |
| 400 |
{
"status": "error",
"message": "Currency not supported"
}
|
Currency not supported |
| 400 |
{
"status": "error",
"message": "Invalid network for UGX. Available networks: AIRTEL, MTN"
}
|
Invalid network for currency |
| 400 |
{
"status": "error",
"message": "Amount must be at least 500 for UGX"
}
|
Amount below minimum |
| 400 |
{
"status": "error",
"message": "Amount cannot exceed 5000000 for UGX"
}
|
Amount above maximum |
| 400 |
{
"status": "error",
"message": "Insufficient balance for UGX"
}
|
Insufficient funds in your account |
| 401 |
{
"status": "error",
"message": "Invalid API key"
}
|
Invalid secret key |
| 401 |
{
"status": "error",
"message": "Invalid or unauthorized public key"
}
|
Invalid public key |
| 401 |
{
"status": "error",
"message": "Invalid PIN"
}
|
Incorrect transaction PIN |
| 403 |
{
"status": "error",
"message": "Currency not activated"
}
|
Currency not activated for your account |
| 403 |
{
"status": "error",
"message": "Please set your PIN in settings first"
}
|
PIN not set in your account |
| 403 |
{
"status": "error",
"message": "Unauthorized. Complete KYC to access this API"
}
|
KYC not complete |
| 403 |
{
"status": "error",
"message": "API access is turned off by user"
}
|
API access disabled in settings |
| 404 |
{
"status": "error",
"message": "User not found"
}
|
User account not found |
| 405 |
{
"status": "error",
"message": "Method Not Allowed"
}
|
Only POST method allowed |
| 409 |
{
"status": "error",
"message": "Duplicate reference detected"
}
|
Reference already used |
| 500 |
{
"status": "error",
"message": "CURL Error: Failed to connect"
}
|
Network or Payaza API error |
async function sendMoney(data) { const response = await fetch('https://livepay.me/api/v1/send-money', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer <--your-secret-key-->' }, body: JSON.stringify({ apikey: '<--your-public-key-->', reference: data.reference, phone_number: data.phone_number, amount: data.amount, currency: data.currency, network: data.network, pin: data.pin }) }); if (!response.ok) { const error = await response.json(); throw new Error(error.message); } return await response.json(); }
You must set a transaction PIN in your account settings before sending money.
Each reference ID can only be used once to prevent duplicate transactions.