How Global routing works
Global Payments cover the rest of the world (outside the Kenya V1 flow) through
a single unified endpoint: POST /api/global/payments. The same request shape
handles both collections (request_type: payment) and payouts
(request_type: withdrawal) across countries — KE, TZ, ZM, BW, NG, and more.
The routing flow
Section titled “The routing flow”Global payments are discovery-driven. Before creating a payment, you call the Discovery API to learn how to route it for the customer’s country. The discovery response tells you which provider, network, and channel to use, and you copy those values into your payment request.
- Discover available rails, providers, and networks for the country.
- Pick a provider and the matching network/channel details.
- Create the payment, passing those details in
provider,provider_config, andvendor_config. - Receive the final result on your callback URL.
1. Discover routing details
Section titled “1. Discover routing details”curl "$PH_BASE_URL/api/global/discovery/payment-world/country?country=KE" \ -u "$PH_API_USERNAME:$PH_API_PASSWORD"<?php$ch = curl_init("$baseUrl/api/global/discovery/payment-world/country?country=KE");curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_USERPWD => "$username:$password",]);$response = curl_exec($ch);curl_close($ch);echo $response;import requests
response = requests.get( f"{base_url}/api/global/discovery/payment-world/country", auth=(username, password), params={"country": "KE"},)print(response.json())const auth = Buffer.from(`${username}:${password}`).toString("base64");
const response = await fetch( `${baseUrl}/api/global/discovery/payment-world/country?country=KE`, { headers: { Authorization: `Basic ${auth}` } },);
console.log(await response.json());The response describes the routing options:
{ "rails": { "bank": true, "card": false, "momo": true }, "country": "KE", "currency": "KES", "available_providers": { "bank": ["i&m", "absa", "equity", "dtb", "standard_chartered", "stanbic", "kcb"], "momo": ["bitlipa", "yellowcard", "m-pesa", "mpesa_dc", "sasapay"] }, "provider_networks": { "m-pesa": [ { "network_id": "m-pesa", "channel_id": "m-pesa", "network_code": "MPESA", "min_amount": 1, "max_amount": 150000 } ] }}2. Map the response to your request
Section titled “2. Map the response to your request”| Discovery field | Payment request field |
|---|---|
available_providers.* |
provider |
rails key (momo/bank/card) |
transaction_channel |
provider_networks[provider].network_id |
provider_config.network_id |
provider_networks[provider].channel_id |
provider_config.channel_id |

