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);

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

<