Billing
Tessera bills the organization (the billing boundary): compute runs at infrastructure cost, serving usage is metered per unit, and plans gate quotas, rate limits and included allowances — never the pricing model.
Plans
| Free | Pro | Enterprise | |
|---|---|---|---|
| Base price | $0, no card ever | $0 base, card on file, usage-billed monthly | custom contract |
| Included monthly | 100k writes · 50k reads · 100k export rows | 1M writes · 500k reads · 1M export rows | negotiated |
| Beyond included | hard caps (429; no overage billing) | metered at unit prices | discounted unit prices |
| Compute | credit only, smallest class | pass-through, all compute classes | pass-through or committed-use |
| Event history | at least 90 days | at least 400 days | set by contract (at least 730 days on the listed plan) |
Event history is the minimum each plan keeps. Events older than that are not deleted automatically today; deleting an entity or a project removes its events (Data deletion).
Upgrade to Pro from the console (or POST /billing/checkout-session) — a
hosted Stripe Checkout collects the payment method; the subscription's
metered items are created automatically. Manage payment methods, invoices
and billing details through the Stripe customer portal
(POST /billing/portal-session). Enterprise contracts are operator-managed
— talk to us.
What is billed
- Writes — canonical events ingested (
events_ingested), per 1k. - Reads — serving read API requests (
state_reads), per 1k. - Export rows — batch/BigQuery export rows (
export_rows), per 1k. - Compute pass-through — dataset builds and training runs at the infrastructure list cost of the machines they ran on, per second, by compute class (CPU classes bill vCPU-seconds; GPU classes bill GPU-seconds). No markup.
Included monthly allowances are built into the Stripe prices as graduated tiers — the first N units of each month cost $0.
Transparent invoices
Every upcoming-invoice line is reproducible from your own usage data:
GET /billing/subscription returns, per line, the raw period-to-date
quantity (quantity_raw), the billed quantity
(round_half_up(quantity_raw / divisor) — e.g. "per 1k events"), the unit
price in minor units, and the line amount. quantity_raw is computed from
the same daily usage rollups GET /usage serves —
never from Stripe's copy — so you can verify any invoice line yourself.
Taxes come from Stripe Tax; the platform never computes tax.
Payment failures (dunning)
A failed payment never stops your data:
past_due— the firstinvoice.payment_failedstarts a 7-day grace window. Everything keeps working; fix the payment method in the portal.restricted— after the grace window, Free-plan limits are enforced on new usage (existing data is untouched and keeps flowing within Free limits).downgraded— if the subscription is deleted or stays unpaid 30 days past grace, the org is assigned the Free plan.- Any successful payment returns the org to
activeimmediately.
Every transition emits a billing.state_changed
webhook (payment failures additionally emit
billing.payment_failed), and the current state is always visible as
billing_state on GET /billing/subscription.
API
| Endpoint | Purpose |
|---|---|
GET /v1/billing/subscription | plan, dunning state, period bounds, upcoming invoice |
POST /v1/billing/checkout-session | hosted Stripe Checkout onto Pro (org admins) |
POST /v1/billing/portal-session | hosted Stripe customer portal (org admins) |
See the API reference for schemas, and Usage & quotas for the metering surface invoices are derived from.