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.