ROFUS Checks
Use the ROFUS endpoints to verify a Danish citizen's self-exclusion status, CSRP registration, marketing permission, or retrieve a combined evaluation covering all three checks in one call.
Gambler check (self-exclusion) — POST /api/rofus/gambler/check
Checks whether a person is registered in the ROFUS self-exclusion register.
Request body:
| Field | Type | Required | Description |
|---|---|---|---|
audit.externalReference |
string | Yes | Your reference (stored in audit log) |
audit.context |
string | No | Optional context string |
cpr |
string | Yes | 10-digit Danish CPR number |
Response:
| Field | Type | Description |
|---|---|---|
status |
string | Self-exclusion status — see values below |
Status values:
| Value | Meaning |
|---|---|
NotRegistered |
Person is not self-excluded — play is permitted |
RegisteredTemporarily |
Person is temporarily self-excluded — play is not permitted |
RegisteredIndefinitely |
Person is indefinitely self-excluded — play is not permitted |
CSRP check — POST /api/rofus/csrp/check
Checks whether a person is registered in the CSRP (credit register for gambling debt) and whether they are a minor.
Request body:
Same as gambler check: audit.externalReference, audit.context (optional), cpr.
Response:
| Field | Type | Description |
|---|---|---|
status |
string | CSRP registration status: NotRegistered or Registered |
isMinor |
boolean | true if the person is 17 years old or younger |
Commercial bulk check (marketing permission) — POST /api/rofus/commercial/check-bulk
Checks marketing permission for one or more persons. Use this before sending direct marketing to customers. One audit record is created per person.
Request body:
| Field | Type | Required | Description |
|---|---|---|---|
persons |
array | Yes | Array of person objects |
persons[].audit.externalReference |
string | Yes | Your reference for this person |
persons[].audit.context |
string | No | Optional context string |
persons[].cpr |
string | Yes | 10-digit Danish CPR number |
Response:
| Field | Type | Description |
|---|---|---|
persons |
array | One result per person, in request order |
persons[].externalReference |
string | Your reference — echoed back for correlation |
persons[].cpr |
string | The CPR number checked |
persons[].marketingAllowed |
boolean | true if marketing is permitted for this person |
Evaluation (combined) — POST /api/rofus/evaluation
Runs all three ROFUS checks in a single call and returns a consolidated result including derived blocking flags. This is the recommended endpoint for player admission checks.
Request body:
Same as gambler check: audit.externalReference, audit.context (optional), cpr.
Response:
| Field | Type | Description |
|---|---|---|
cpr |
string | The CPR number evaluated |
gamblerStatus |
string | Self-exclusion status (NotRegistered, RegisteredTemporarily, RegisteredIndefinitely) |
isRegisteredInCsrp |
boolean | Whether the person is registered in the CSRP |
isMinor |
boolean | Whether the person is under 18 years old |
marketingAllowed |
boolean | Whether marketing is permitted |
isBlockedForPlay |
boolean | true if the person must not be allowed to play (see logic below) |
isBlockedForMarketing |
boolean | true if the person must not receive marketing (see logic below) |
Blocking logic
isBlockedForPlay is true when any of the following conditions apply:
gamblerStatusisRegisteredTemporarilyorRegisteredIndefinitelyisMinoristrue
isBlockedForMarketing is true when any of the following conditions apply:
isBlockedForPlayistrue(no marketing to blocked players)marketingAllowedisfalse
Recommendation: Use the evaluation endpoint at login/admission and enforce
isBlockedForPlay. Use the bulk commercial check for batch marketing list filtering.
Non-production behaviour (mock)
In non-production environments, all ROFUS endpoints return deterministic mock responses based on the CPR number — no real register lookups are performed. This allows end-to-end testing of all outcome branches.
| CPR last digit | Gambler/self-exclusion status |
|---|---|
| 0, 1, 2, 3 | NotRegistered |
| 4, 5, 6 | RegisteredTemporarily |
| 7, 8, 9 | RegisteredIndefinitely |
| CPR last digit | CSRP status |
|---|---|
| 0, 1, 2, 3, 4 | NotRegistered |
| 5, 6, 7, 8, 9 | Registered |
| CPR second-to-last digit | Minor status |
|---|---|
| Even (0, 2, 4, 6, 8) | isMinor = true |
| Odd (1, 3, 5, 7, 9) | isMinor = false |
| CPR last digit | Marketing |
|---|---|
| Even (0, 2, 4, 6, 8) | marketingAllowed = true |
| Odd (1, 3, 5, 7, 9) | marketingAllowed = false |
Error reference
| Status | Meaning |
|---|---|
400 |
Invalid or malformed CPR, or missing required fields |
403 |
ROFUS checks are not enabled for your account |