Base URL
https://pay.imaxinnovationhub.com/api
Authentication
Include your API key in the request headers.
| Header | max-key |
| Content-Type | application/json |
1. Mobile Money Collections
POST
/collections/init
Initiates a payment request (Push) from a customer's phone to your account.
Parameters
| Field | Type | Req | Description |
|---|---|---|---|
number |
String | * | Customer MSISDN (e.g. 078XXXXXXX) |
amount |
Number | * | Amount in UGX (Min 500) |
client_ref |
String | * | Your unique reference |
naration |
String | - | Payment reason/description |
Response Example
{
"external_ref": "uuid-string",
"status": "success"
}
Sample Implementation
$client = new \GuzzleHttp\Client();
$response = $client->post('https://pay.imaxinnovationhub.com/api/collections/init', [
'headers' => [
'max-key' => 'YOUR_API_KEY',
'Accept' => 'application/json',
],
'json' => [
'number' => '0770000000',
'amount' => 1000,
'client_ref' => 'INV-001'
]
]);
echo $response->getBody();
import requests
url = "https://pay.imaxinnovationhub.com/api/collections/init"
headers = {"max-key": "YOUR_API_KEY", "Accept": "application/json"}
data = {"number": "0770000000", "amount": 1000, "client_ref": "INV-001"}
response = requests.post(url, json=data, headers=headers)
print(response.json())
fetch('https://pay.imaxinnovationhub.com/api/collections/init', {
method: 'POST',
headers: {
'max-key': 'YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({ number: '0770000000', amount: 1000, client_ref: 'INV-001' })
})
.then(res => res.json()).then(console.log);
const axios = require('axios');
axios.post('https://pay.imaxinnovationhub.com/api/collections/init', {
number: '0770000000',
amount: 1000,
client_ref: 'INV-001'
}, {
headers: { 'max-key': 'YOUR_API_KEY' }
})
.then(res => console.log(res.data))
.catch(err => console.error(err));
package main
import ("bytes"; "encoding/json"; "net/http"; "io/ioutil")
func main() {
data, _ := json.Marshal(map[string]interface{}{
"number": "0770000000", "amount": 1000, "client_ref": "INV-001",
})
req, _ := http.NewRequest("POST", "https://pay.imaxinnovationhub.com/api/collections/init", bytes.NewBuffer(data))
req.Header.Set("max-key", "YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
println(string(body))
}
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("max-key", "YOUR_API_KEY");
var data = new { number = "0770000000", amount = 1000, client_ref = "INV-001" };
var response = await client.PostAsJsonAsync("https://pay.imaxinnovationhub.com/api/collections/init", data);
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
2. Mobile Money Disbursements
POST
/disbursements/transfer
Transfer funds from your account to a recipient's phone number.
Parameters
| Field | Type | Req | Description |
|---|---|---|---|
number |
String | * | Recipient MSISDN |
amount |
Number | * | Amount in UGX (Min 500) |
client_ref |
String | * | Unique transaction reference |
Response Example
{
"status": "success"
}
Sample Implementation
$client = new \GuzzleHttp\Client();
$response = $client->post('https://pay.imaxinnovationhub.com/api/disbursements/transfer', [
'headers' => [
'max-key' => 'YOUR_API_KEY',
'Accept' => 'application/json',
],
'json' => [
'number' => '0770000000',
'amount' => 2000,
'client_ref' => 'REF-123'
]
]);
echo $response->getBody();
import requests
url = "https://pay.imaxinnovationhub.com/api/disbursements/transfer"
headers = {"max-key": "YOUR_API_KEY", "Accept": "application/json"}
data = {"number": "0770000000", "amount": 2000, "client_ref": "REF-123"}
response = requests.post(url, json=data, headers=headers)
print(response.json())
fetch('https://pay.imaxinnovationhub.com/api/disbursements/transfer', {
method: 'POST',
headers: {
'max-key': 'YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({ number: '0770000000', amount: 2000, client_ref: 'REF-123' })
})
.then(res => res.json()).then(console.log);
const axios = require('axios');
axios.post('https://pay.imaxinnovationhub.com/api/disbursements/transfer', {
number: '0770000000',
amount: 2000,
client_ref: 'REF-123'
}, {
headers: { 'max-key': 'YOUR_API_KEY' }
})
.then(res => console.log(res.data))
.catch(err => console.error(err));
package main
import ("bytes"; "encoding/json"; "net/http"; "io/ioutil")
func main() {
data, _ := json.Marshal(map[string]interface{}{
"number": "0770000000", "amount": 2000, "client_ref": "REF-123",
})
req, _ := http.NewRequest("POST", "https://pay.imaxinnovationhub.com/api/disbursements/transfer", bytes.NewBuffer(data))
req.Header.Set("max-key", "YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
println(string(body))
}
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("max-key", "YOUR_API_KEY");
var data = new { number = "0770000000", amount = 2000, client_ref = "REF-123" };
var response = await client.PostAsJsonAsync("https://pay.imaxinnovationhub.com/api/disbursements/transfer", data);
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
3. Transaction Status (Single)
POST
/v1/transaction/status
Check the status and details of a single transaction using its reference.
Parameters
| Field | Type | Req | Description |
|---|---|---|---|
reference |
String | - | Your client_ref, payment_id, or external_ref |
msisdn |
String | - | Customer phone number (e.g. 077XXXXXXX) |
operator |
String | - | Network operator (e.g. mtnuganda, airtel) |
Note: At least reference or msisdn must be provided. |
|||
Response Example
{
"status": "success",
"data": {
"payment_id": "202405-111010-1234",
"client_ref": "REF-001",
"payment_amount": "5000",
"status": "completed",
"type": "collection",
"operator": "mtnuganda",
"msisdn": "0770000000",
"payment_date": "2024-05-11 10:10:10"
}
}
Sample Implementation
$client = new \GuzzleHttp\Client();
$response = $client->post('https://pay.imaxinnovationhub.com/api/v1/transaction/status', [
'headers' => [ 'max-key' => 'YOUR_API_KEY' ],
'json' => [ 'reference' => 'REF-001' ]
]);
echo $response->getBody();
import requests
url = "https://pay.imaxinnovationhub.com/api/transaction/status"
data = {"reference": "REF-001"}
headers = {"max-key": "YOUR_API_KEY"}
response = requests.post(url, json=data, headers=headers)
print(response.json())
fetch('https://pay.imaxinnovationhub.com/api/v1/transaction/status', {
method: 'POST',
headers: {
'max-key': 'YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({ reference: 'REF-001' })
})
.then(res => res.json()).then(console.log);
const axios = require('axios');
axios.post('https://pay.imaxinnovationhub.com/api/v1/transaction/status', {
reference: 'REF-001'
}, {
headers: { 'max-key': 'YOUR_API_KEY' }
}).then(res => console.log(res.data));
data, _ := json.Marshal(map[string]string{"reference": "REF-001"})
req, _ := http.NewRequest("POST", "https://pay.imaxinnovationhub.com/api/v1/transaction/status", bytes.NewBuffer(data))
req.Header.Set("max-key", "YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("max-key", "YOUR_API_KEY");
var data = new { reference = "REF-001" };
var response = await client.PostAsJsonAsync("https://pay.imaxinnovationhub.com/api/v1/transaction/status", data);
4. Transaction Status (Bulk)
POST
/v1/transactions/bulk-status
Check multiple transaction statuses at once by sending an array of references.
Parameters
| Field | Type | Req | Description |
|---|---|---|---|
references |
Array | * | List of references to look up |
Response Example
{
"status": "success",
"data": [
{
"reference": "REF-001",
"found": true,
"data": { ... }
},
{
"reference": "REF-002",
"found": false,
"data": null
}
]
}
Sample Implementation
$client = new \GuzzleHttp\Client();
$response = $client->post('https://pay.imaxinnovationhub.com/api/v1/transactions/bulk-status', [
'headers' => [ 'max-key' => 'YOUR_API_KEY' ],
'json' => [ 'references' => ['REF-001', 'REF-002'] ]
]);
echo $response->getBody();
const axios = require('axios');
axios.post('https://pay.imaxinnovationhub.com/api/v1/transactions/bulk-status', {
references: ['REF-001', 'REF-002']
}, {
headers: { 'max-key': 'YOUR_API_KEY' }
}).then(res => console.log(res.data));
Supported Telecoms & Prefixes
Airtel Uganda
070, 075, 074
MTN Uganda
078, 077, 076