Appearance
Plans & credit packs
Plans are what customers buy. Each plan = price + billing interval + a limits block + an allowed-model list. Prices are in BDT (stored as poisha, 1/100 BDT).
Anatomy of a plan
| Field | Example | Meaning |
|---|---|---|
| Slug / Name | pro-monthly / "Pro" | Identity shown at checkout |
| Interval | DAILY · WEEKLY · MONTHLY · YEARLY · ENTERPRISE | Billing cycle |
| Price | 99900 poisha = ৳999 | Charged via SSLCommerz / bKash / Nagad / DCB carrier billing |
| Limits JSON | see below | The quota engine reads this |
| Allowed models | list of model ids | What the tier can use |
json
{
"monthlyRequests": 500,
"tokenLimit": 1500000,
"imageCredits": 6,
"videoCredits": 3,
"concurrentJobs": 5,
"apiAccess": true,
"priorityLevel": 3
}imageCredits / videoCredits are counts — how many images / videos the tier includes per cycle. tokenLimit is the text-token allowance. Each call debits by count, not by the model's price.
Cost, margin & the economics panel
The Plans page shows, per plan, a live cost-to-serve breakdown next to the price:
Net margin = price − provider cost − payment-gateway fee (2%) − overhead (8%)Provider cost = the granted credits valued at the cheapest servable model's real BDT unit cost (video is the big driver). Each grant field shows its own ≈BDT cost as you edit, and a green/red bar shows the resulting net margin. Seeded plans are tuned to ~62–70% net margin at full use.
Use the Recommend (65%) button (sparkle icon) in the plan editor to back-solve grants for a target margin from the price — it splits the provider budget roughly 65% video / 25% image / 10% tokens.
Creating a tier
Plans → New plan → fill the structured form (each grant field shows its per-unit cost and the live margin updates as you type) → Create. It appears at checkout ordered by sortOrder. Archive (trash icon) hides a plan from new purchases — existing subscribers keep it until expiry.
Credit packs (one-time top-ups)
Alongside recurring plans, Plans → Credit packs manages one-time purchases that add credits straight to a customer's wallet — no subscription, no renewal. A pack's grants block mirrors plan limits (textRequests, tokens, imageCredits, videoCredits).
| Pack | Price | Grants (req / tokens / img / vid) |
|---|---|---|
| Starter Pack | ৳149 | 100 / 100k / 6 / 0 |
| Creator Pack | ৳499 | 400 / 300k / 10 / 1 |
| Pro Pack | ৳999 | 1000 / 1.5M / 6 / 3 |
| Studio Pack | ৳2,499 | 3000 / 3M / 10 / 8 |
| Mega Pack | ৳4,999 | 8000 / 6M / 20 / 16 |
Packs carry the same cost/margin panel as plans (provider cost + 2% fees + 8% overhead), so you set top-up prices with the net margin in view. Full CRUD lives on the page (POST/PATCH/DELETE /v1/admin/credit-packs); delete is a soft-deactivate — existing wallets keep credits already granted.
Building a reseller package
A "reseller package" is a plan tailored to a partner who resells access under their own brand:
- Create a dedicated plan — e.g.
partner-acme-monthly, interval MONTHLY, negotiated price, generous limits,apiAccess: true(the reseller integrates via API keys). - Restrict the model list to what the deal covers (only cheap image models, for example).
- Grant it manually — Users → the partner's account → Grant plan → pick the plan + duration. No card required. Repeat on renewal or script it via
POST /v1/admin/users/:id/grant-subscription. - Enterprise teams — create a Workspace for the partner, invite their staff; attach the subscription to the workspace so all members share the pool.
- Watch consumption — Analytics → top users; per-user detail shows recent usage.
For carrier-billed consumer packages (Bangladesh DCB via Hullor): create a BDT plan, and the checkout flow handles carrier consent SMS. Amounts must match a plan configured on the Hullor side (keyword + amount pair).
Promotions
Coupons → New coupon → percent-off or fixed-amount, optional redemption cap and start/expiry window. Codes are entered at checkout.
Ad-hoc credits
For goodwill / sales trials: Users → user → Grant credits (text requests, tokens, image credits, video credits — with an internal note). Instant, no payment involved.