Billing and plans
Billing is attached to the workspace as the Stripe customer via Laravel Cashier. Payment instruments and invoices live in Stripe; the application enforces plan quotas.
How tiers map to quotas
Free applies when no active subscription exists on the workspace. Paid tiers resolve from the Stripe Price ID on the default subscription. Unknown or legacy prices fall back to a configured default paid tier so production traffic is not silently blocked.
In-app billing and Stripe Customer Portal
Workspace owners use Billing in the app to see the current tier, usage against quotas (active codes and scans this month), and to open the Stripe Customer Portal to change plans, update payment methods, and download invoices. Ensure return URLs and webhook secrets are configured for each environment.
Enterprise and custom terms
Volume licensing, custom paper, or alternate payment rails are handled outside self-serve checkout. Engage your account contact so finance and legal can align Stripe objects with your MSA.
For administrators
Set STRIPE_PRICE_STARTER, STRIPE_PRICE_GROWTH, STRIPE_PRICE_SCALE, and optional STRIPE_PRICE_LEGACY_PRO in environment configuration to match your Stripe catalog.
Metered scan overage
Optional: set STRIPE_PRICE_METERED_SCAN to a metered Stripe Price ID added as a subscription item. Workspaces with that item on an active subscription can log scans beyond the tier included volume; usage is reported to Stripe Billing Meters. In-app usage counts use calendar months; Stripe bills metered usage on the subscription billing period—see Customer Portal and invoices for charges.