Payment rails
A rail is a payment method your customers can use to pay a HelaMesh payment link. You enable rails per payment link at creation time โ a single link can support multiple rails and the customer picks at checkout.
HelaMesh currently supports three rails:
| Rail | Identifier | Currency | Est. settlement |
|---|---|---|---|
| M-Pesa | MPESA | KES | ~20 seconds |
| USDT on TRON | USDT_TRON | USDT (TRC20) | ~60 seconds |
| USDT on BNB Smart Chain | USDT_BSC | USDT (BEP20) | ~45 seconds |
How rail selection worksโ
You don't ask the customer which rail they want before creating the payment link. Instead:
- You create a payment link with
enabledRails: ["MPESA", "USDT_TRON", "USDT_BSC"](or any subset) - The customer opens the checkout page or embedded widget
- HelaMesh shows them only the rails you've enabled โ they pick there
- The link confirms via whichever rail the customer used
This keeps your integration simple: one link, one webhook, one payment_link.confirmed event โ regardless of which rail was used.
Rail detailsโ
M-Pesa (MPESA)โ
Mobile money via Safaricom STK push. The customer enters their Safaricom number, receives a prompt on their phone, and enters their PIN. Settlement is near-instant.
- Requires a connected M-Pesa paybill (configure under Settings โ M-Pesa in the dashboard)
- Amount shown in KES. You set a
mpesaAmountwhen creating the link, or HelaMesh converts fromusdtAmountusing a live rate - Available in Kenya only (Safaricom network)
- Sandbox: use the test STK push button in the dashboard to trigger a simulated prompt
USDT on TRON (USDT_TRON)โ
TRC20 USDT received at a unique address derived from your store's xpub. This is the most common withdrawal path from Binance for Kenyan users.
- ~$0.30 network fee (paid by the sender)
- ~60 second confirmation
- Address is unique per payment link โ derived from your xpub at the link's HD index
USDT on BNB Smart Chain (USDT_BSC)โ
BEP20 USDT received at a unique address derived from your store's xpub. Cheapest of the two crypto rails.
- ~$0.10 network fee (paid by the sender)
- ~45 second confirmation
- Address is unique per payment link โ derived from your xpub at the link's HD index
Enabling railsโ
Rails are configured per payment link in the dashboard or via API:
{
"usdtAmount": "100",
"enabledRails": ["MPESA", "USDT_TRON", "USDT_BSC"],
"description": "Order #1042"
}
You can enable any combination. A link with only MPESA will show only the M-Pesa flow. A link with all three gives the customer full choice.
Coming laterโ
- Ethereum mainnet (ERC20 USDT) โ higher fees but the most widely-held chain globally
- Solana (SPL USDT) โ fast and cheap, popular with Western users
- Airtel Money โ Kenya's second mobile money network