Appearance
Payment options by country
Ask Payd which networks and banks work in a country, and the limits for each. Use it to build your payment picker and to get the ids a payin or payout needs.
GET
https://api.payd.money/api/v2/payments/discovery/{country}country is a two-letter code, such as UG.
bash
curl https://api.payd.money/api/v2/payments/discovery/UG \
-u "$PAYD_API_USERNAME:$PAYD_API_PASSWORD"js
const auth = Buffer.from(
`${process.env.PAYD_API_USERNAME}:${process.env.PAYD_API_PASSWORD}`,
).toString('base64')
const options = await fetch('https://api.payd.money/api/v2/payments/discovery/UG', {
headers: { Authorization: `Basic ${auth}` },
}).then((r) => r.json())
const networks = Object.values(options.provider_networks ?? {}).flatMap((group) => group.networks)
const collect = networks.filter((n) => n.channel_type === 'momo' && n.ramp_type === 'deposit' && n.status === 'active')
const payOut = networks.filter((n) => n.ramp_type === 'withdraw' && n.status === 'active')python
import os
import requests
options = requests.get(
"https://api.payd.money/api/v2/payments/discovery/UG",
auth=(os.environ["PAYD_API_USERNAME"], os.environ["PAYD_API_PASSWORD"]),
timeout=15,
).json()
networks = [n for group in (options.get("provider_networks") or {}).values() for n in group["networks"]]
collect = [n for n in networks if n["channel_type"] == "momo" and n["ramp_type"] == "deposit" and n["status"] == "active"]
pay_out = [n for n in networks if n["ramp_type"] == "withdraw" and n["status"] == "active"]Response
The response is long. This example keeps two networks:
json
{
"country": "UG",
"currency": "UGX",
"has_networks": true,
"rails": { "bank": false, "card": false, "momo": true },
"provider_networks": {
"alpha": {
"networks": [
{
"id": "04a3083a-567c-4a2b-aa39-fa8f19e64341-deposit",
"network_id": "04a3083a-567c-4a2b-aa39-fa8f19e64341",
"network_name": "Airtel Mobile Money",
"network_code": "AIRTEL_UGANDA",
"channel_type": "momo",
"channel_id": "e167def0-c4f0-46e2-aaa9-50046f13b0a7",
"ramp_type": "deposit",
"min_amount": 15001,
"max_amount": 3000000,
"settlement_type": "instant",
"settlement_seconds": 60,
"country": "UG",
"status": "active",
"provider": "alpha"
},
{
"id": "04a3083a-567c-4a2b-aa39-fa8f19e64341-withdraw",
"network_id": "04a3083a-567c-4a2b-aa39-fa8f19e64341",
"network_name": "Airtel Mobile Money",
"network_code": "AIRTEL_UGANDA",
"channel_type": "momo",
"channel_id": "e573694c-d9d2-4511-8dec-aa633baf19f3",
"ramp_type": "withdraw",
"min_amount": 15001,
"max_amount": 3000000,
"settlement_type": "instant",
"settlement_seconds": 60,
"country": "UG",
"status": "active",
"provider": "alpha"
}
]
}
},
"metadata": { "version": "1.0.0", "last_updated": "2026-10-16T12:42:21Z", "cache_ttl_seconds": 300 }
}Top-level fields
| Field | Meaning |
|---|---|
country, currency | The country and its local currency. Send this currency in payins and payouts. |
has_networks | false when Payd has nothing in this country yet. |
rails | Which kinds of payment work here: momo (mobile money), bank and card. |
provider_networks | Networks, grouped by route. |
metadata.cache_ttl_seconds | How long you can keep this response before you fetch it again. |
Each group in provider_networks is keyed by a route id, such as alpha. Route ids are names Payd gives its routes. They can change, so do not hard-code them or show them to users: loop over every group, as the examples do.
Other top-level fields are for the Payd Money App. Ignore them.
Network fields
| Field | Meaning |
|---|---|
network_name | The name to show your user, such as Airtel Mobile Money or a bank name. |
network_id | Send as provider_config.network_id. The same for collections and payouts on one network. |
channel_id | Send as provider_config.channel_id. It differs between deposit and withdraw, so take it from the entry you use. |
network_code | A readable code for the network. Handy in logs. |
channel_type | momo, bank, eft (a bank in South Africa) or card. |
ramp_type | deposit for collections, withdraw for payouts. |
min_amount, max_amount | Limits in the local currency. 0 means Payd has no limit on file, and the network's own limits apply. |
settlement_type | How the network finishes a payment: instant, same_day, next_business_day, manual (a bank processes it by hand) or delayed. Empty when Payd has no estimate. Treat a value you do not know as slow. |
settlement_seconds | About how long a payment takes to finish, in seconds. 0 when Payd has no estimate. |
status | Use only active entries. |
provider | The route id of the group. You never need to send it. |
These fields are the source of truth for which networks you can use, their limits and how long they take. Other pages in these docs show snapshots of them.
The same network appears once for each direction. To list the mobile money networks a customer can pay with, keep deposit entries where channel_type is momo. To list where you can send money, keep withdraw entries.
Countries
| Country | Code | Currency | Collect with mobile money | Collect by bank transfer | Pay out to mobile money | Pay out to banks |
|---|---|---|---|---|---|---|
| Kenya | KE | KES | M-Pesa | Yes | M-Pesa | Yes |
| Uganda | UG | UGX | Yes | Yes | ||
| Tanzania | TZ | TZS | Yes | Yes | Yes | Yes |
| Rwanda | RW | RWF | Yes | Yes | ||
| Zambia | ZM | ZMW | Yes | Yes | ||
| Nigeria | NG | NGN | Yes | Yes | ||
| South Africa | ZA | ZAR | Yes | |||
| Botswana | BW | BWP | Yes | Yes | Yes | Yes |
| Ethiopia | ET | ETB | Yes | |||
| Côte d'Ivoire | CI | XOF | Yes | Yes | ||
| Senegal | SN | XOF | Yes | Yes | ||
| Cameroon | CM | XAF | Yes | Yes | ||
| Benin | BJ | XOF | Yes | Yes | ||
| Togo | TG | XOF | Yes | Yes |
Card payments are not tied to a country. See card payments.
Kenya
Kenya works without discovery. For M-Pesa, send provider_config as {} and Payd picks the route. See collect with M-Pesa and pay out with M-Pesa. Use discovery in Kenya to list banks for payouts.
Tips
- Cache the response for
cache_ttl_seconds, then fetch it again. Networks and limits change. - Check the amount against
min_amountandmax_amountbefore you send it, so your user sees a clear message. - Use
settlement_secondsto tell your user how long to expect. See limits and settlement. - Banks are listed one per bank, and Nigeria has hundreds. Offer a search box.

