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 six rails โ M-Pesa plus USDT on five chains:
| 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 |
| USDT on Ethereum | USDT_ETH | USDT (ERC20) | ~3 minutes |
| USDT on Polygon | USDT_POLYGON | USDT (Polygon PoS) | ~30 seconds |
| USDT on Solana | USDT_SOL | USDT (SPL) | ~10 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_SOL"](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.
- ~$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
USDT on Ethereum (USDT_ETH)โ
ERC20 USDT โ the most widely-held chain globally. Higher fees, slower confirmation.
- Variable gas fee (paid by the sender), often several dollars
- ~3 minute confirmation
- Uses the same EVM address as BSC and Polygon โ derived from your xpub at the link's HD index
USDT on Polygon (USDT_POLYGON)โ
USDT on Polygon PoS. Low fees, fast finality. Polygon is EVM-compatible, so it reuses the same address as Ethereum and BSC.
- ~$0.01 network fee (paid by the sender)
- ~30 second confirmation
- Uses the same EVM address as BSC and Ethereum โ derived from your xpub at the link's HD index
USDT on Solana (USDT_SOL)โ
SPL USDT โ ultra-fast and sub-cent fees. Popular with Western users.
- ~$0.001 network fee (paid by the sender)
- ~10 second confirmation
- Address is unique per payment link โ a Solana address derived from your store's seed (ed25519, BIP44 coin type 501)
BSC, Ethereum, and Polygon all use BIP44 coin type 60, so the same 0xโฆ address receives on all three. HelaMesh scans each chain independently and tags every payment with its network, so a Polygon payment is never confused with an Ethereum one. TRON and Solana each use their own distinct address.
Enabling railsโ
Rails are configured per payment link in the dashboard or via API:
{
"usdtAmount": "100",
"enabledRails": ["MPESA", "USDT_TRON", "USDT_BSC", "USDT_ETH", "USDT_POLYGON", "USDT_SOL"],
"description": "Order #1042"
}
You can enable any combination. A link with only MPESA will show only the M-Pesa flow. A link with all six gives the customer full choice.
Coming laterโ
- Airtel Money โ Kenya's second mobile money network
- Base (USDT/USDC) โ Coinbase's L2