Skip to main content

VIP tiers API

Auth: Clerk session.

CRUD

GET /v1/vip-tiers POST /v1/vip-tiers PATCH /v1/vip-tiers/:id

{
"code": "platinum", // immutable in PATCH
"name": "Platinum",
"rank": 3,
"color": "#E5E4E2",
"glyph": "★★★★",
"requirements": {
"lifetime_deposit_subunit": 5000000, // €50000
"lifetime_wagered_subunit": 25000000, // €250000
"min_days_active": 30
},
"demotion": { "inactivity_days": 45 },
"perks": {
"cashback_pct": 10,
"dedicated_host": true,
"priority_kyc": true
},
"is_active": true
}

Player tier

GET /v1/players/:id/tier

{
"data": {
"current_tier_code": "gold",
"tier_promoted_at": "2026-04-15T...",
"history": [
{
"from_code": "silver",
"to_code": "gold",
"trigger": "auto", // auto | manual | reset
"context": {},
"occurred_at": "2026-04-15T..."
}
]
}
}

POST /v1/players/:id/tier — two modes:

// Manual override
{ "to_code": "platinum", "reason": "VIP host invitation" }

// Auto-recompute
{}

Manual override writes a trigger=manual history entry with the actor + reason. Subsequent auto-recompute respects the manual tier as the starting point.

Internal recompute

POST /v1/internal/recompute-tier (server-to-server):

{ "tenant_id": "uuid", "player_id": "uuid", "trigger": "auto" }

Used by stream-processor when wired (deferred default — see VIP tiers feature).