Billing & Plans
Manage your subscription, payment method, and invoices from Account → Billing & Plans.
Plans
| Plan | For | Account type |
|---|---|---|
| DEV | Local sandbox & personal experiments (free) | personal |
| PRO | Professional developers, cloud hosting, production | personal |
| ULTRA | Power users: scalability, compliance, infra planning | personal |
| TEAMS | Shared workspaces with Ultra accounts for every member | teams |
Switching plans is instant via the plan selector. The response re-issues your session token so the new plan and entitlements take effect immediately.
Pricing (env-configurable)
Plan amounts are not hardcoded. The plan catalog (PLAN_CATALOG) is built at
runtime from NANOKIT_PRICE_* environment variables, expressed as integer
cents. This lets a deployment set its own currency/amounts without code changes;
the values below are the documented defaults, not fixed prices.
| Plan | Default price | Price env var(s) (cents) | Stripe price id env |
|---|---|---|---|
| DEV | Free (€0) | — | — |
| PRO | €19 / mo | NANOKIT_PRICE_PRO_MONTH, NANOKIT_PRICE_PRO_YEAR | STRIPE_PRICE_PRO_MONTH / _YEAR |
| ULTRA | €39 / mo | NANOKIT_PRICE_ULTRA_MONTH, NANOKIT_PRICE_ULTRA_YEAR | STRIPE_PRICE_ULTRA_MONTH / _YEAR |
| TEAMS | €49 / mo base + €39 / user | NANOKIT_PRICE_TEAMS_MONTH, NANOKIT_PRICE_TEAMS_YEAR, NANOKIT_PRICE_TEAMS_SEAT | STRIPE_PRICE_TEAMS_MONTH / _YEAR |
[!NOTE] Prices are integer cents — e.g.
NANOKIT_PRICE_PRO_MONTH=1900is €19.00. Yearly amounts are independent env vars (commonly discounted vs. 12× monthly).
Teams per-seat tiering
A Teams bill is base + per-seat, with an optional volume tier for large
teams. The monthly total for n active seats is:
base
+ min(n, threshold) × perSeat
+ max(0, n − threshold) × volumeSeat| Env var (cents) | Default | Meaning |
|---|---|---|
NANOKIT_PRICE_TEAMS_MONTH | — | Base subscription, before seats. |
NANOKIT_PRICE_TEAMS_SEAT | — | Per-seat price up to the volume threshold (€39 documented). |
NANOKIT_PRICE_TEAMS_SEAT_VOLUME | — | Cheaper per-seat price above the threshold. |
NANOKIT_PRICE_TEAMS_VOLUME_THRESHOLD | 20 | Seat count at which the volume rate kicks in. |
Choosing TEAMS unlocks team creation. The plan and the account type are kept
in sync: moving to the Teams plan sets your account to teams; moving to any
other plan sets it back to personal. Existing accounts that were on the Teams
plan are reconciled automatically on next load. See
Account types.
Seats (Teams plan)
A Teams subscription includes a number of seats. Active members count against seats; inviting beyond your seat count prompts you to add seats. Only the Owner manages billing and seats (see the roles matrix).
Payment method
Add or update a credit card from the Billing view. Card details are handled through a certified payment gateway — Nanokit never stores raw card numbers.
Invoices
The Invoice and Payment History table lists each invoice with its issue date,
payment method, amount, and status (Paid / Pending). Download any invoice as a
record for your accounting.
Billing modes (mock / sandbox / live)
Billing (the api-billing service) runs in one of three modes, selected
per environment — never hardcoded. The Account UI shows the active mode so
you always know whether charges are real.
| Mode | When | Behaviour |
|---|---|---|
| mock | Local dev (no Stripe key) | Fully in-process — plan changes activate instantly with a fake card. No network, no Stripe account needed. |
| sandbox | NANOKIT_STRIPE_SANDBOX=1 (e.g. staging/test) | Stripe test mode: real Checkout/webhooks with test cards, no real charges. If no test key is configured, falls back to the in-process simulation (still fake cards). |
| live | Production (sk_live_ key) | Real Stripe, real charges. |
Safety: while NANOKIT_STRIPE_SANDBOX is on, a live Stripe key is
refused — a sandbox/test environment can never charge a real card. A test
key (sk_test_…) without the flag automatically runs in sandbox.
Configuration
| Variable | Purpose |
|---|---|
NANOKIT_STRIPE_SANDBOX | 1/true → force sandbox (test) mode for that environment. |
STRIPE_SECRET_KEY | Stripe secret key. sk_live_… for live; sk_test_… for sandbox. |
STRIPE_SECRET_KEY_TEST | Optional dedicated test key, preferred in sandbox. |
STRIPE_WEBHOOK_SECRET | Verifies incoming Stripe webhooks. |
Test cards (sandbox)
In sandbox mode use Stripe’s test cards — they never move real money:
| Card number | Result |
|---|---|
4242 4242 4242 4242 | Payment succeeds |
4000 0025 0000 3155 | Requires 3D Secure authentication |
4000 0000 0000 9995 | Declined (insufficient funds) |
Use any future expiry date, any 3-digit CVC, and any postal code. More test numbers are in the Stripe testing docs .
Nanokit’s hosted environments use sandbox outside production, so you can try upgrades, downgrades, and team seats end-to-end with the test cards above — nothing is charged. Production runs in live mode.