MeridiansMeridians

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