Skip to main content

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​

FreeProEnterprise
Base price$0, no card ever$0 base, card on file, usage-billed monthlycustom contract
Included monthly100k writes · 50k reads · 100k export rows1M writes · 500k reads · 1M export rowsnegotiated
Beyond includedhard caps (429; no overage billing)metered at unit pricesdiscounted unit prices
Computecredit only, smallest classpass-through, all compute classespass-through or committed-use
Event historyat least 90 daysat least 400 daysset 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:

  1. past_due — the first invoice.payment_failed starts a 7-day grace window. Everything keeps working; fix the payment method in the portal.
  2. restricted — after the grace window, Free-plan limits are enforced on new usage (existing data is untouched and keeps flowing within Free limits).
  3. downgraded — if the subscription is deleted or stays unpaid 30 days past grace, the org is assigned the Free plan.
  4. Any successful payment returns the org to active immediately.

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​

EndpointPurpose
GET /v1/billing/subscriptionplan, dunning state, period bounds, upcoming invoice
POST /v1/billing/checkout-sessionhosted Stripe Checkout onto Pro (org admins)
POST /v1/billing/portal-sessionhosted Stripe customer portal (org admins)

See the API reference for schemas, and Usage & quotas for the metering surface invoices are derived from.