Billing and usage
Every errorcore plan includes the same product features. Plans differ by their accepted-error allowance, billing period, price, and configured workspace evidence retention. Current catalog values appear on the pricing page and in Settings → Billing.
What counts as one unit
Every newly accepted error envelope (kind: error) consumes exactly one organization-wide unit. Two errors count twice even when worker processing later groups both into the same case.
These consume nothing:
- An idempotent retry of an already admitted error envelope.
- A conflicting or otherwise rejected request.
- A rate-limited request.
- A supplemental payload blob attached to an accepted error.
The allowance belongs to the organization and is shared across all projects, environments, API keys, and members. User IDs are audit actors, never billing or quota owners.
One-time Free evaluation
Free is an organization evaluation, not a recurring monthly plan. It starts when the organization is provisioned and ends when either the catalog-defined allowance or evaluation duration is reached. The current values appear on the live pricing page.
The evaluation never renews and never restarts after an upgrade, cancellation, refund, revocation, or other subscription transition. Organizations that existed on the former Free policy receive one catalog-defined evaluation window during migration 005.
Paid plans and hard caps
Current paid prices, allowances, and workspace evidence-retention settings are shown on the live pricing page. Caps are hard: errorcore rejects another error envelope instead of charging an overage.
Paid usage periods use Polar's verified half-open [current_period_start, current_period_end) boundaries. A verified renewal starts a fresh meter. An immediate upgrade raises the cap without erasing usage already counted in the period. A downgrade applies at the next provider boundary.
Subscription access states
activeis usable while its verified billing period is current.past_dueremains usable while payment recovery is in progress.- A scheduled cancellation remains usable through
current_period_end; it is blocked afterward. unpaid,revoked, andpausedblock ingestion.trialingis unexpected because trials are disabled. It is recorded as configuration drift and blocks ingestion.incompleteblocks while provider truth or configuration is unresolved.- Refund events are audited but do not change access by themselves.
Polar product and price identifiers must both match the deployment's catalog mapping. Unknown mappings, statuses, organizations, or malformed timestamps are recorded as fail-closed outcomes. Periodic reconciliation repairs missed webhook delivery without allowing an older snapshot to overwrite a newer modified_at value.
Checkout and the billing portal
Checkout is available only to an organization administrator and only when the organization has no live paid subscription. The backend derives the Clerk organization, Polar external customer ID, product, price, and return URL; browser-supplied identifiers or URLs are never trusted. Checkout explicitly disables trials.
An organization with a live paid subscription uses the Polar portal for plan changes. Portal configuration should apply upgrades immediately and downgrades or cancellation at the next period boundary.
Plan limit is not a rate limit
| Plan limit | Rate limit | |
|---|---|---|
| HTTP status | 403 | 429 |
| Admission reason | plan limit reached | rate limited |
| Consumes allowance | no | no |
| Cause | access or the durable allowance is exhausted | requests arrive faster than the ingest limiter allows |
| Retrying helps | no | yes, after Retry-After |
Where to look
- Settings → Billing: backend-derived access, reason, plan, usage, period end, and billing action.
- Overview: organization usage for the active evaluation or paid period.
- Admissions: the recorded decision for each authenticated envelope.