MyBotBoxMyBotBox
Billing & Usage

Billing & Usage

Plans, the workspace billing portal, and how usage is metered and billed.

MyBotBox bills on a base subscription + opt-in on-demand spending model. Each plan includes a fixed monthly allotment of workflow runs; once that is exhausted, additional runs continue at the same rates only if on-demand spending is enabled and below your cap. Billing happens in arrears via Stripe.

Plans

Two visible numbers per plan: the subscription price (what Stripe charges each month) and the included workflow runs (how many executions your plan covers before on-demand kicks in).

PlanPriceIncluded runs / monthBotsSeatsRate limits (req/min)
Free$0500115 sync, 10 async
Starter$29/mo2,0003310 sync, 50 async
Pro$79/mo10,000101050 sync, 100 async
Enterprise$199/mo50,000UnlimitedUnlimitedCustom

Annual billing is available on every paid plan for a 20% discount (switch from the Billing & Invoices page).

Run quotas are surfaced from MYBOTBOX_PRICING.<plan>.messages in apps/sat/lib/billing/mybotbox-plans.ts. Internally, runs map to a fixed dollar amount per included run (INCLUDED_RUN_COST_USD = $0.01); the dollar caps in apps/sat/lib/billing/constants.ts are env-overridable per environment with FREE_TIER_COST_LIMIT, STARTER_TIER_COST_LIMIT, PRO_TIER_COST_LIMIT, and ENTERPRISE_TIER_COST_LIMIT.

Stripe price IDs are configured via STRIPE_{FREE,STARTER,PRO,ENTERPRISE}_PRICE_ID{,_MONTHLY,_ANNUAL}.

The legacy team plan slug is kept as an alias of Pro for existing subscribers — new sign-ups go straight to Pro.

The three portal pages

Every workspace has three first-class billing pages, reachable from icons in the floating sidebar:

PagePathWhat it does
Usage/workspace/<id>/usagePer-execution usage table with date-range filters and CSV export
Billing & Invoices/workspace/<id>/billingPlan summary, payment method (managed in Stripe), live Stripe invoices, cancel
Spending/workspace/<id>/spendingCurrent plan + upgrade card, included-usage progress, on-demand spend, Monthly Limit control

Each has its own page in this section — see the sidebar.

How billing works

  1. Included runs. Every plan ships a fixed number of included workflow runs (see the Plans table above). Each completed run records its cost into userStats.currentPeriodCost.
  2. On-demand spending. Once your included pool is exhausted, additional runs only proceed if on-demand spending is enabled. The default is on with a $50 cap per period. You can toggle it off or raise/lower the cap from the Spending page.
  3. Execution gate. Before every run (both API and in-app executions) the server calls checkUsageGate(userId) and returns 402 with a typed code when blocked — see the API reference.
  4. Threshold billing. Whenever unbilled overage reaches a threshold, MyBotBox immediately bills it via Stripe. This avoids one large month-end bill on high-usage accounts and is bounded by your on-demand cap. (See apps/sat/lib/billing/threshold-billing.ts.)
  5. Period rollover. When Stripe sends an invoice.paid webhook, currentPeriodCost rolls over to lastPeriodCost, billedOverageThisPeriod resets to 0, and the next period starts.

Notification emails

MyBotBox sends three usage-related emails (suppressible via settings.billingUsageNotificationsEnabled):

EventWhen
80% thresholdCumulative cost crosses 80% of your included pool
100% thresholdCumulative cost crosses 100%. Copy branches on whether on-demand is enabled.
Payment failedStripe sends invoice.payment_failed. Includes the amount due + a Stripe portal link.

Team and Enterprise plans fan each email out to every blocked member.

Payment & cancellation

We use the Stripe Customer Portal for everything related to payment methods, billing addresses, and cancellation. From the Billing page, click Manage in Stripe (or Cancel) — both open the portal scoped to your account.

We never ask for card details inside MyBotBox. All card capture and edits happen on Stripe's hosted pages, and we only store a stripeCustomerId reference.

Email verification

All billing routes require a verified email. If you see a 403 EMAIL_NOT_VERIFIED response from any /api/billing/* endpoint, finish verification from the Account section first.

Up next