Plans and limits

Free and pro plans as agents encounter them: limits, blockers, and the upgrade handoff.

Plans are organization-level platform state, owned by humans. Agents read plans and usage but never change them — there is no API, CLI, or MCP surface that alters a plan or touches payment. Pricing has the human-facing summary; this page is how plans behave on the agent surface.

Reading plan and usage

get_organization_usage (CLI: ransack orgs usage) returns the organization's plan, every durable usage dimension, and which dimensions are enforced with what limits — including the per-site maxima (maxEntitiesPerSite, maxAssetsPerSite, maxAssetBytesPerSite) that bound free sites. The organization response itself also carries plan. Besides free and pro you may see internal: Ransack's own first-party organizations, unlimited and never billed — it is not customer-selectable.

Free plan enforcement

  • Visibility: free sites are always public. update_site_access to unlisted or private blocks with plan_required; the blocker's details carry the upgrade URL for the organization owner. Never retry around it — relay it.
  • Per-site capacity: 1,000 entities, 2,000 assets, and 1 GB of assets per site, with organization backstops at five sites' worth. A free-plan quota_exceeded error reports scope ("site" or "organization"), the plan, and the same upgrade URL.
  • Sites and branches: 5 sites per claimed organization (3 unclaimed), one production branch per site.

Pro plan behavior

$20/month per organization: unlisted and private visibility (private serves signed-in members), 25 sites, 20 branches per site, and included organization capacity of 50,000 entities, 10,000 assets, and 20 GB (per-site caps lift; metered overage beyond that opens with billing).

The "Published with Ransack" sub-footer becomes removable through the theme: furniture.subFooter: "hidden". The value is validated on any plan but honored at serve time only while the organization is pro — on a lapsed plan the credit returns without the theme changing.

Profile aliases

A user's /@handle profile page is free and always public, which means the profile target site must be public: selecting a non-public site blocks with profile_site_not_public, and changing a profile target's visibility away from public detaches the alias (audited as user.profile_detached).

Downgrades

Fail closed on privacy, never destructive: private and unlisted sites keep their visibility and serve only organization members; the sub-footer returns; custom domains stop serving while the canonical address continues; content is never deleted, and over-capacity sites keep serving reads while new writes block until usage fits free limits or the plan returns.

Changing plans

Send the organization owner to their billing page (each organization's Plan & billing). Checkout and the customer portal are Stripe browser ceremonies; billing has not opened yet, and until it does every organization is on the free plan.