Trile
Get started
Subscription billing for Nepal · नेपालको लागि

Subscriptions that pay themselves.

नेपाली व्यवसायहरूको लागि सब्स्क्रिप्सन बिलिङ — एक API, वालेटबाट स्वतः कटौती।

Nepali banks don't support recurring card charges — so Trile flips it. Your customer funds a wallet once, via eSewa, Khalti, IME Pay, or bank, and every billing cycle deducts automatically. One API, paisa-precise, priced in रु.

Wallet top-ups — eSewa · Khalti · IME Pay · bank Test mode with nep_test_ keys Signed webhooks + event log
A hand pours coins into a clay pot once; from its base a steady, repeating stream pays out on its own — fund the wallet once, every cycle pays itself.

THE WALLET MODEL · वालेट मोडेल

Cards can't auto-renew here. So we don't use them.

No card-on-file rail exists here. So the customer pre-funds a wallet, and every renewal is an internal ledger movement — not a charge that can decline.

ग्राहकले वालेटमा पैसा राख्छन् — हरेक नवीकरण भित्री खाता चलन हो, नयाँ कार्ड शुल्क होइन।

Left: a payment card pressed against a closed shop shutter — blocked, no recurring rail. Right: a wallet pours a steady, repeating stream on its own.

BUILT FOR CORRECTNESS · भरपर्दो

Money software has to be exact. Trile is built that way on purpose.

A traditional brass balance scale resting in perfect equilibrium — the books always balance.

Idempotency keys

Every write is safe to retry — a wallet is never double-charged.

Signed webhooks

Each event is signed — verify it came from Trile before you trust it.

Append-only event log

A durable, ordered stream you can replay to rebuild your state.

Daily reconciliation

Ledger and balance reconciled every day — your books match.

Operates within Nepal Rastra Bank rules — KYC-tiered wallet caps read from the API, data localized in Nepal. No license claimed.

How Trile works →

HOW IT WORKS · कसरी काम गर्छ

Four objects, one wallet. It pays itself, every cycle.

A Subscription draws an Invoice from the customer's wallet each cycle. That's the whole model.

prod_ price_ sub_ inv_

cus_ owns a wal_ wallet — it funds the subscription each cycle.

A prayer wheel given a single push keeps turning on its own, releasing one small payment each turn — automatic recurrence.

DEVELOPERS · डेभलपरहरू

A clean API.
No surprises in your books.

Amounts in integer paisa, never floats. Every write safe to retry. Responses always enveloped. Test against a sandbox with nep_test_ keys, then swap to nep_live_.

  • Mandatory idempotency keys on every write
  • Hosted checkout, or the raw /v1 API
  • Signed webhooks + an append-only event log
bash · subscribe.sh
# First cycle deducts from the customer's wallet
curl $TRILE_API/v1/subscriptions \
  -H "x-api-key: $TRILE_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{ "customerId": "cus_01ARZ…",
        "priceId": "price_01ARZ…" }'
201 · POST /v1/subscriptions
// Every response is enveloped: { success, data, meta }
{
  "success": true,
  "data": {
    "id": "sub_01ARZ3NDEKTSV4RR",
    "status": "active",
    "price": "price_01ARZ3NDEKTSV4"
  },
  "meta": { "requestId": "req_aBcDeFgHiJkL" }
}

webhook · invoice.paid

Signed · delivered to merchant.example.com/hooks · 142ms

Verified
{
  "id": "evt_01ARZ3NDEK",
  "type": "invoice.paid",
  "data": {
    "object": "invoice",
    "amount_paisa": "49900",
    "currency": "NPR",
    "subscription": "sub_01ARZ3NDEK"
  }
}

MONEY DONE RIGHT · पैसा सही तरिकाले

Paisa, not floats. Rupees the way Nepal counts them.

Integer paisa as strings — rounding can never drift your books. Figures group in lakhs and crores, each row carrying both an AD and a Bikram Sambat date.

हरेक रकम पूर्णांक पैसा हो — लाख र करोडमा अल्पविराम, दुवै पात्रोमा मिति।

INVOICE TOTAL · इनभ्वाइस रकम

रु 1,25,00,000.00

amount_paisa "12500000000"
18 May 2026, 09:00 ४ जेठ २०८३, ९:०० AM
Rupee notes and coins arranged in three growing clusters, echoing South-Asian lakh and crore grouping.

STATES YOU HANDLE · अवस्थाहरू

Every invoice. Both calendars. past_due is recoverable, not an error.

See it in the docs →
A single oil lamp shown three times: burning steadily, dimmed to a faint ember, then relit — active, past_due, then recovered.
active
past_due

wallet short

active

top up + retry

Customer · ग्राहकPlanAmountWhenStatus
Pemba Sherpa
पेम्बा शेर्पा
Pathshala — Proरु  499.00
18 May 2026, 14:32
४ जेठ २०८३, २:३२
Paid
Anjali Maharjan
अञ्जली महर्जन
Daalcha — Businessरु  4,999.00
18 May 2026, 11:08
४ जेठ २०८३, ११:०८
Paid
Birendra Karki
बिरेन्द्र कार्की
Pathshala — Familyरु  1,250.00
18 May 2026, 09:47
४ जेठ २०८३, ९:४७
Past due
Sapana Tamang
सपना तामाङ
Pathshala — Soloरु  2,499.00
18 May 2026, 08:22
४ जेठ २०८३, ८:२२
Paid
Kirtipur Hotels Pvt.
किर्तिपुर होटल्स
Hospitality — Suiteरु  1,00,000.00
17 May 2026, 23:11
३ जेठ २०८३, ११:११
Paid
A Nepali shopkeeper and a customer completing a purchase at a textile counter in warm light.

HOSTED CHECKOUT · होस्टेड चेकआउट

Onboard a real customer in three steps you don't build.

  1. 1

    Verify phone · फोन प्रमाणित

    The customer confirms their number with a one-time code — no password to manage.

  2. 2

    Top up the wallet · वालेट टप-अप

    They fund via eSewa, Khalti, IME Pay, or bank. Settlement is verified server-side, never trusted from the redirect.

  3. 3

    Subscribe · सदस्यता

    The first cycle deducts immediately; every renewal draws from the balance automatically.

PRICING · मूल्य निर्धारण

Pricing scales with your volume. Tell us what you're building.

We'll match a plan to your charge volume and settlement needs — no hidden FX, no surprises in the dashboard. Start in test mode today with nep_test_ keys; talk to us before you go live.

मूल्य तपाईंको भोल्युम अनुसार — लुकेका शुल्क छैनन्।

COMMON QUESTIONS · प्रश्नहरू

Straight answers, before you write a line of code.

How does Trile handle recurring payments in Nepal?

त्रिलेले पुनरावर्ती भुक्तानी कसरी सम्हाल्छ?

Trile charges a prepaid wallet instead of a card. A customer tops up once through eSewa, Khalti, IME Pay, or a bank transfer, and each billing cycle deducts automatically from the balance. Failed charges retry; when the wallet runs short the subscription goes past_due and recovers on the next top-up.

Why a wallet instead of a card on file?

कार्डको सट्टा वालेट किन?

Nepali banks don't support Variable Recurring Payments, and eSewa, Khalti, and Fonepay can't schedule auto-charges — so there's no card to pull from each month. Trile inverts the model: the customer pre-funds a wallet, and Trile deducts from that balance on every renewal.

How does Trile represent money?

त्रिलेले रकम कसरी राख्छ?

Every amount is integer paisa — NPR × 100 — serialized as a string, never a float. NPR 499.00 is "49900". Amounts display with South-Asian lakh and crore grouping, and transactions carry both AD and Bikram Sambat dates.

What happens when a customer's wallet runs low?

ग्राहकको वालेट सकिएमा के हुन्छ?

The renewal invoice stays open, the subscription moves to past_due, and an invoice.payment_failed webhook fires. When the customer tops up, Trile retries and the subscription returns to active. past_due is a normal, recoverable state — not an error.

Is Trile compliant with Nepal Rastra Bank rules?

के त्रिले NRB नियम अनुसार छ?

Trile operates within Nepal Rastra Bank rules. Wallet balances are capped by each customer's KYC tier, the cap is read from the API rather than hard-coded, and data is localized within Nepal. A customer raises their limit by completing a higher KYC tier.

The Annapurna and Macchapuchhre (fishtail) ridgeline at dawn, with prayer flags on the foreground ridge.

Start building in test mode.

आजै टेस्ट मोडमा निर्माण सुरु गर्नुहोस्।

Create a sandbox account, grab your nep_test_ keys, and run your first wallet-funded subscription end to end — before a single rupee moves.