6. The pricing model — flat fee + usage-based above an allowance
Source path: knowledge-base/knowledge/product/economics/unit-economics/12-6-the-pricing-model-flat-fee-usage-based-above-an-allowance.md
# 6. The pricing model — flat fee + usage-based above an allowance **One anchor the customer sees: a flat $20/seat that includes a generous monthly inference allowance.** Go past it and you pay for what you use, metered at COGS × markup. Light users never touch the meter; heavy users turn into revenue instead of a cost sink; self-host (BYO key) skips the meter entirely. ### 6.1 The unit (internal accounting only) - **Meridian Credit (MC).** **1 MC = $0.001** (a tenth of a cent), `$1 = 1,000 MC`. Under flat pricing, credits are **not** a customer-facing currency — they are the internal accounting unit for the allowance and the overage meter (the buyer sees "$20/mo incl. ~15M tokens", not a credit balance). ### 6.2 The formula Overage is priced from **measured** token usage — the same numbers `calculateApiCost` already records — times a markup: ``` overage_$ = max(0, variable_COGS − allowance_COGS) × MARKUP variable_COGS = research(loops) + generation(actions) // all per MODEL_PRICING + service prices ``` - **Allowance = $8 of COGS/seat/mo** (~15M mixed tokens) — included in the flat fee, sized so normal use never hits it (living-domain variable COGS ≈ $3.1/seat, well under $8). - **MARKUP = 3×** on overage → **~67% gross margin** on usage past the allowance. Sensitivity: 2× = 50%, 4× = 75%. - **COGS uses the actual model the call ran on** — so if PERFORMANCE routing is enabled, overage prices rise automatically. The meter is self-correcting against model-tier changes. ### 6.3 Per-action overage price (shipped router, MARKUP 3×, 1 MC = $0.001) Below the allowance these are free (bundled). Above it, this is what each action bills: | Action | COGS | **Price (MC)** | ≈ retail | margin | |---|--:|--:|--:|--:| | Chat message | $0.0007 | **3 MC** | $0.003 | 75% | | Game-theory scene | $0.0009 | **3 MC** | $0.003 | 70% | | Interview | $0.0027 | **8 MC** | $0.008 | 67% | | Survey (×10) | $0.0049 | **15 MC** | $0.015 | 68% | | Arc generation (4 scenes) | $0.0049 | **15 MC** | $0.015 | 68% | | Domain creation | $0.0065 | **20 MC** | $0.020 | 68% | | Scene prose | $0.0074 | **23 MC** | $0.023 | 68% | | Variable model | $0.0095 | **29 MC** | $0.029 | 67% | | Scene plan | $0.0098 | **30 MC** | $0.030 | 67% | | Reasoning graph (CRG) | $0.0131 | **40 MC** | $0.040 | 67% | | Embeddings re-index | $0.0060 | **18 MC** | $0.018 | 67% | | Image | $0.04 | **120 MC** | $0.120 | 67% | | TTS narration / scene | $0.105 | **315 MC** | $0.315 | 67% | | Research tick / domain | $0.047 | **143 MC** | $0.143 | 67% | A full creative arc (gen + 4×plan + 4×prose + CRG + 4×game) ≈ **15 + 120 + 92 + 40 + 12 = ~279 MC ≈ $0.28** of overage — i.e. you'd run **~28 full arcs/mo** before exhausting the $8 allowance. A daily research domain ≈ $4.30/mo COGS, so the allowance covers ~1–2 actively-tracked domains before the meter starts. ### 6.4 Packaging — one flat price, usage-based above the allowance | Plan | $/mo | Includes | Above the allowance | For | |---|--:|---|---|---| | **Standard (seat)** | **$20** | ~15M tokens/mo (research + creative) | pay-as-you-go at COGS × 3 | the one consumer price | | **Self-host** | $0 | — (BYO key) | no meter, ever | sovereignty / advanced | The buyer's mental model is just **"$20/mo, and if you really hammer it you pay for the extra."** No credit balance to track, no tiers to choose between, no per-domain math. The allowance and the meter live underneath: - **~80% of users never see the meter.** Living-domain variable COGS ≈ $3.1/seat vs an $8 allowance — the flat $20 is the entire experience; margin sits at **66%**. - **Heavy users become revenue, not a loss.** The heavy-creative seat ($12.5/seat variable) bills ~$13.60 of usage on top → revenue $33.60, **margin 50%** — versus **19%** if we ate it on a pure flat fee. (`usage-sweep.png`: flat-only sinks below zero; flat+usage holds ~60%.) - **The allowance is the silent guardrail, not a throttle.** We don't degrade the experience at the edge — we bill it. A user who'd rather not meter brings their own key (self-host) and uncaps for free. - **Rooms** share the box (infra flat) and each seat carries its own allowance → margins rise with seats (**78%** at 5 seats) with overage attributed per member. ### 6.5 Why this is buildable today The metering substrate already ships: - [`calculateApiCost`](../../../../../src/lib/core/kernel/api-logger.ts) computes per-call COGS from `MODEL_PRICING` (incl. reasoning tokens billed as output, and flat image pricing). - The **`GasMeter`** topbar pill ([`src/features/usage/GasMeter.tsx`](../../../../../src/features/usage/GasMeter.tsx)) already accumulates and displays spend from the api log. - The **`UsageModal`** breaks spend down by caller/model. - `apiLogs` is a persisted IndexedDB store; every call records `promptTokens`, `responseTokens`, `reasoningTokens`, `model`. **What's missing to ship flat + usage:** 1. An **allowance meter** per seat — a running sum of `calculateApiCost` for the month vs the $8 allowance (the COGS layer is done; this is a tenant-scoped accumulator on the control plane). 2. **Overage billing** — once the month's usage passes the allowance, bill the excess at COGS × markup through Stripe metered/usage-based billing (Stripe already supports this; we send usage records). 3. **Soft notice at the threshold** — tell the user when they cross into pay-as-you-go (never surprise-bill, never throttle mid-stream); offer BYO-key as the free uncap. 4. **Transparency UI** — the **`GasMeter`** pill already shows spend; reframe it as "allowance used / overage so far this month" so the rare heavy user sees exactly where they are. ---Open on GitHub
Raw Markdown source