Fortuna Compliance API

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:

  • gamblerStatus is RegisteredTemporarily or RegisteredIndefinitely
  • isMinor is true

isBlockedForMarketing is true when any of the following conditions apply:

  • isBlockedForPlay is true (no marketing to blocked players)
  • marketingAllowed is false

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