Skip to main content

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:

RailIdentifierCurrencyEst. settlement
M-PesaMPESAKES~20 seconds
USDT on TRONUSDT_TRONUSDT (TRC20)~60 seconds
USDT on BNB Smart ChainUSDT_BSCUSDT (BEP20)~45 seconds

How rail selection worksโ€‹

You don't ask the customer which rail they want before creating the payment link. Instead:

  1. You create a payment link with enabledRails: ["MPESA", "USDT_TRON", "USDT_BSC"] (or any subset)
  2. The customer opens the checkout page or embedded widget
  3. HelaMesh shows them only the rails you've enabled โ€” they pick there
  4. 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 mpesaAmount when creating the link, or HelaMesh converts from usdtAmount using 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:

POST /v1/payment-links
{
"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