plan_prices table — there is no “base currency” concept.
How It Works
Currency Resolution at Checkout
When you callPOST /api/public/checkout, Crovver resolves the currency in this order:
- Explicit currency — use the value you passed in
currency(validated againstplan_prices) - Plan default — if no currency is passed, use the first active
plan_pricesentry (ordered bycreated_at ASC)
plan_prices row, the API returns 422 CURRENCY_NOT_SUPPORTED.
Seat-Based Multi-Currency
For seat-based plans eachplan_prices row stores both a base_price and a per_seat_price for that currency:
| Currency | Base price | Per-seat price |
|---|---|---|
| USD | $50.00 (5000 cents) | $5.00 (500 cents) |
| NPR | Rs 6,000 | Rs 600 |
Add-on Pricing
Add-ons have the same per-currency pricing model (addon_pricing). A tenant can only purchase an add-on in their subscription’s currency. Attempting to buy with a different currency returns 422.
Supported Providers by Currency
Different payment providers support different currencies. Map providers to currencies when configuring your org:| Currency | Typical provider |
|---|---|
| USD, EUR | Stripe |
| NPR | Khalti, eSewa |