Skip to content

Plans & billing

Billing is per-organization. Every org starts on Free; owners and admins upgrade from the dashboard’s Billing page, which hands off to Stripe for payment.

Plans

FreeProPlatformEnterprise
Price$0$29/user/mofrom $499/site/mocontact us
Cloud capability invocations / month1,00050,000500,000unlimited (contract)
Burst limit (requests/second)21050200
Audit-log retention90 days90 days365 daysunlimited

Invocations are billable LLM-bound calls (describe, simplify, summarize, voice-action, …) per calendar month. Per-minute API rate limits are separate — see Rate limits. The Billing page shows this month’s usage against your quota, plus estimated LLM cost per capability.

Enterprise isn’t metered — limits are enforced by contract, and checkout doesn’t apply. Email enterprise@wholisphere.ai for custom pricing, dedicated support, or a BAA / DPA.

Upgrade

Dashboard: open Billing → Upgrade, pick Pro or Platform, and you’re redirected to Stripe Checkout. When payment completes, Stripe notifies our webhook and the org’s plan flips over — usually within seconds.

API (owner or admin, session-authenticated):

Terminal window
curl -X POST https://api.wholisphere.ai/v1/billing/checkout \
-H "cookie: whs_session=$SESSION" \
-H 'content-type: application/json' \
-d '{"orgId":"'$ORG_ID'","plan":"pro"}'
# → { "url": "https://checkout.stripe.com/…", "sessionId": "cs_…" }

plan accepts pro or platform. Redirect the browser to the returned url.

14-day Pro trial

Free orgs can start a 14-day Pro trial from the Billing page (POST /v1/billing/start-trial). You get the full Pro quota for 14 days; if you don’t add a payment method, the org reverts to Free automatically at the end of the trial. Orgs already on a paid plan get 409 not_eligible.

Manage your subscription

Billing → Manage subscription opens the Stripe Customer Portal, where you can update the payment method, download invoices, switch plans, or cancel.

Terminal window
curl -X POST https://api.wholisphere.ai/v1/billing/portal \
-H "cookie: whs_session=$SESSION" \
-H 'content-type: application/json' \
-d '{"orgId":"'$ORG_ID'"}'
# → { "url": "https://billing.stripe.com/…" }

If the org has never subscribed there’s no Stripe customer yet, so this returns 404 no_subscription — upgrade first.

What happens on downgrade or cancellation

When you cancel in the portal, the subscription runs until the end of the paid period (cancel_at_period_end), then Stripe fires customer.subscription.deleted and the org drops to Free. At that point:

  • Quotas drop immediately to Free-tier limits (1,000 invocations/month, 2 req/s burst). Calls beyond the quota are rejected until the next calendar month.
  • Audit-log retention shrinks to 90 days. A nightly retention job prunes audit events older than your plan’s window, so history you were keeping under a longer Platform window is deleted and can’t be recovered. Export anything you need before downgrading — see Audit log.
  • Scan history, findings, products, and VPATs are kept — retention pruning applies to audit events, not scan data.

Upgrading again restores the higher quotas going forward; it does not resurrect pruned audit events.

Notes

  • Billing endpoints require an owner or admin session; other members get 403 not_authorized.
  • On self-hosted or dev environments without Stripe configured, billing endpoints return 503 billing_disabled.
  • Subscription lifecycle is driven by the signed Stripe webhook (POST /v1/webhooks/stripe) — there’s nothing to poll.