plans.py · entitlements.py

Quotas are configuration. Capabilities are a map.

An account's plan selects a limits row read by both quota checks and the rate limiter, so synchronous requests and background jobs never disagree. Locked modules return HTTP 402 with an explicit upgrade path.

FREE
$0 /mo

Validate the ledger round-trip

max_campaigns
3
max_users
2
max_api_keys
3
rate_limit
60 / min
DEFAULTcommon
$79 /mo

Full intelligence stack for a single operator

max_campaigns
50
max_users
10
max_api_keys
20
rate_limit
300 / min
PRO
$249 /mo

Live connectors, automation, API access

max_campaigns
250
max_users
25
max_api_keys
50
rate_limit
600 / min
ENTERPRISE
Custom

Agency, white-label, enterprise controls

max_campaigns
100,000
max_users
1,000
max_api_keys
1,000
rate_limit
6,000 / min

Entitlement matrix

ModuleFREEDEFAULTPROENTERPRISE
Core Analytics
Opportunity Engine
Profit Score
Optimization Engine
Predictive Intelligence
Advanced Forecasting
Profit Discovery
Command Center
Benchmark Intelligence
AI Profit Copilot
Learning Loop
Cross-Network Intelligence
Live Network Connectors
Automation Engine
Autonomous Optimization
Team Collaboration
API Access
Multi-Client / Agency
White-Label Reporting
Enterprise Controls

402 PAYMENT_REQUIRED → { module, required_plan, current_plan } — the UI reads the same map to render locked state.