Recurring billing on mobile money rails

Subscriptions, settled by phone.

Cards are rare here. Phones are not. Chia bills your customers over Airtel Money, TNM Mpamba and MTN MoMo every cycle - the prompt, the PIN, the retry, the receipt, the webhook. All of it.

Public beta · merchant of record · live in Malawi

1
Their phone · day 30
Airtel Money*211#
Pay MWK 4,500 to Nyasa Fitness Club
Monthly Pro · renewal

Enter PIN to approve:
* * * *
2
Their inbox · seconds later
Payment received. MWK 4,500 to Nyasa Fitness Club. Your Monthly Pro plan renews again on 17 Aug. Ref: CHR-1847.
3
Your server · same moment
POST /webhooks/chia
{ "event": "payment.success", "amount": 4500 }

Three steps.
Then it runs itself.

You bring a plan and a price. Chia turns it into revenue that arrives on schedule, without anyone typing a USSD code from memory.

01

Create a plan

Name, price, billing interval. From the dashboard or one API call. Monthly, weekly, or any cycle your business runs on.

plans.create({ amount: 4500, interval: "monthly" })
02

Share your page

Every business gets a hosted storefront and checkout. Customers subscribe with a phone number - no app install, no card.

usechia.com/s/nyasa-fitness
03

Chia collects

Each cycle we prompt, confirm, retry on failure, and settle. You watch the money arrive; your customers just tap a PIN.

renewal_pending → active · 94% collection rate

Mobile money fails loudly.
Chia is built for that.

Wallets go empty. Networks drop mid-prompt. A real subscription engine is a state machine that expects failure - here is ours, verbatim from the codebase.

Smart retries

Failed renewals retry on a schedule tuned to payday patterns, not naive exponential backoff.

Smart provider routing

As merchant of record, Chia picks the best rail for each charge and falls back automatically when one fails.

Webhooks, normalized

Every provider callback becomes one event shape. Deduplicated, signed, retried until your server says 200.

For developers

Built by developers.
For a Tuesday deadline.

  • Type-safe TypeScript SDK, open source on npm as @chiahq/sdk
  • Sandbox environment with test wallets for every provider
  • Hosted checkout, or fully headless via the intents API
  • MCP server - your AI assistant can operate your billing
billing.ts
import { ChiaSDK } from "@chiahq/sdk" const sdk = ChiaSDK.getInstance() // one call, any rail const payment = await sdk.collections.create({ amount: 4500, currency: "MWK", phone: "+265 884 123 456", })

Pricing that reads
in one breath.

5.5%

per successful renewal. Provider fees and payout fees absorbed. No monthly fee, no setup fee, no charge for failures.

Unlimited plans & subscribersincluded
Smart provider routing with fallbackincluded
Hosted storefront & checkoutincluded
Webhook delivery & retriesincluded
Weekly payouts, every Fridayincluded
Failed payment attemptsfree
Public beta

The billing layer Africa runs on starts with your first plan.