Billing & Plans

Limits & Usage

How plan limits and feature gating work — the resolution order, how counters are measured, when they reset, what limit-reached errors mean, and how past-due billing degrades your org.

Limits & Usage

Every plan sets caps on how much you can create (users, documents, projects, expense claims, receipt scans, e-sign templates) and a set of features that are switched on or off. This page explains how those are enforced, how the counters are measured, when they reset, and exactly what you'll see when you hit a wall.

How feature gating works

Features are checked on the server, every time you take a gated action. The UI may hide a button, but the real decision is made by the backend — so there's no way to bypass a gate from the app.

When the server decides whether a feature is available, it resolves in this order:

  1. Internal-team bypass — Anhourtec staff accounts have all features (used for support).
  2. Per-org feature override — Your organization's settings can force-enable or force-disable an individual feature regardless of plan. This is how a feature can be turned on for your org outside the normal plan, or held back even if your plan would include it.
  3. Plan-based — If no override applies, your current plan decides.

If a gated action is blocked, the server returns HTTP 403 "Feature Unavailable" along with the feature that was required and the plan needed to unlock it.

Audit logs. The audit-log route is gated on all methods — "viewing the log is the feature." But because every plan now includes audit logs, it's effectively open to everyone. Role gating still applies (audit logs are visible to EXECUTIVE). See Audit & Monitoring.

Past-due degradation

If your subscription becomes past_due or suspended (a failed renewal, an unpaid invoice), your organization is treated as the Free plan — for both limits and features — until payment is fixed.

That means paid-only features (calendar sync, reporting, SSO, QuickBooks, etc.) stop working, and your usage caps drop to Free-plan levels. Restoring a working payment method in the billing portal lifts the degradation automatically.

This is silent until you hit it. A past-due org keeps running, but the first gated action or over-cap create after degradation will fail. If features suddenly disappear, check your billing status first.

Counting & resets

How a counter resets depends on your plan.

CounterFreePro / BusinessEnterprise
DocumentsLifetime totalPer billing periodUnlimited
ProjectsLifetime totalPer billing periodUnlimited
Expense claimsLifetime totalPer billing periodUnlimited
Receipt scansPer calendar monthPer billing periodUnlimited
Users (seats)Always-on capAlways-on capUnlimited
E-sign templatesn/a (0)Always-on capUnlimited

When per-period counters reset:

  • Paid plans (Pro / Business): counters reset on your organization's Stripe invoice anniversary — the day your billing period rolls over — not the 1st of the calendar month.
  • Free / no-subscription orgs: counters reset on the first of the calendar month, in your organization's timezone.

The Usage view in your billing settings shows the current count, the cap, and when each counter next resets.

How specific things are counted

Documents count the file and each recipient. A document counts as one for the file plus one for every recipient assignment. A handbook shared with 10 people counts as 11 against your document quota. This is why the limit-reached message warns that "each shared document and signing request counts toward your quota."
Receipt scans are billed per AI scan — saved or not. Each AI receipt scan uses AI tokens, so it counts against your monthly receipt-scan limit whether or not you save the result. Re-scanning the same receipt counts again.

Limit-reached errors

When you hit a cap, the action is blocked and you'll see one of these messages (X = current count, Y = your cap; "this month" appears on per-period counters):

LimitMessage
UsersUser limit reached (X/Y). Upgrade your plan to add more users.
DocumentsDocument limit reached (X/Y[ this month]). Each shared document and signing request counts toward your quota…
ProjectsProject limit reached (X/Y[ this month])…
Expense claimsExpense claim limit reached (X/Y[ this month])…
Receipt scansMonthly receipt scan limit reached (X/Y). Each scan uses AI tokens whether saved or not…
E-sign templatesTemplate limit reached (X/Y)…
Over seats (at login)Your organization has exceeded its user limit. Please contact your organization's executive to upgrade.

To clear a limit, either wait for the next reset (per-period counters), remove items to get back under the cap, or upgrade your plan.

Seat enforcement

If the number of active users exceeds your plan's user limit, the org doesn't lock everyone out — instead, only the oldest N users by join date keep access, where N is your seat limit. Everyone beyond that is blocked at login with the over-seats message above.

EXECUTIVE users are always exempt from seat blocking — an executive can always log in to fix billing.

This matters most on downgrade: dropping from Business (30 seats) to Pro (10 seats) with 15 active users means the 10 oldest keep their seats and the remaining 5 (non-executives) lose login until you upgrade again or deactivate users.

Troubleshooting

SymptomCauseFix
"Feature Unavailable" (403)The feature isn't in your plan, or it was force-disabled for your org via a per-org overrideUpgrade your plan, or ask support if you believe it should be enabled
Paid features suddenly stopped workingSubscription is past_due or suspended → org degraded to FreeUpdate your card in the billing portal
"Limit reached" but I deleted itemsPer-period counters reset on the billing anniversary, not instantly; lifetime counters (Free) don't reset on delete of historical usageCheck the reset date in the Usage view, or upgrade
Document count higher than the number of filesEach recipient/signing request also countsExpected — see counting rules above
Receipt-scan count higher than receipts savedScans are billed even when not savedExpected — re-scans count too
A user can't log inOrg is over its seat limit; this user isn't in the oldest-NUpgrade, deactivate other users, or have an EXECUTIVE log in