Account
Plans & billing
OrbitNest plans and limits, monthly Stripe billing and the 14-day trial, how quotas are enforced, and the Usage page.
OrbitNest has a Free plan and two paid plans, Starter and Pro. Both paid plans are billed monthly through Stripe and start with a 14-day free trial. You manage your plan under Settings → Billing and track consumption under Settings → Usage.
Plans
| Free | Starter | Pro | |
|---|---|---|---|
| Price | $0 | $6.99/month | $14.99/month |
| Projects | 1 | 3 | Unlimited |
| Database size | 0.5 GB | 1 GB | 8 GB |
| Storage | 1 GB | 5 GB | 100 GB |
| Edge function invocations per month | 50,000 | 100,000 | 1,000,000 |
| Edge functions per project | 20 | 100 | Unlimited |
| Storage, Realtime and Background jobs | Yes | Yes | Yes |
| Basic analytics | Yes | Yes | Yes |
| Advanced analytics | No | Yes | Yes |
| Support | Community | Priority |
Every plan includes the database, SQL editor, authentication, storage, realtime, edge functions, background jobs, API keys, webhooks, email and logs. Billing is monthly only, and sizes use binary units (1 GB = 1024³ bytes).
Features by plan
- Storage, Realtime and Background jobs are available on every plan, in Studio, the CLI, the MCP server and the API. Background jobs are capped at 15 per project. Storage uploads are capped at 50 MB per file, plus any size limit you set on a bucket.
- Basic analytics is on every plan: the overview, event time series, top events and top screens behind the SDK Events tab, plus the log-based analytics tabs. Event ingestion works on every plan, so data is collected on Free too.
- Advanced analytics needs Starter or Pro: retention, funnels, performance, crashes and web analytics. On Free these endpoints return
403with codePLAN_REQUIREDandrequired_plan: "starter". See Analytics.
Quotas and what happens when you reach them
Quotas are enforced. A request that would go over one returns 402 Payment Required:
{
"statusCode": 402,
"error": "Payment Required",
"code": "QUOTA_EXCEEDED",
"quota": "storage",
"plan": "free",
"limit": 1073741824,
"usage": 1070000000,
"message": "Storage quota exceeded on the free plan. Delete files or upgrade for more storage."
}quota is one of projects, storage, database, functions or invocations. limit and usage are bytes for storage and database, and counts for the rest.
| Quota | Checked when | Scope |
|---|---|---|
projects | You create a project | Projects in the workspace |
storage | You upload a file. The check counts the new file's size minus any file it replaces | All buckets in the workspace |
database | Inserting or updating rows, or running SQL that can grow the database (INSERT, UPDATE, CREATE, ALTER, COPY and similar) | All project databases in the workspace |
functions | You create an edge function | Functions in that project |
invocations | An edge function is invoked | Invocations in the workspace this calendar month (UTC) |
- Reads and deletes always work. When the database is over quota,
SELECT,DELETE,DROPandTRUNCATEstill run, so you can free space. - Database size and monthly invocations are measured at most every 5 minutes, so a burst of requests can go slightly over before it is blocked. If database size can't be measured, writes are allowed.
- Nothing is deleted at a limit. Existing projects, files and functions keep working.
How plans apply in a workspace
A subscription belongs to the Studio account that checked out, but the whole workspace shares one plan:
- The workspace plan is the highest plan held by any member with the admin role. A paid plan held by a developer doesn't count.
- Every quota and feature check uses the workspace plan, whoever makes the request.
- Storage, database and invocation quotas are summed across all projects in the workspace. The function cap is per project.
Only workspace admins can open Settings → Billing, start checkout, or open the billing portal. See Team & roles.
Free trial
Starting a Starter or Pro subscription begins a 14-day free trial:
- Stripe Checkout collects a payment method, but nothing is charged during the trial.
- You get the plan's limits as soon as the trial starts.
- When the trial ends, Stripe bills the first month automatically.
- If there's no valid payment method when the trial ends, the subscription is canceled and the account returns to Free.
Upgrade
- Go to Settings → Billing.
- On the Starter or Pro card, click Start 14-day free trial.
- Complete Stripe Checkout. Promotion codes are accepted.
- Stripe sends you back to Settings → Billing. Studio confirms the trial and syncs your plan right away, without waiting for Stripe's webhook.
Change plans
If you already have a subscription, starting checkout for the other plan changes your existing subscription in place. This is what Upgrade to Pro on Settings → Billing does for Starter subscribers, and what POST /api/subscription/checkout does for either direction. No second subscription is created.
- The change takes effect right away, and Stripe prorates the difference on your next invoice.
- If the subscription is
past_dueorunpaid, you are sent to the Stripe billing portal to fix the payment first. - Choosing the plan you already have changes nothing.
You can also change plans, including moving down from Pro to Starter, in the billing portal.
Manage or cancel
When you're on a paid plan, Settings → Billing shows a Manage subscription card with your renewal date:
- Manage subscription opens the Stripe Customer Portal, where you can update payment methods, download invoices, and change your plan.
- Cancel subscription opens the same portal to cancel. The cancellation takes effect at the end of the current billing period. Until then, the card shows the date the subscription ends, and your paid limits stay in place.
Stripe webhooks keep your plan in sync with renewals, cancellations, and payment results. If Studio looks out of date, click Sync status on the Billing page to pull the latest state from Stripe.
Your paid plan applies while the Stripe subscription status is active, trialing, or past_due. A failed renewal keeps access while Stripe retries the payment. Any other status, such as canceled, unpaid, or incomplete_expired, returns the account to Free.
Downgrading
A plan change doesn't delete anything. Projects, files and functions over the new limits keep working, but requests that would add more return 402 until you're under the limit. Advanced analytics returns 403 on Free.
Usage page
Settings → Usage compares your workspace against the workspace plan's quotas. These are the same limits the API enforces:
| Metric | Measured | Period |
|---|---|---|
| Projects | Projects in the workspace | Total |
| Database size | Space used by all project databases, as reported by Postgres | Total |
| Storage | All objects across your projects' buckets | Total |
| Edge function invocations | Every invocation, whatever its response status | Calendar month (UTC) |
Each metric shows how much your plan includes, how much you've used, and any overage. A per-project breakdown lists database and storage size for each project. If database size can't be measured, it shows as unavailable instead of zero. Plans are a flat monthly price, so overage isn't billed.
Subscription API
Studio uses these endpoints. They authenticate with your Studio account's access token, not a project API key.
| Method | Path | Description |
|---|---|---|
GET | /api/subscription/status | Workspace plan, your own plan, features, project count and limit, and your Stripe subscription state |
GET | /api/subscription/usage | Usage metrics against the workspace plan's quotas, with the per-project breakdown |
POST | /api/subscription/checkout | Body: plan set to starter or pro. Returns a url: a Stripe Checkout page, or, if you already have a subscription, the Billing page after an in-place plan change (or the billing portal if payment is overdue). Workspace admins only |
GET | /api/subscription/portal | Returns a Stripe Customer Portal URL (url is null if you've never subscribed). Workspace admins only |
POST | /api/subscription/sync | Pulls the latest subscription from Stripe |
curl https://api.orbitnest.io/api/subscription/status \
-H "Authorization: Bearer $STUDIO_ACCESS_TOKEN"{
"plan": "starter",
"own_plan": "starter",
"features": {
"storage": true,
"realtime": true,
"background_jobs": true,
"edge_functions": true,
"analytics": true,
"advanced_analytics": true,
"priority_support": false
},
"project_count": 2,
"project_limit": 3,
"can_create_project": true,
"stripe_customer_id": "cus_abc123",
"subscription_status": "trialing",
"cadence": "monthly",
"cancel_at_period_end": false,
"current_period_end": "2026-07-11T00:00:00.000Z"
}planis the workspace plan. Use it to decide what's available.own_planand the Stripe fields describe your own subscription. A member of a paid workspace who doesn't pay seesown_plan: "free"./api/subscription/usagealso returnsfunction_limit_per_project(nullmeans unlimited) and the samefeaturesobject.