Predictu
Users

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.

Tiers are per-operator. A user playing on two different casino sites has independent tiers on each. An operator can only manage tiers for their own users.

Tier Overview

TierPer-Trade LimitSpread AdjustmentDescription
new$10None (0%)Default tier for all new users. Conservative limits to protect against early abuse.
regular$100None (0%)Standard tier for active users who have demonstrated normal betting patterns.
vip$1,000None (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.

UX consideration: The $10 limit can frustrate legitimate users who want to place larger bets immediately. Operators should communicate the tier system in their onboarding flow and explain that limits increase with activity.

Regular Tier

Progression from New

Users are automatically promoted from new to regular when they meetall of the following criteria:

  1. Account age ≥ 7 days
  2. At least 5 completed trades (resolved or sold)
  3. Scoring classification is not “professional”
  4. 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.
VIP + Sharp: A VIP user who later scores as “sharp” or “professional” is a special case. The auto-restriction system will not downgrade a VIP unless a God Mode admin has explicitly enabled the 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:

  1. 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.
  2. 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:

1
Account created - User starts at new tier with $10 limit.
2
Activity threshold met - After 7+ days and 5+ trades, daily cron promotes to regular ($100 limit).
3
Manual VIP promotion - Admin identifies the user as a valuable whale and promotes to vip ($1,000 limit).
4
Sharp detection - If scoring identifies professional behavior (score ≥ 90, 20+ trades), auto-restriction demotes to restricted ($5 limit, +3% spread).
5
Manual review - God Mode admin reviews the restricted user and decides to keep, promote back, or ban.

Manual Tier Override

Admins can override a user’s tier at any time through the God Mode or Operator dashboard. The override process requires:

  1. Navigate to the user’s detail page
  2. Click the tier badge to open the tier editor
  3. Select the new tier from the dropdown
  4. Enter a reason (required field, stored in audit log)
  5. 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"
}
Operator permissions: Operators can only change tiers for their own users, and they cannot promote to 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.

TierBase SpreadTier AdjustmentEffective Spread
new2%+0%2%
regular2%+0%2%
vip2%+0%2%
restricted2%+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% effective

Interaction 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 WallHow Tiers Interact
Per-trade limitDirectly set by tier. The trade engine rejects any trade exceeding the tier limit.
Per-market exposure capVIP gets 2x cap. Restricted gets 0.5x cap. New and regular get 1x.
Global exposure capRestricts 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 breakerWhen 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 limitMaximum 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 limitOptional 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:

SettingDefaultOperator Can Adjust?God Mode Can Adjust?
New tier limit$10Yes, up to $50Yes, unlimited
Regular tier limit$100Yes, up to $500Yes, unlimited
VIP tier limit$1,000Yes, up to $5,000Yes, unlimited
Restricted tier limit$5NoYes
Restricted spread+3%NoYes, 0–10%
Auto-promote new→regularEnabledYes (toggle)Yes
Auto-restrict professionalsEnabledNoYes
VIP promotion permissionDisabledN/A (set by God Mode)Yes
Safety guardrails: Operators cannot set the restricted tier limit above $5 or reduce the restricted spread below +3%. These are hardcoded minimums enforced by the platform to ensure that identified sharp bettors cannot be given favorable terms by a compromised or colluding operator.

API Reference

Get User Tier

GET/api/casino/users/:id/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

PATCH/api/s2s/users/:id/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.