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.

HTTP Header
Authorization: Bearer YOUR_API_KEY
cURL Example
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:

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

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

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
200Request successful
400Bad request - Invalid parameters
401Unauthorized - Invalid API key
402Payment required - Insufficient balance
404Not found - Transaction doesn't exist
429Too many requests - Rate limit exceeded
500Internal 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