Facturation
Your workspace's billing for Freelance OS itself. The plan it runs on, what that plan unlocks, seats billed per member, the saved card, the subscription invoices and the detailed AI and service usage. Not to be confused with selling your products or your end-users' subscriptions.
Overview
Every workspace has a subscription to Freelance OS. It carries a current plan (free, pro, agency, enterprise or a tier the platform mints), a Stripe status, a running period and flags like comped or past_due. This subscription decides two things: what you are entitled to, and how much you pay.
Entitlements resolve per plan. Every module, feature and limit has a typed key in a shared catalogue. The plan carries an entitlement matrix, and the workspace can receive individual overrides that win over the plan and can expire. A feature above your plan triggers an UpgradePrompt that names the required tier, not a silent failure.
Price combines a base subscription and seats. The workspace pays its plan, plus a per-member price beyond the included seats: the first seat goes to the owner, added setters, closers and content managers consume paid seats. On top of that, AI and service usage is metered per event, with an estimated cost and a detailed usage dashboard.
What the module does
Plan, status and seats
The settings billing page shows the workspace subscription: its plan, the Stripe subscription status, the saved card, the seat state and the invoices. Access needs the BILLING_READ permission, so the owner and admins, not only the platform super-admin.
- Current plan and base price
- Seats occupied: active members and pending invites count, revoked members do not
- Per-seat price beyond the plan's included seats
- Payment card and applied payout commission
Entitlements and feature keys
The key catalogue is typed: modules (module.studio, module.voice, module.ads…), features (feature.emails.sequences, feature.linkedin.extension, feature.agents.copilot…) and limits (limit.contacts, limit.workspace_members, limit.webinars…). The plan carries the matrix, workspace overrides win over it. Each key has a minimum plan and a label for the upgrade copy.
Quotas and hard limit
A quota compares current-period usage to the plan's included amount, for one service and metric pair. A hard-limit plan cuts the action off when the quota is spent: the call throws a QuotaExceededError and the call site returns a readable 402, not a 500. The same guard protects the Kernel paid surfaces and the mobile copilot, identically.
Metered and rebillable usage
Every call to an external service records a usage event: the service, the metric, the quantity and an estimated cost in cents. The usage page aggregates by service and period (this month, last month, 30 days), splits the rebillable cost from the bring-your-own-key (BYO) cost, and filters by core or voice family.
- Core: Claude, Apify, Fathom, WhatsApp, Resend
- Voice: Twilio, Groq, Deepgram, Vapi, Dropcontact
- A key supplied by the workspace flips the event to BYO, not rebilled
Banners, grace and comping
The banner state resolves by priority: payment failed, card missing, quota warning at 80 percent, plan not chosen after 14 days. A comped workspace sees no banner. A free workspace still without a plan past the grace period is moved back to free by a cron, with a transition log.
How to use it
- 01
Open your billing
In /settings/billing you see the workspace plan, its Stripe status, the saved card, the seats and the subscription invoices.
- 02
Add your card
Without a card, metered features are cut off and a card-missing banner shows. You save a card to unlock paid usage.
- 03
Track your usage
The /settings/billing/usage page details usage per service and period, splits rebillable from BYO cost, and filters by core or voice family.
- 04
Unlock a feature
A feature above your plan opens an UpgradePrompt that names the required tier. You go through /settings/billing/upgrade to change plan.
- 05
Add a member
Each member beyond the included seats adds a paid seat to the subscription. A pending invite already reserves its seat.