EMoney API Documentation
Integrate seamless payment processing into your applications with our powerful REST API
Authentication
API Key Authentication
All API requests must include your API key in the Authorization header. You can generate and manage API keys from your dashboard.
Authorization: Bearer YOUR_API_KEY
curl -X GET https://your-domain.com/api/v1/balance \
-H "Authorization: Bearer YOUR_API_KEY"
Keep your API keys secure and never expose them in client-side code. Use environment variables or secure key management systems.
Base URL
All API endpoints should be called using the following base URL:
https://emoney.estudios.ug/api
API Endpoints
Mobile Money
Use the Collection endpoint to request money from a customer's mobile money number into your wallet, and the Disbursement endpoint to send money from your wallet to a mobile money number.
All mobile money endpoints accept and return JSON with the Content-Type: application/json header.
Collection
Request money from a customer's mobile number (deposit / payment). Maps to Relworx request-payment.
Endpoint
POST https://emoney.estudios.ug/api/v1/mobilemoney/collection
Request Body
{
"msisdn": "+256775734375", // Payer phone number (required)
"currency": "UGX", // UGX, KES, TZS, RWF (required)
"amount": 500.00, // Amount to collect (required)
"description": "Payment for invoice #123", // Optional
"reference": "COLLECT-1234567890" // Optional
}
cURL Example
curl -X POST https://emoney.estudios.ug/api/v1/mobilemoney/collection \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"msisdn": "+256775734375",
"currency": "UGX",
"amount": 500.00,
"description": "Payment for invoice #123"
}'
Response
{
"success": true,
"status": "pending",
"message": "Collection request received",
"api_reference": "COLLECT-1234567890",
"customer_reference": "REL-REF-12345",
"internal_reference": "AP1234567890123456"
}
Disbursement
Send money from your wallet to a customer's mobile number (withdrawal / payout). Maps to Relworx send-payment.
Endpoint
POST https://emoney.estudios.ug/api/v1/mobilemoney/disbursement
Request Body
{
"msisdn": "+256775734375", // Recipient phone number (required)
"currency": "UGX", // UGX, KES, TZS, RWF (required)
"amount": 1000.00, // Amount to disburse (required)
"description": "Salary payment to employee", // Optional
"reference": "DISBURSE-1234567890" // Optional
}
cURL Example
curl -X POST https://emoney.estudios.ug/api/v1/mobilemoney/disbursement \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"msisdn": "+256775734375",
"currency": "UGX",
"amount": 1000.00,
"description": "Salary payment to employee"
}'
Response
{
"success": true,
"status": "pending",
"message": "Disbursement request received",
"api_reference": "DISBURSE-1234567890",
"customer_reference": "REL-REF-67890",
"internal_reference": "AP1234567890987654"
}
Transaction Status
Check the status of a collection or disbursement transaction using its reference.
Endpoint
GET https://emoney.estudios.ug/api/v1/mobilemoney/status?internal_reference=COLLECT-1234567890&account_no=REL1072B6B71B
Query Parameters
internal_reference (required) - Reference returned from collection/disbursement
account_no (required) - Your Relworx account number
cURL Example
curl -X GET "https://emoney.estudios.ug/api/v1/mobilemoney/status?internal_reference=COLLECT-1234567890&account_no=REL1072B6B71B" \
-H "Authorization: Bearer YOUR_API_KEY"
Response
{
"success": true,
"status": "completed", // pending, processing, completed, failed
"message": "Transaction completed successfully",
"internal_reference": "COLLECT-1234567890"
}
Health Check
Check that the API is up and can reach the Relworx gateway.
Endpoint
GET https://emoney.estudios.ug/api/v1/mobilemoney/health
cURL Example
curl -X GET https://emoney.estudios.ug/api/v1/mobilemoney/health \
-H "Authorization: Bearer YOUR_API_KEY"
Response
{
"success": true,
"message": "Connection successful",
"data": {
"status": "healthy",
"relworx_api": "connected",
"timestamp": "2026-09-22T10:30:00+00:00"
}
}
Create Transaction
Create a new transaction to send money from your wallet.
Endpoint
POST /api/v1/transactions
Request Body
{
"recipient": "256772123456", // Phone number or user ID
"amount": 10000, // Amount in UGX
"type": "send_money", // Transaction type
"description": "Payment for services"
}
cURL Example
curl -X POST https://your-domain.com/api/v1/transactions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"recipient": "256772123456",
"amount": 10000,
"type": "send_money",
"description": "Payment for services"
}'
Response
{
"success": true,
"message": "Transaction created successfully",
"data": {
"id": 123,
"transaction_id": "TXN123456789",
"status": "pending",
"amount": 10000,
"recipient": "256772123456",
"created_at": "2024-01-15T10:30:00Z"
}
}
Get Transaction
Retrieve details of a specific transaction using its ID.
Endpoint
GET /api/v1/transactions/{id}
cURL Example
curl -X GET https://your-domain.com/api/v1/transactions/123 \
-H "Authorization: Bearer YOUR_API_KEY"
Response
{
"success": true,
"data": {
"id": 123,
"transaction_id": "TXN123456789",
"status": "completed", // pending, completed, failed
"amount": 10000,
"recipient": "256772123456",
"type": "send_money",
"description": "Payment for services",
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-15T10:32:00Z"
}
}
Create Payment Link
Generate a payment link that customers can use to pay you.
Endpoint
POST /api/v1/payment-links
Request Body
{
"amount": 10000, // Amount in UGX
"description": "Payment for invoice #123",
"expires_at": "2024-01-20T23:59:59Z" // Optional
}
cURL Example
curl -X POST https://your-domain.com/api/v1/payment-links \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"amount": 10000,
"description": "Payment for invoice #123",
"expires_at": "2024-01-20T23:59:59Z"
}'
Response
{
"success": true,
"message": "Payment link created successfully",
"data": {
"id": 456,
"uuid": "PL123456789",
"payment_url": "https://your-domain.com/payment/PL123456789",
"amount": 10000,
"description": "Payment for invoice #123",
"status": "active",
"expires_at": "2024-01-20T23:59:59Z",
"created_at": "2024-01-15T10:30:00Z"
}
}
Get Wallet Balance
Retrieve your current wallet balance.
Endpoint
GET /api/v1/balance
cURL Example
curl -X GET https://your-domain.com/api/v1/balance \
-H "Authorization: Bearer YOUR_API_KEY"
Response
{
"success": true,
"data": {
"balance": 50000,
"currency": "UGX",
"available_balance": 48000,
"pending_balance": 2000,
"last_updated": "2024-01-15T10:30:00Z"
}
}
Get User Information
Retrieve information about the authenticated user.
Endpoint
GET /api/v1/user
cURL Example
curl -X GET https://your-domain.com/api/v1/user \
-H "Authorization: Bearer YOUR_API_KEY"
Response
{
"success": true,
"data": {
"id": 1,
"name": "John Doe",
"email": "john@example.com",
"phone": "256772123456",
"status": "active",
"created_at": "2024-01-01T00:00:00Z"
}
}
Get Transactions List
Retrieve a list of all transactions for the authenticated user.
Endpoint
GET /api/v1/transactions
cURL Example
curl -X GET https://your-domain.com/api/v1/transactions \
-H "Authorization: Bearer YOUR_API_KEY"
Response
{
"success": true,
"data": [
{
"id": 123,
"transaction_id": "TXN123456789",
"status": "completed",
"amount": 10000,
"type": "send_money",
"description": "Payment for services",
"created_at": "2024-01-15T10:30:00Z"
}
],
"meta": {
"current_page": 1,
"per_page": 15,
"total": 25
}
}
Get Payment Links
Retrieve a list of all payment links for the authenticated user.
Endpoint
GET /api/v1/payment-links
cURL Example
curl -X GET https://your-domain.com/api/v1/payment-links \
-H "Authorization: Bearer YOUR_API_KEY"
Response
{
"success": true,
"data": [
{
"id": 456,
"uuid": "PL123456789",
"payment_url": "https://your-domain.com/payment/PL123456789",
"amount": 10000,
"description": "Payment for invoice #123",
"status": "active",
"expires_at": "2024-01-20T23:59:59Z",
"created_at": "2024-01-15T10:30:00Z"
}
]
}
Error Handling
The API returns standard HTTP status codes and error responses in the following format:
{
"success": false,
"error": {
"code": "INSUFFICIENT_BALANCE",
"message": "Insufficient balance to complete this transaction",
"details": {
"required": 10000,
"available": 5000
}
}
}
| Status Code | Description |
|---|---|
| 200 | Request successful |
| 400 | Bad request - Invalid parameters |
| 401 | Unauthorized - Invalid API key |
| 402 | Payment required - Insufficient balance |
| 404 | Not found - Transaction doesn't exist |
| 429 | Too many requests - Rate limit exceeded |
| 500 | Internal server error |
Rate Limiting
API requests are rate limited to ensure fair usage and system stability:
- Standard Plan: 100 requests per minute
- Business Plan: 500 requests per minute
- Enterprise Plan: 2000 requests per minute
Rate limit headers are included in every response:
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1642248000
SDKs and Libraries
We provide official SDKs to make integration easier:
PHP SDK
Official PHP library for Laravel applications
composer require emoney/php-sdk
JavaScript SDK
JavaScript library for Node.js and browser
npm install emoney-js-sdk
Support
Need help with API integration? We're here to assist:
Email Support
api-support@emoney.com
Documentation
Comprehensive guides and examples
Developer Community
Join our developer forum