Skip to main content

Webhooks overview

HelaMesh sends a signed HTTP POST to your webhook URL when a payment confirms โ€” regardless of which rail was used. Your backend should:

  1. Verify the signature
  2. Handle the event by type (event field)
  3. Return 200 OK within 10 seconds

If you return any non-2xx status (or time out), HelaMesh retries with exponential backoff.

Event typesโ€‹

EventWhen it firesWho uses it
payment_link.confirmedA payment link is paid via any rail (M-Pesa, TRON, BSC)Everyone using payment links
transfer.confirmedA USDT deposit arrives at a derived sub-wallet addressPlatforms using HD sub-wallet derivation
Customer pays (M-Pesa PIN / on-chain tx)
โ”‚
โ–ผ
HelaMesh confirms payment โ†’ marks link CONFIRMED
โ”‚
โ–ผ
Webhook enqueued โ†’ dispatcher โ†’ POST to your URL
โ”‚ โ†‘ โ”‚
โ”‚ โ””โ”€โ”€โ”€ retry โ”€โ”€โ”€โ”€โ”€โ”ค (on non-2xx)
โ–ผ โ–ผ
Link stays CONFIRMED Your backend verifies
until 2xx received signature + fulfils order

One webhook event covers all rails โ€” check confirmedRail in the payload to see how the customer paid.

Derived-address flow (transfer.confirmed)โ€‹

User sends USDT to their derived address
โ”‚
โ–ผ
HelaMesh poller detects transfer โ†’ checks confirmation depth
โ”‚
โ–ผ (โ‰ฅ required confirmations)
Webhook enqueued โ†’ dispatcher โ†’ POST to your URL
โ”‚
โ–ผ
Your backend looks up user
by hdIndex, credits balance

No payment link is involved in this flow. Use hdIndex in the payload to identify which of your users received the funds.

Read next: Webhook payload, Verifying signatures, Retries.