Documentation
Plans and credits
What a token is, what a message really costs, allowances, top-ups and resets.
The unit#
Usage is shown in tokens. Internally a turn is billed in units, and the conversion is fixed and single-sourced: one billable unit is eight display tokens. There is no second table anywhere in the product.
Allowances#
| Plan | Monthly | Annual | Tokens / month | Models | Images / month |
|---|---|---|---|---|---|
| Free | $0 | $0 | 120 | One free engine | 0 |
| Student | $8 | $80 | 640 | Haiku, Sonnet 5 | 8 |
| Pro | $18 | $180 | 1,440 | Haiku, Sonnet 5, Opus 5, GPT-5.4, Grok 4.6 | 12 |
None of those figures are typed in by hand. Each is read from the same PLANS table the meter and the server gates enforce, multiplied by the conversion above, so this page cannot drift away from what you actually get.
The Free row says one free engine rather than naming Haiku, because during the current promotion the free tier is not running Haiku — it is routed to OpenAI's GPT-4o mini, and the model row in the app is relabelled to match. Chat explains that in full. When the promotion ends, Free is Claude Haiku 4.5 again.
What a message actually costs#
A turn is priced from the provider's real token usage for that turn (the smallest charge is 0.8 of a token, because the allowance counts in tenths), and one reply is never charged more than 64 tokens, even when chud has to send it again after a dropped connection: whatever a very long answer uses past that, chud covers. Continue writes a new reply, and a council verdict asks several models, each charged as its own reply. Deep research runs and images keep their own prices. The same model can charge a couple of tokens for a one-line answer and dozens for a long one, so there is no honest fixed per-message price and the product does not quote one.
- The model picker shows a forward-looking estimate, priced from the same rate table the server bills from, and shows it as a range because that is what it is.
- The exact charge for a turn is stored on that message, and the number the app shows you is the number that was deducted — not a rounded version of it.
- Flat per-model weights still exist in the code (0.4 for Haiku, 1 for Sonnet, 4 for Opus and GPT-5.4, 2 for Grok 4.6) but only as the fail-safe used when real usage is unavailable. They are set at the top of each model's real range rather than the middle, so a missing usage figure fails against us being under-charged, not against you being over-charged.
- When chud looks a dead-end reply up on the web afterwards, the search and the first reply are charged as one reply, under the same cap. The follow-up suggestions and memory notes written after a reply are small separate charges.
Resets and rounding#
The allowance resets on the first of the calendar month. Rounding is deliberately asymmetric: consumption rounds up and the remaining balance rounds down, so the two may not add exactly to the total. Being off by one token in your favour is the correct failure — you are never told you have more left than you do.
Top-ups#
- Price
- $5
- Adds
- 60 units, which is 480 display tokens
- Limit
- 5 per calendar month, enforced by the server — a $25 cap
- Spent
- On top of the monthly allowance, after it runs out
There is one top-up product, on purpose
A second, larger tier used to be listed. It reused the small tier's price identifier, which meant it charged $5 and granted the $5 credits while advertising twice that. It was removed rather than repriced, and no tier will be listed again without its own real price behind it.
Trials, downgrades and running out#
- There is a no-card Pro trial. While it runs you get full Pro; when it ends you drop to the Free allowance rather than being charged.
- A cancelled or expired subscription resolves to Free.
- When the allowance is gone, sending stops until the monthly reset or a top-up. There is no silent overage and no surprise invoice.
Breakeven mode#
Breakeven is the alternative to a plan, at /m/breakeven: no monthly price and no allowance. Every turn's real provider cost accrues in dollars, and after the month closes you are invoiced that cost plus only the card fee it takes to collect it. While it is active you get Pro-level model and feature access.
- Your cap
- A spend ceiling you set, from $5 to $500, defaulting to $25. At the cap, usage stops for the rest of the month rather than billing on. Usage-based pricing without a ceiling is a trap; this is the answer to it.
- What you are charged
- Raw cost, plus 2.9% and $0.30 — the card processor's fee, not a margin.
- Minimum bill
- $1.00. A month under that is carried forward to the next one rather than discarded or rounded up.
- Live figure
- The screen shows cost so far, the itemised arithmetic, and a straight-line projection of where the month lands. The projection is a rate, not a promise, and is labelled as such.
Continuous paid months earn loyalty tiers, and on Breakeven they reduce what is added on top rather than discounting cost:
| After | Tier | What changes |
|---|---|---|
| Month one | Month one | Cost plus the card fee it takes to collect it. |
| 3 months | Regular | We cover the $0.30 per-invoice fee from here on. |
| 6 months | Loyal | We cover the whole card fee — your invoice is raw cost, nothing added. |
| 12 months | Veteran | Raw cost, and 5% of it written off every month. |
| 24 months | Long hauler | Raw cost, 10% written off, and no minimum bill. |
Breakeven is an honest bill, not a cheap one
A month of heavy use on the largest models can cost more than a Pro subscription, because you are paying what the models actually cost. It is the right mode if your usage is light or spiky, and the wrong one if it is heavy and steady. Your own cap is the protection, so set it at a number you would be willing to see on an invoice.
Your payment record#
/m/billing is the full record: every charge with its receipt, what plan you were on at the time, and a month-by-month rollup. Plan changes and cancellations are kept as a timeline, so what you were paying and when is auditable rather than remembered.
Written from the code that implements it. Verify against src/lib/m/plans.js, src/lib/m/tokens.js, src/lib/m/gating.js.