Max Transact API Documentation

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);
Supported Telecoms & Prefixes
Airtel Uganda

070, 075, 074

MTN Uganda

078, 077, 076

<