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

FreeStarterPro
Price$0$6.99/month$14.99/month
Projects13Unlimited
Database size0.5 GB1 GB8 GB
Storage1 GB5 GB100 GB
Edge function invocations per month50,000100,0001,000,000
Edge functions per project20100Unlimited
Storage, Realtime and Background jobsYesYesYes
Basic analyticsYesYesYes
Advanced analyticsNoYesYes
SupportCommunityEmailPriority

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 403 with code PLAN_REQUIRED and required_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:

JSON
{
  "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.

QuotaChecked whenScope
projectsYou create a projectProjects in the workspace
storageYou upload a file. The check counts the new file's size minus any file it replacesAll buckets in the workspace
databaseInserting or updating rows, or running SQL that can grow the database (INSERT, UPDATE, CREATE, ALTER, COPY and similar)All project databases in the workspace
functionsYou create an edge functionFunctions in that project
invocationsAn edge function is invokedInvocations in the workspace this calendar month (UTC)
  • Reads and deletes always work. When the database is over quota, SELECT, DELETE, DROP and TRUNCATE still 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

  1. Go to Settings → Billing.
  2. On the Starter or Pro card, click Start 14-day free trial.
  3. Complete Stripe Checkout. Promotion codes are accepted.
  4. 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_due or unpaid, 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:

MetricMeasuredPeriod
ProjectsProjects in the workspaceTotal
Database sizeSpace used by all project databases, as reported by PostgresTotal
StorageAll objects across your projects' bucketsTotal
Edge function invocationsEvery invocation, whatever its response statusCalendar 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.

MethodPathDescription
GET/api/subscription/statusWorkspace plan, your own plan, features, project count and limit, and your Stripe subscription state
GET/api/subscription/usageUsage metrics against the workspace plan's quotas, with the per-project breakdown
POST/api/subscription/checkoutBody: 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/portalReturns a Stripe Customer Portal URL (url is null if you've never subscribed). Workspace admins only
POST/api/subscription/syncPulls the latest subscription from Stripe
Terminal
curl https://api.orbitnest.io/api/subscription/status \
  -H "Authorization: Bearer $STUDIO_ACCESS_TOKEN"
JSON
{
  "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"
}
  • plan is the workspace plan. Use it to decide what's available.
  • own_plan and the Stripe fields describe your own subscription. A member of a paid workspace who doesn't pay sees own_plan: "free".
  • /api/subscription/usage also returns function_limit_per_project (null means unlimited) and the same features object.