Billing
Configure plan purchase and wallet top-up flows through Dodo Payments.
Billing has one source of truth for money display, plan pricing, wallet balance, invoices, and payment provider state. Currency and prices should come from the centralized pricing layer, not hardcoded UI text.
Active provider
Dodo Payments is the active launch provider. Razorpay can remain configured for later activation after business verification. Stripe and Twilio are not launch blockers for the current plan.
Plan purchase flow
- Open Dashboard > Billing or Dashboard > Plans.
- Select a plan.
- Start Dodo hosted checkout.
- Complete test payment.
- Return to the app.
- Confirm plan state, invoice history, and provider logs.
Wallet top-up flow
- Open Dashboard > Billing.
- Choose a wallet top-up amount.
- Complete Dodo hosted checkout.
- Confirm wallet balance is credited only after verified webhook processing.
- Confirm the transaction appears in invoice or transaction history.
Expected records
| Record | Expected source |
|---|---|
| Plan price | Central pricing catalog |
| Display currency | Central money formatter |
| Checkout session | Dodo provider adapter |
| Wallet credit | Verified Dodo webhook |
| Invoice history | Billing invoice service |
Troubleshooting
- If checkout succeeds but wallet does not update, check Dodo webhook logs and pending top-up state.
- If the UI shows the wrong currency, check the centralized pricing catalog and formatter.
- If invoice history is empty after payment, check webhook processing and invoice service logs.
- If a free trial behaves like a paid plan, check trial limits, feature gates, and plan resolver output.