User Tier System
Every user in Predictu is assigned to one of four tiers. Tiers control per-trade limits,spread adjustments, and risk engine behavior. Tier assignment happens automatically based on activity and scoring, but can be manually overridden by God Mode admins or operators with sufficient permissions.
Tier Overview
| Tier | Per-Trade Limit | Spread Adjustment | Description |
|---|---|---|---|
new | $10 | None (0%) | Default tier for all new users. Conservative limits to protect against early abuse. |
regular | $100 | None (0%) | Standard tier for active users who have demonstrated normal betting patterns. |
vip | $1,000 | None (0%) | High-limit tier for trusted recreational bettors and whales. Manual promotion only. |
restricted | $5 | +3% | Punitive tier for professional/sharp bettors. Lowest limits + wider spreads. |
New Tier (Default)
Assignment
Every user starts in the new tier the moment their account is created, whether through direct registration or via an operator’s embed iframe. There is no action required -this is the default value in the database.
Limits & Behavior
- Per-trade limit: $10 maximum per individual trade
- Spread adjustment: None (standard market spread applies)
- Exposure cap: Standard per-market cap applies (no reduction)
- Risk monitoring: Minimal. New users are not individually tracked unless they trigger volume alerts.
Rationale
The $10 limit is intentionally conservative. It prevents a newly created account from placing large bets before the system has any behavioral data. This protects against bonus abuse, multi-accounting, and coordinated attacks where an adversary creates many accounts to exploit a mispriced market.
Regular Tier
Progression from New
Users are automatically promoted from new to regular when they meetall of the following criteria:
- Account age ≥ 7 days
- At least 5 completed trades (resolved or sold)
- Scoring classification is not “professional”
- No active risk flags (e.g., suspected multi-account, chargeback history)
The promotion check runs as part of the daily scoring cron job (03:00 UTC). Users who meet the criteria are batch-promoted, and a TIER_CHANGE event is logged.
Limits & Behavior
- Per-trade limit: $100 maximum per individual trade
- Spread adjustment: None (standard market spread applies)
- Exposure cap: Standard per-market cap applies
- Risk monitoring: Standard. Appears in risk dashboard if score crosses into “sharp” territory.
Typical User Profile
The regular tier represents the bulk of the user base -typically 60–75% of all active users. These are recreational bettors who place a few trades per week, have a roughly break-even or slightly losing record, and pose minimal risk to the house.
VIP Tier
Promotion
VIP promotion is manual only. There is no automatic path to VIP. A God Mode admin or an operator with the manage_tiers permission must explicitly promote a user. This is intentional: VIP status represents a business decision, not just a behavioral threshold.
Common reasons for VIP promotion:
- High-volume recreational bettor (whale) the operator wants to retain
- Known public figure or influencer the operator invited
- Business relationship (e.g., the operator’s own test accounts)
- User who requested higher limits and passed manual review
Limits & Behavior
- Per-trade limit: $1,000 maximum per individual trade
- Spread adjustment: None (standard market spread applies)
- Exposure cap: 2x the standard per-market cap
- Risk monitoring: Enhanced. VIP trades are individually logged and reviewed if they exceed $500.
auto_restrict_vip flag (disabled by default). Instead, a risk event is created for manual review.Demotion
VIP users can be demoted back to regular or directly to restricted by an admin. Common demotion triggers:
- User is identified as using a model/algorithm
- User engages in abusive behavior (multi-accounting, market manipulation)
- Operator decides the user is no longer a valuable VIP
Restricted Tier
Assignment
Users enter the restricted tier through one of two paths:
- Automatic: The scoring engine’s auto-restriction triggers when a user’s composite score reaches ≥ 90 and they have ≥ 20 resolved trades. See the Scoring Engine page for details.
- Manual: A God Mode admin or operator manually sets the tier to
restricted. This is used for users flagged for abuse, multi-accounting, or other policy violations.
Limits & Behavior
- Per-trade limit: $5 maximum per individual trade
- Spread adjustment: +3% added to all quotes
- Exposure cap: 50% of the standard per-market cap
- Risk monitoring: Maximum. Every trade is individually logged. Weekly review by risk team.
How the +3% Spread Works
When a restricted user requests a quote, the pricing engine adds 3 percentage points to the spread in the house’s favor. For example:
// Normal quote for a market at 60% YES:
// YES price: 0.62 (2% spread built in)
// NO price: 0.40
// Restricted user quote:
// YES price: 0.65 (2% base spread + 3% restriction spread)
// NO price: 0.38 (worse for the user either way)
// The extra 3% goes directly to house margin.The spread adjustment is applied server-side in the quote engine. The user sees the adjusted price as their actual price -there is no visible “restricted” label in the UI. This is a deliberate design choice to discourage restricted users from creating new accounts to bypass restrictions.
Reversing Restriction
Restriction is not automatically reversed. Even if a user’s score drops below 90 (e.g., from a losing streak), they remain restricted until a God Mode admin manually changes their tier. This policy exists because:
- A professional bettor having a bad week doesn’t become less skilled
- Deliberate score manipulation (losing on purpose) should not be rewarded
- The operator explicitly wants humans in the loop for de-restriction decisions
Tier Progression Flow
The following shows the standard lifecycle of tier progression:
new tier with $10 limit.regular ($100 limit).vip ($1,000 limit).restricted ($5 limit, +3% spread).Manual Tier Override
Admins can override a user’s tier at any time through the God Mode or Operator dashboard. The override process requires:
- Navigate to the user’s detail page
- Click the tier badge to open the tier editor
- Select the new tier from the dropdown
- Enter a reason (required field, stored in audit log)
- Confirm the change
// API: PATCH /api/s2s/users/:id/tier
{
"tier": "vip",
"reason": "High-value whale, personally vetted by operator"
}
// Response:
{
"success": true,
"user_id": "usr_abc123",
"previous_tier": "regular",
"new_tier": "vip",
"changed_by": "admin_xyz",
"audit_id": "aud_789"
}vip unless the can_promote_vip flag is enabled in their operator config. God Mode admins have no restrictions.Spread Adjustments by Tier
The spread adjustment is a key tool for managing house edge against different skill levels. Currently only the restricted tier has a non-zero adjustment, but the system supports per-tier configuration.
| Tier | Base Spread | Tier Adjustment | Effective Spread |
|---|---|---|---|
new | 2% | +0% | 2% |
regular | 2% | +0% | 2% |
vip | 2% | +0% | 2% |
restricted | 2% | +3% | 5% |
The base spread is set globally in the system config and can also be overridden per-market by God Mode admins. The tier adjustment stacks on top of any market-specific spread. So a restricted user trading on a market with a custom 4% spread would see a total effective spread of 7%.
effective_spread = market.base_spread
+ (market.custom_spread || 0)
+ tier.spread_adjustment
// Example: restricted user on a volatile market
// 2% base + 2% custom (volatile) + 3% restricted = 7% effectiveInteraction with Risk Engine Walls
The risk engine uses “walls” -hard limits that cannot be exceeded regardless of user intent. Tiers interact with these walls in several ways:
| Risk Wall | How Tiers Interact |
|---|---|
| Per-trade limit | Directly set by tier. The trade engine rejects any trade exceeding the tier limit. |
| Per-market exposure cap | VIP gets 2x cap. Restricted gets 0.5x cap. New and regular get 1x. |
| Global exposure cap | Restricts total house exposure across all markets. Tier doesn’t modify this directly, but restricted users contribute less to it due to lower per-trade limits. |
| Circuit breaker | When a sharp or professional user (any tier) places a trade > 50% of their limit, the circuit breaker threshold for that market is temporarily lowered by 20%. |
| Velocity limit | Maximum number of trades per minute. Same across all tiers (20/min), but restricted users are additionally flagged if they consistently hit this limit. |
| Daily loss limit | Optional per-operator setting. When enabled, tier determines the daily loss ceiling: new = $50, regular = $500, vip = $5,000, restricted = $25. |
Database Schema
Tier is stored as a column on the users table and is also denormalized into trade records for historical analysis.
-- On the users table:
ALTER TABLE users ADD COLUMN tier TEXT NOT NULL DEFAULT 'new'
CHECK (tier IN ('new', 'regular', 'vip', 'restricted'));
-- Tier change history (for audit):
CREATE TABLE tier_changes (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL REFERENCES users(id),
previous_tier TEXT NOT NULL,
new_tier TEXT NOT NULL,
reason TEXT NOT NULL,
changed_by UUID REFERENCES users(id), -- NULL if system/auto
is_automatic BOOLEAN NOT NULL DEFAULT FALSE,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
-- Index for fast user lookups:
CREATE INDEX idx_tier_changes_user ON tier_changes(user_id, created_at DESC);Operator-Specific Tier Configuration
Operators can customize certain tier parameters for their own user base, within bounds set by God Mode:
| Setting | Default | Operator Can Adjust? | God Mode Can Adjust? |
|---|---|---|---|
| New tier limit | $10 | Yes, up to $50 | Yes, unlimited |
| Regular tier limit | $100 | Yes, up to $500 | Yes, unlimited |
| VIP tier limit | $1,000 | Yes, up to $5,000 | Yes, unlimited |
| Restricted tier limit | $5 | No | Yes |
| Restricted spread | +3% | No | Yes, 0–10% |
| Auto-promote new→regular | Enabled | Yes (toggle) | Yes |
| Auto-restrict professionals | Enabled | No | Yes |
| VIP promotion permission | Disabled | N/A (set by God Mode) | Yes |
API Reference
Get User Tier
Returns the current tier and tier metadata for a user.
// Response:
{
"user_id": "usr_abc123",
"tier": "regular",
"per_trade_limit": 100,
"spread_adjustment": 0,
"exposure_multiplier": 1.0,
"is_auto_promoted": true,
"promoted_at": "2025-03-15T03:00:00Z",
"can_be_auto_restricted": true
}Update User Tier
Manually change a user’s tier. Requires admin authentication or operator API key with manage_tiers permission.
// Request:
{
"tier": "vip",
"reason": "High-value player, requested limit increase"
}
// Response:
{
"success": true,
"previous_tier": "regular",
"new_tier": "vip",
"audit_id": "aud_xyz789"
}Best Practices for Operators
- Don’t rush VIP promotions. Let users establish a track record of at least 50+ trades before considering VIP. A user who looks recreational at 10 trades may turn out to be sharp at 50.
- Communicate limits clearly. Users who hit their per-trade limit without understanding why become frustrated. Add limit information to your deposit flow and FAQ.
- Monitor the new→regular pipeline. If very few users are promoting, your 7-day / 5-trade thresholds may be too aggressive for your audience. Consider enabling faster promotion in your operator config.
- Review restricted users monthly. Some restricted users may have been flagged incorrectly (e.g., a lucky recreational bettor). Regular review prevents customer service issues.
- Use daily loss limits. Enable the optional daily loss limit feature to provide responsible gambling protection and reduce variance on new/unknown users.
