TransIT AI

Billing scenarios

This page is the deep reference for what each plan change does to your invoice. Every paragraph maps to an exact Stripe behavior; every table is the actual line-item shape you’ll see on the next bill.

The three rules

Every plan change in Transit AI obeys these:

  1. Upgrades take effect immediately and prorate on the next invoice. You get the bigger entitlement right away; the cost of the unused portion of your old state plus the cost of the new state from the change date show up as two proration line items the next time Stripe bills you.
  2. Downgrades and seat removals defer to the start of your next billing period. You keep your current entitlement and seat count through the period you’ve already paid for. The new (smaller) state kicks in at renewal — no mid-period refund.
  3. Cancellations are also period-end. Hitting cancel doesn’t kill the subscription immediately; it sets a flag that stops the next renewal. You keep working through the end of the period you’ve already paid for.

Why downgrades and removals defer: without it, a customer could subscribe high on day 1, burn through the bigger allowance, downgrade on day 28 for a prorated credit, and effectively get most of the higher tier for less than its price. Deferring closes the loop while still letting you change plans freely.

Worked example — adding seats mid-period

You’re an admin with 1 Max seat ($199/month) on a 30-day billing cycle. On day 15, you go to /admin/billing/ and bump Max from 1 to 3 seats.

What you see immediately: the new 2 seats are usable right away — invite teammates onto them, or reassign existing members. No charge yet.

What you’re billed at the start of the next period: one invoice totaling $796, broken into these line items:

LineAmountWhy
3 × Max seat (next full month)+$597.00Regular subscription bill for the upcoming period at the new seat count
Proration credit — unused 1 seat × 15 days−$99.50Stripe refunds the unused portion of what you already paid for 1 seat
Proration charge — 3 seats × 15 days+$298.50Stripe charges the bumped seat count for the half-period you already started using it
Total$796.00(plus tax, if you’re billed in a registered state)

The two proration lines net to $199 — which is the same as “2 extra seats × half a month” if you were doing the math on a napkin. Stripe just shows it as a credit + a re-charge of the second half rather than as a single “2 × half-month” line.

Key takeaways:

  • No mid-period charge. Day 15’s seat bump doesn’t bill anything that day. Everything stacks onto the next renewal invoice. One combined charge at the period boundary.
  • The entitlement is immediate. The 2 new seats work from the moment you click Apply changes, even though the bill comes later.
  • Same math at every quantity and tier. Replace Max with Pro / Operator and the same formula applies: (new − old) × tier_price × (days_remaining / days_in_period) is the net proration, on top of the next full-month charge.

Personal plan scenarios

Upgrade (Operator → Pro, or Pro → Max)

Trigger: /account/ → Switch plan dropdown → pick the higher tier → Switch plan.

Effect:

  • New tier takes effect immediately. Bigger budget, more models, BYOK if you weren’t already eligible.
  • Stripe issues a proration on the next invoice: credit for the unused portion of the old tier, charge for the new tier from the upgrade date.
  • Same math as the seat example above, scaled to a single seat. E.g. upgrading Operator → Pro halfway through a 30-day month: ($79 − $29) × (15/30) = $25 net proration, plus $79 next full month = $104 on next invoice.

Important: your usage counter does NOT reset on an upgrade. The percentage-of-budget you see in the chat panel is recalculated against the new (larger) budget cap, so a person who was at 90% of Operator suddenly shows ~33% of Pro — same spend, bigger denominator.

Downgrade (Max → Pro, or Pro → Operator)

Trigger: Same dropdown, lower tier.

Effect:

  • The current tier stays active through the rest of the billing period.
  • The new (lower) tier kicks in at renewal — data.effective_at in the confirmation message tells you the exact date.
  • No proration, no mid-period refund.

To cancel a scheduled downgrade: revisit /account/ and pick your current plan again. The schedule is released and your tier stays.

Cancel

Trigger: /account/ → Manage subscription → Cancel in the billing portal.

Effect:

  • The subscription is flagged to end at the period boundary.
  • The AI assistant keeps working through the end of the current billing period.
  • At period end, the subscription terminates. No further charges. Your tier drops to none; the AI stops responding until you re-subscribe.
  • SSH sessions are not affected at any point — that’s the offline-capable part of the app.

Re-activate (before period end)

Trigger: /account/ → Manage subscription → Renew / Resume in the billing portal.

Effect:

  • The cancellation flag is cleared. The subscription renews normally at period end. No new invoice, no proration — just a flag flip.

Re-subscribe (after period end)

If you fully cancelled and the period has elapsed:

Trigger: /pricing/ → pick a tier → checkout.

Effect:

  • Treated as a fresh subscription. Your old Transit AI account is reused; usage history is preserved; tier resumes.
  • BYOK keys in your desktop keychain are untouched throughout — they resurface as soon as your tier flips back to a paid one.

Team plan scenarios (admin actions)

Add seats

Trigger: /admin/billing/ → bump a tier’s seat count → Apply changes.

Effect: same as the worked example at the top of this page. Immediate entitlement, prorated charge on the next invoice. The new seats sit in your unassigned pool until you invite a teammate onto them or reassign an existing member.

Remove seats

Trigger: /admin/billing/ → reduce a tier’s seat count → Apply changes.

Effect:

  • Deferred — the seat count visible in the UI stays at the current value until the start of your next billing period, then drops.
  • No proration, no mid-period refund.
  • Confirmation message names the exact effective date.

You can’t reduce a tier’s seat count below assigned members + open invites at that tier. The 409 error message tells you to re-tier or remove the assigned members first. See Add or remove team seats.

To cancel a scheduled seat removal: bump the count back up. Schedule releases; current count stays.

Change a member’s tier

Trigger: /admin/members/ → pick a new tier in the member’s row → Save.

Effect on entitlement:

  • The member’s effective tier changes immediately. Their desktop app picks up the new tier within one AI request, or within ~30 minutes via the idle fallback poll.

Effect on billing: depends on whether the tier change crosses an existing seat boundary.

  • If you have an available seat at the target tier (e.g. you bought +1 Pro seat earlier), no Stripe-side change happens. The tier swap is free at the subscription level — you’re just moving someone between seats you already pay for.
  • If you didn’t pre-buy the seat, you’ll first hit the “Add a seat on Billing first” error, then the workflow becomes: buy seat → reassign member → optionally remove the old tier’s now-unused seat. The buy step prorates as an upgrade; the remove step defers. See Change a member’s tier for the full sequence.

Tier-mix change (swap quantities across tiers)

Trigger: /admin/billing/ → adjust multiple tier counts in the same form submit. E.g. go from Operator: 2, Pro: 1 to Operator: 1, Pro: 2.

Effect: total monthly value before and after is compared:

  • Higher total value (net upgrade) → applies immediately, prorate the difference on the next invoice. E.g. (2×29 + 1×79) → (1×29 + 2×79) = $108 → $187 is an upgrade by $79/mo.
  • Lower total value (net downgrade) → deferred to the start of the next billing period. Same rationale as a pure seat removal.
  • Same total value → no change; the form returns “No changes to apply” because no individual tier’s count changed (seat counts are tracked independently per tier — quantities don’t move between tiers).

Cancel the team subscription

Trigger: /admin/billing/ → Manage in billing portal → Cancel.

Effect:

  • The team’s subscription is flagged to end at the period boundary. All members keep their assigned tier through the end of the period.
  • At period end, the subscription terminates and every member’s effective tier becomes none, regardless of their prior tier assignment.
  • Members see a “Subscription required” panel in their desktop app shortly after period end.

Important: member tier assignments are preserved through cancellation. If you re-subscribe later, the same roster + tier mix snaps back without re-inviting anyone.

Re-activate a cancelled team subscription

Trigger: /pricing/ → Buy for a team → buy a fresh team plan with the same email as the prior admin.

Effect:

  • The system reconnects to your existing team workspace by email match and resumes entitlements.
  • Members rejoin with their prior tiers. No new invites needed.

How proration works

When you add seats or upgrade a tier, the change applies immediately and your card is not billed at that moment. Instead, proration line items appear on your next regularly scheduled invoice.

There are always two proration lines for a single change:

  1. Proration credit — value: old_quantity × old_unit_price × (time_remaining / period_length). Refunds the unused portion of what you already paid for the old state.
  2. Proration charge — value: new_quantity × new_unit_price × (time_remaining / period_length). Charges the new state from the moment of change through end of period.

The two combine to: the cost of the increase, scaled to the unused fraction of the period. Standard textbook proration.

How deferred downgrades work

For downgrades and seat removals, the change is scheduled rather than applied immediately:

  1. Through the current period: your existing tier and seat counts stay in force at their existing prices. No refund, no recalculation.
  2. From the next period onward: the new (smaller) state takes effect at the regular price for one billing cycle, then continues normally.

Your card is not charged anything mid-period. The next invoice at period end bills the new (smaller) line items at full price — no proration math, because only the new state applies from that point forward.

To reverse a deferred downgrade before it takes effect, revisit the form and pick your current tier or seat count. The scheduled change is released and your subscription continues unchanged. No invoice impact.

What appears on your invoice

A normal renewal invoice for a Pro account on a 30-day cycle:

LineAmount
Pro plan$79.00
Sales tax$X
Total$79.00 + tax

An invoice on a period following a mid-period upgrade (Operator → Pro on day 15) looks like:

LineAmount
Pro plan (next full month)+$79.00
Proration credit — Operator × 15 days−$14.50
Proration charge — Pro × 15 days+$39.50
Sales tax$X
Total$104.00 + tax

Plus a meter line if overage is enabled and was consumed:

LineAmount
Pro plan$79.00
Overage cents (125 units @ $0.01)+$1.25
Sales tax$X
Total$80.25 + tax

See Overage billing below for the exact per-call cents-rounding mechanics that produce these meter unit counts.

Tax

Sales tax is computed per the customer’s billing zip on every invoice. The customer-facing total includes tax in registered jurisdictions.

Transit AI Software Inc. is the merchant of record. The authoritative list of jurisdictions with active tax collection is reflected in the tax line items of each invoice; jurisdictions without registration show $0 tax. The list of registered jurisdictions evolves over time.

For non-US customers, VAT / GST is computed per the buyer’s country.

Refunds

Refund requests are handled case-by-case. Email support@transitai.app within 30 days of the charge with the invoice ID and a brief reason. We’ll work with you.

For most cases we issue full refunds; for partial-period refunds the prorated amount is calculated based on days remaining in the period and the tier you were on.

Edge cases

Failed payment

If a renewal invoice fails (declined card, insufficient funds, fraud hold):

  • The payment is retried 3 times over the following ~8 days.
  • The subscription is marked as “payment retry”; the desktop app shows a “Payment failed” banner with a link to the billing portal to update the card.
  • AI access is NOT cut off during the retry window — you have the full retry period to fix the card.
  • If all 3 retries fail, AI access stops. Updating the card from the portal triggers a fresh payment attempt; on success, access resumes within ~60s.

Re-activate before period end

If you cancelled but the period hasn’t ended yet, the billing portal shows a “Renew” / “Resume subscription” button instead of “Cancel”. Clicking it clears the cancellation flag — the subscription renews normally at period end. No invoice change.

Mid-deferred-downgrade upgrade

Say you scheduled a downgrade Max → Pro for the start of next period, and then mid-period you decide you want Pro → Max instead (a re-upgrade). The deferred downgrade is released, the new upgrade applies immediately with proration, and the downgrade schedule disappears.

Subscription transferred between admins

Not currently supported. The owner of a team plan is fixed to the user who bought the subscription. If you need to move ownership, contact support — we can adjust the role assignment for you. (Roadmap: in-app ownership transfer.)

Adding seats to a fully cancelled subscription

You can’t — the subscription is gone at period end. Buying a new team plan from /pricing/ is the path; the system will reconnect to your existing team workspace if the email matches.

Overage billing

Overage is a per-user safety valve from the tier’s monthly allowance, on by default on every paid plan. With it on (the default), AI requests past the allowance keep working and the cost lands on the next invoice. You can turn it off anytime — personal: your account page or Settings → Billing; teams: your admin, per member.

When overage triggers

Three conditions must all be true:

  1. The member’s overage flag is on — it is on by default, and off only if turned off (admins manage it per member on teams; a personal subscriber toggles it on their account page or in Settings → Billing).
  2. The caller’s tier is Pro or Max. Operator seats never trigger overage even when the flag is on — they’re capped at the tier allowance, period.
  3. The caller’s spend in the current billing period exceeds the tier allowance.

If any condition is false, the AI returns “budget exhausted” instead of generating an overage event.

The markup math, exactly

For each AI call past the allowance:

call_cost          = (provider's per-token cost) × tokens used
marked_up_cost     = call_cost × 1.25
cents_billed       = ceil( marked_up_cost in cents )

Each call’s overage cost is rounded up to the nearest whole cent before it’s posted to your invoice’s overage line.

Worked example — one call

Say a Pro user makes one AI call worth $0.073 of provider tokens past their budget cap.

call_cost          = $0.073
marked_up_cost     = $0.073 × 1.25 = $0.09125
cents_billed       = ceil(9.125 cents) = 10 cents

That single call adds $0.10 to the next invoice’s overage line — not the exact marked-up $0.09125, because of the ceiling rounding.

Rounding policy (the per-cent ceiling)

We round up to the next cent instead of normal-rounding because:

  1. Predictable per-call cost. A call worth $0.005 of provider tokens ($0.00625 marked-up = 0.625 cents) bills at 1 cent every time, not “1 cent half the time, 0 cents the other half.” Customers and accounting see consistent per-call line items.
  2. No silent under-billing. The behavior is the same on every call regardless of size.

Worst-case effect: less than $0.01 per overage-eligible call. For a typical session with ~30 overage calls a month, that’s under $0.30 per period. Customers who notice a discrepancy can email support and we’ll reconcile.

Worked example — over a month

Say a Pro user is past their allowance and makes 100 AI calls in the rest of the month, each generating about $0.073 of provider overage cost (so the example call from above, repeated):

Per call:      10 cents billed (per the ceiling above)
100 calls:     1,000 cents = $10.00

Their next invoice (assuming overage stays on the whole period):

LineAmount
Pro plan$79.00
Overage+$10.00
Sales tax$X
Total$89.00 + tax

The tier cap, per seat

Overage doesn’t run unbounded. There is a hard ceiling per user, per period:

  • Pro tier: $158/month overage cap per seat (2× the $79 base)
  • Max tier: $398/month overage cap per seat (2× the $199 base)

Once a user hits their cap, every subsequent AI call returns “overage cap reached” until the period rolls over. No silent billing past the cap.

Per-seat, not per-org. A team with 2 Pro + 1 Max seats has a maximum monthly overage exposure of (2 × $158) + (1 × $398) = $714/month above the base subscription, and only if every member personally hits their personal cap.

Mid-period vs renewal invoice

Overage never triggers an immediate charge. All overage usage accumulates and bills on the next regular renewal invoice. One combined charge at the period boundary.

If you turn overage off mid-period:

  • Overage usage already accumulated stays on the subscription — it will bill on the next invoice.
  • New calls past the allowance return “budget exhausted” again.

If you turn overage on for the first time:

  • Calls past the allowance start accruing from that point forward. Prior calls that were blocked don’t backfill.

BYOK + overage interaction

BYOK calls never trigger overage — they’re billed entirely by the upstream provider on your own account. If a user has BYOK enabled in the desktop app and toggles “Use BYOK”, their tokens go to their own provider account and no overage line appears on your Transit AI invoice. See Bring your own key.

Disputes

If you see an overage line that doesn’t match your team’s usage — a freakish spike from a runaway agent loop or compromised credential, say — email support@transitai.app. Every billed call has a request id; we can pull the per-call cost breakdown from our usage records and reconcile or refund as appropriate.

Glossary

Billing period — the month or year between renewals. Set at signup; e.g. signing up on the 15th means your periods run 15th → 15th.

Proration — splitting a charge across the portion of a billing period something was active. Always two line items: a credit for what was unused at the old rate, and a charge for what’s now consumed at the new rate.

Subscription line — one product line on a subscription. A team plan with 1 Operator + 2 Pro + 1 Max seat has 3 tier lines (one per tier with quantity), plus an overage line.

Overage line — the usage-based line on a subscription that charges for AI calls past the tier allowance. Bills only what was used; can’t be paused or cancelled separately.

Deferred change — a plan change scheduled to take effect at the next period boundary instead of immediately. Used for all downgrades and seat removals. Shown in the admin UI as a “Scheduled to take effect on …” banner.

Subscription status — common values: active (paying normally), payment retry (a payment failed and is being retried), unpaid (retries exhausted, AI access paused), canceled (subscription terminated at the end of the most recent period).

Cancellation cascade — when a team subscription is canceled, every member’s effective tier becomes none at the period boundary. Seat assignments are preserved so re-subscribing restores the team without re-inviting.