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).
| Plan | Price | Included runs / month | Bots | Seats | Rate limits (req/min) |
|---|---|---|---|---|---|
| Free | $0 | 500 | 1 | 1 | 5 sync, 10 async |
| Starter | $29/mo | 2,000 | 3 | 3 | 10 sync, 50 async |
| Pro | $79/mo | 10,000 | 10 | 10 | 50 sync, 100 async |
| Enterprise | $199/mo | 50,000 | Unlimited | Unlimited | Custom |
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:
| Page | Path | What it does |
|---|---|---|
| Usage | /workspace/<id>/usage | Per-execution usage table with date-range filters and CSV export |
| Billing & Invoices | /workspace/<id>/billing | Plan summary, payment method (managed in Stripe), live Stripe invoices, cancel |
| Spending | /workspace/<id>/spending | Current 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
- 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. - 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.
- 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. - 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.) - Period rollover. When Stripe sends an
invoice.paidwebhook,currentPeriodCostrolls over tolastPeriodCost,billedOverageThisPeriodresets to 0, and the next period starts.
Notification emails
MyBotBox sends three usage-related emails (suppressible via
settings.billingUsageNotificationsEnabled):
| Event | When |
|---|---|
| 80% threshold | Cumulative cost crosses 80% of your included pool |
| 100% threshold | Cumulative cost crosses 100%. Copy branches on whether on-demand is enabled. |
| Payment failed | Stripe 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
- Usage page â explore your per-execution usage and export CSV.
- Billing & Invoices page â review and download invoices, manage payment.
- Spending page â set a Monthly Limit and forecast spend.
- API reference â programmatic access to the billing endpoints.