Skip to main content

License-aware tenant config

UCRM is license-agnostic. The same code path serves a Nevis crypto casino and a UK GamCom regulated sportsbook. License + verticals + KYC ownership + responsible-gaming features are per-tenant configuration — never hardcoded.

Supported licenses

LicenseSuggested verticalsSuggested KYCSuggested RG features
Neviscasinoplatform_ownsself_exclusion
Curaçaocasinoplatform_ownsself_exclusion + deposit limits
MGA / Maltacasino, sportsbookdualfull RG suite
UK GamComcasino, sportsbookdualMGA + affordability_check + session_cooldown
CZcasinoplatform_ownsMGA + session_cooldown
Gibraltarcasino, sportsbookdualMGA-equivalent
Isle of Mancasino, sportsbookdualMGA-equivalent
Kahnawakecasinoplatform_ownsCuraçao-level
Anjouancasinoplatform_ownsNevis-level
Comoroscasinoplatform_ownsNevis-level

These are recommendations. The operator can override anything per tenant — UCRM doesn't enforce regulatory compliance (that's your compliance team's job), but the defaults give you a sensible starting point.

Tenant configuration shape

{
"license_jurisdiction": "mga",
"verticals": ["casino", "sportsbook"],
"kyc_model": "dual",
"config": {
"rg_features": [
"self_exclusion",
"deposit_limit_daily",
"deposit_limit_weekly",
"loss_limit_daily",
"session_limit_minutes",
"reality_check"
],
"messaging": {
"quiet_hours": { "start": "22:00", "end": "09:00", "default_timezone": "Europe/Malta" },
"frequency_caps": {
"email": { "per_day": 1, "per_week": 5 },
"sms": { "per_day": 1, "per_week": 3 }
}
}
}
}

Effective capabilities

When a request hits an endpoint, UCRM computes effective capabilities = tenant.config ∩ adapter.capabilities. Examples:

  • Sportsbook nav item in the sidebar shows when tenant.verticals contains sportsbook.
  • "Request KYC" admin button shows when tenant.kyc_model = 'crm_owns' or 'dual' AND the project's adapter supports kyc.initiate.
  • Self-exclusion enforcement — even if the casino platform doesn't enforce on its side, CRM filters self-excluded players out of every campaign send. (Capability_mock pattern.)

When adapter doesn't support a feature

If your tenant wants deposit_limit_daily but the adapter you're using doesn't support it on the platform side, UCRM puts the feature in crm_only mode. The CRM still tracks the limit + suppresses sends accordingly, but doesn't propagate to the platform. The admin UI shows a "CRM-only" badge so operators understand the trade-off.