DGA Attribute Descriptions
This document describes the data fields produced by Fortuna Compliance on behalf of a casino operator in each DGA-regulated integration. It covers TamperToken, ROFUS, and SAFE reporting attributes.
TamperToken
A TamperToken is a digital signature issued by the Danish Gambling Authority's TamperToken service. Every SAFE report file must be sealed with a TamperToken — opened before the file is written and closed (finalised) immediately after.
Open token (TamperTokenHent)
| Attribute | Type | Description |
|---|---|---|
TamperTokenId |
integer | Unique identifier assigned by the DGA service for this token instance |
StartMac |
string | Message Authentication Code (MAC) returned by DGA at open time — must be embedded in the SAFE file header |
IssuedAt |
ISO 8601 datetime (UTC) | Timestamp when the token was issued by the DGA service |
PlannedCloseAt |
ISO 8601 datetime (UTC) | Deadline by which the token must be closed, as set by DGA |
LicenseCertificateId |
string | Your DGA licence certificate ID, configured for your account during SAFE onboarding — used to authenticate the open call |
RequestXml |
XML | Raw SOAP 1.1 request envelope sent to the TamperToken service |
ResponseXml |
XML | Raw SOAP 1.1 response envelope received from the TamperToken service |
Close token (TamperTokenLuk)
| Attribute | Type | Description |
|---|---|---|
TamperTokenId |
integer | The token identifier returned at open time — must match |
Success |
boolean | Whether DGA confirmed the close operation was accepted |
AdvisText |
string | The digital signature text returned by DGA — must be embedded in the SAFE file footer |
ErrorText |
string | Error description returned by DGA if the close was rejected (null on success) |
RequestXml |
XML | Raw SOAP 1.1 request envelope sent to the TamperToken service |
ResponseXml |
XML | Raw SOAP 1.1 response envelope received from the TamperToken service |
ROFUS
ROFUS (Register Over Frivilligt Udelukkede Spillere) is the Danish self-exclusion and problem-gambling register operated by the Danish Gambling Authority. Operators are required to check it before allowing a customer to play or receive marketing.
Common request attributes
The following attributes are present in every ROFUS request:
| Attribute | Type | Description |
|---|---|---|
PersonCPRNumber |
string (10 digits) | The cpr you supply when calling a ROFUS endpoint |
CalledAtUtc |
ISO 8601 datetime (UTC) | Timestamp when Fortuna Compliance called the ROFUS service on your behalf |
Every request is also authenticated with your DGA credentials, which are configured for your account during onboarding — you don't need to supply them per call.
Gambler check (GamblerCheck)
Checks whether a person is voluntarily self-excluded from gambling.
| Attribute | Type | Description |
|---|---|---|
GamblerExclusionStatus |
string | Raw status value returned by ROFUS — see values below |
Status (mapped) |
string | Mapped status returned by Fortuna Compliance — NotRegistered, RegisteredTemporarily, or RegisteredIndefinitely |
Status mapping:
| ROFUS raw value | Fortuna Compliance value | Meaning |
|---|---|---|
PersonIsNotRegistered |
NotRegistered |
Person is not self-excluded — play is permitted |
PersonIsRegisteredTemporarily |
RegisteredTemporarily |
Person has a temporary self-exclusion — play is not permitted |
PersonIsRegisteredIndefinitely |
RegisteredIndefinitely |
Person has an indefinite self-exclusion — play is not permitted |
CSRP check (GamblerCSRPValidation)
Checks whether a person is registered in the Credit Register for Problem Gamblers (CSRP) and whether they are a minor.
| Attribute | Type | Description |
|---|---|---|
GamblerCPRStatus |
string | Raw CSRP status returned by ROFUS — see values below |
GamblerAgeStatus |
string | Raw age status returned by ROFUS — see values below |
Status (mapped) |
string | Mapped CSRP status — NotRegistered or Registered |
IsMinor |
boolean | true if the person is 17 years old or younger |
CSRP status mapping:
| ROFUS raw value | Fortuna Compliance value | Meaning |
|---|---|---|
CPRIsNotRegistered |
NotRegistered |
Person is not registered in CSRP |
CPRIsRegistered |
Registered |
Person is registered in CSRP — play is not permitted |
Age status mapping:
| ROFUS raw value | IsMinor |
Meaning |
|---|---|---|
AgeIs18OrAbove |
false |
Person is 18 years old or older |
AgeIs17OrBelow |
true |
Person is 17 years old or younger — play is not permitted |
Commercial (marketing) check (GamblerCasinoCheck)
Checks whether a person has opted out of casino marketing communications.
| Attribute | Type | Description |
|---|---|---|
SpilKasinoUdelukkelseStatus |
string | Raw casino exclusion status returned by ROFUS — see values below |
MarketingAllowed (mapped) |
boolean | true if marketing communication is permitted |
Marketing status mapping:
| ROFUS raw value | MarketingAllowed |
Meaning |
|---|---|---|
PersonIkkeRegistreret |
true |
Person is not registered as excluded from casino marketing |
PersonRegistreret |
false |
Person is registered as excluded from casino marketing — do not send marketing |
Combined evaluation
The evaluation endpoint runs all three checks in a single call and derives two composite blocking flags:
| Attribute | Type | Description |
|---|---|---|
IsBlockedForPlay |
boolean | true if the person must not be permitted to play. Set when gamblerStatus is RegisteredTemporarily or RegisteredIndefinitely, or when isMinor is true |
IsBlockedForMarketing |
boolean | true if marketing must not be sent to this person. Set when isBlockedForPlay is true, or when marketingAllowed is false |
SAFE Reporting
SAFE (Spillemyndighedens Afregnings- og Forretningsdata Enviroment) is the DGA's mandatory reporting system. Operators must submit session data, jackpot events, and daily summary reports as XML files sealed with a TamperToken signature.
The tables below follow DGA's own Description of Attributes spreadsheet exactly — one table per XML structure (KasinospilPrSessionStruktur, JackpotUdløsningStruktur, End Of Day), in DGA's attribute order. What it means paraphrases DGA's own definition of the attribute, to help you fill in the "Applicant's description/interpretation" column DGA asks for. Where it comes from explains how Fortuna Compliance arrives at the value.
For attributes you supply: the source field is a starting point, not the finished answer. DGA expects your description of what you actually send and why — e.g. for
SpillerInformationIdentifikationyou should describe your own player-ID scheme, not just point at a field name in our API. For attributes Fortuna Compliance supplies on your behalf (file IDs, your licence certificate ID, etc.), you can use our description directly since the value isn't yours to define.
KasinospilPrSessionStruktur (Session report)
One file per session batch, with one entry per session you've reported via POST /api/safe/sessions (see SAFE reporting).
| DGA attribute | What it means | Where it comes from |
|---|---|---|
SpilFilVersion |
Declares which version of the SAFE standard records format the file uses | Fixed by Fortuna Compliance for every file |
SpilFilIdentifikation |
A unique ID for this XML file. Must never be reused — DGA requires a fresh submission if the same ID appears twice | Generated automatically by Fortuna Compliance for each batch |
SpilCertifikatIdentifikation |
The username used to open and close TamperTokens with DGA's TamperToken service | Your DGA licence certificate ID, configured for your account during SAFE onboarding |
SpilKategoriNavn |
Which of DGA's top-level game categories this batch belongs to (e.g. casino single-player, casino multi-player, bingo) — bingo must always use the bingo category regardless of bingo variant | Your productCategory field, converted to DGA's required text value — describe what kind of product this category represents on your platform |
SpilProduktNavn |
Your own name for the specific game/product, grouped under the category in SpilKategoriNavn |
Your gameName field — describe how you name games and why the name is recognisable to a player |
SpilProduktÅbentNetværk |
Whether players from multiple operators shared the same game instance ("open network") | Your openNetwork flag — describe what counts as a shared/open-network game on your platform |
SpillerInformationIdentifikation |
Your own internal player identifier — must be unique per player and must never be the player's CPR number | Your playerRef field — describe your player-ID scheme and confirm it never contains a CPR number |
SpilTransaktionIdentifikation |
A unique ID tying together a player's game purchase and any later cancellation of it | Your casinoSessionId field — describe how you generate this ID and how it links a session to its cancellation, if any |
SpilKøbDatoTid |
Date and time (with timezone) the player started the session | Your startedAt field |
SpilFaktiskSlutDatoTid |
Date and time (with timezone) the session actually ended | Your endedAt field |
SpilSalgskanal |
The distribution channel the game was played through (retailer/dealer, self-service terminal, internet, mobile, or other) | Your channel field, converted to DGA's required text value — describe which of your platforms each channel value represents |
KasinospilKategori |
The specific casino game sub-type (roulette, baccarat, blackjack, slots, etc.) | Your gameCategory field, converted to DGA's required text value |
KasinospilIndskudSpil |
The portion of the player's stake that went into the game itself — excluding jackpot contributions and commission, but including any bonus or free-spin stakes | Your stakeGames field — describe whether and how bonus/free-spin stakes are included in your figure |
KasinospilGevinstSpil |
The player's winnings from the session, excluding jackpot winnings | Your winningsGames field |
KasinospilAntalTræk |
Number of game rounds/draws played in the session | Your numberOfGames field |
KasinospilKommission |
Commission or rake the operator deducted for the session — commission only, taxes are excluded | Your commissionRake field (the element is omitted from the file entirely when zero) — describe what your commission/rake covers |
ValutaOplysningKode |
The ISO 4217 currency code for all monetary amounts in the record | Your currency field |
SpilTerminalIdentifikation |
Reserved for land-based terminal play — DGA says this must be left empty for online reporting | Not used — Fortuna Compliance only reports the online channel, via SpilHjemmeside below |
SpilHjemmeside |
The domain name of the website the game was played on, or the app name if played via an app | Your SAFE website URL, configured for your account during SAFE onboarding |
TilfældighedGeneratorIdentifikation |
The certified RNG's unique ID. DGA requires the literal value LIVE for live-dealer games where no RNG produces the result |
Your rngId field — describe which certified RNG(s) this identifies, or confirm you send LIVE for live-dealer games |
TilfældighedGeneratorSoftwareId |
The certified software that turns the RNG's output into a game result. DGA requires LIVE for live-dealer games |
Your rngSoftwareId field — describe the certified software this identifies, or confirm you send LIVE for live-dealer games |
SpilAnnullering |
Whether this record is a cancellation of a previously reported transaction | Set automatically by Fortuna Compliance when you cancel the session via PUT /api/safe/sessions/{casinoSessionId} — omitted from the file entirely when the session was not cancelled |
SpilAnnulleringDatoTid |
Date and time (with timezone) the cancellation took place | The time of your cancellation request, or the session's endedAt if you didn't specify one |
JackpotIdentifikation |
Links this session's jackpot contribution to the jackpot event it will eventually be reported against once the jackpot is won — DGA requires the same ID to appear in both reports | The jackpotId of each entry in your jackpotContributions array — describe how this ID is generated and how it stays consistent until the jackpot is won |
KasinospilIndskudJackpot |
The portion of the player's stake that went into the jackpot pool, if any | The amount of each entry in your jackpotContributions array |
JackpotUdløsningStruktur (Jackpot report)
One file per jackpot event you've reported via POST /api/safe/jackpots (see SAFE reporting).
| DGA attribute | What it means | Where it comes from |
|---|---|---|
SpilFilVersion |
Declares which version of the SAFE standard records format the file uses | Fixed by Fortuna Compliance for every file |
SpilFilIdentifikation |
A unique ID for this XML file — must never be reused | Generated automatically by Fortuna Compliance for each jackpot submission |
SpilFilErstatningIdentifikation |
Used when this file replaces an earlier file that was submitted in error — references the file it replaces | Set automatically by Fortuna Compliance when you correct a jackpot via PUT /api/safe/jackpots/{casinoJackpotId} |
SpilCertifikatIdentifikation |
The username used to open and close TamperTokens with DGA's TamperToken service | Your DGA licence certificate ID, configured for your account during SAFE onboarding |
SpilKategoriNavn |
Which of DGA's top-level game categories the jackpot belongs to | Your productCategory field, converted to DGA's required text value — describe what kind of product this category represents on your platform |
JackpotIdentifikation |
The jackpot's unique ID — DGA requires the same value used in the session report(s) that contributed to it, so the pool's buildup can be linked to its payout | Your casinoJackpotId field — describe how this ID stays consistent with the jackpotId values used in your session contributions |
JackpotDatoTid |
Date and time the jackpot was won/paid out | Your occurredAt field |
JackpotTotalGevinst |
The total amount paid out from the jackpot pool, combined across all winners | Your totalAmount field |
JackpotKommissionRake |
The operator's commission deducted from the jackpot pool — commission only, taxes are excluded | Your commission field — describe what your jackpot commission covers |
ValutaOplysningKode |
The ISO 4217 currency code for all monetary amounts in the record | Your currency field |
SpillerInformationIdentifikation |
Identification of the winning player, using the same player-ID convention as the session report | The playerId of each entry in your winners array — describe your player-ID scheme, consistent with what you describe for SpillerInformationIdentifikation in the session report |
JackpotGevinst |
Each individual winner's share of the jackpot | The amount of each entry in your winners array |
End Of Day report
One file per calendar day you've reported via POST /api/safe/endofday, with one entry per clientTotals row you submit (see SAFE reporting).
| DGA attribute | What it means | Where it comes from |
|---|---|---|
SpilFilVersion |
Declares which version of the SAFE standard records format the file uses | Fixed by Fortuna Compliance for every file |
SpilFilIdentifikation |
A unique ID for this XML file — must never be reused | Generated automatically by Fortuna Compliance for each report |
SpilFilErstatningIdentifikation |
Used when this file replaces an earlier EOD file that was submitted in error — references the file it replaces | Set automatically by Fortuna Compliance when you correct a report via PUT /api/safe/endofday/{endOfDayId} |
SpilCertifikatIdentifikation |
The username used to open and close TamperTokens with DGA's TamperToken service | Your DGA licence certificate ID, configured for your account during SAFE onboarding |
EndOfDayRapportDato |
The calendar date this end-of-day summary covers | Your date field |
ValutaOplysningKode |
The ISO 4217 currency code for all monetary amounts in the record | The currency in each clientTotals entry |
SpilKategoriNavn |
Which of DGA's top-level game categories this day's totals belong to — one entry per category played that day | The productCategory in each clientTotals entry, converted to DGA's required text value |
EndOfDayRapportAntalSpil |
Total number of game rounds for the day in this category, with cancellations netted out | The totalNumberOfGames in each entry — describe how cancelled sessions are excluded from your daily count |
EndOfDayRapportIndskudSpil |
Total player stakes for the day in this category, with cancellations netted out | The totalStake in each entry |
EndOfDayRapportIndskudJackpot |
Total jackpot pool contributions for the day in this category, with cancellations netted out | The totalJackpotContribution in each entry |
EndOfDayRapportGevinster |
Total winnings paid out for the day in this category, with cancellations netted out | The totalWin in each entry |
EndOfDayRapportKommissionRake |
Total commission/rake taken for the day in this category — commission only, taxes are excluded — with cancellations netted out | The totalCommissionRake in each entry |
Coverage note: every attribute in DGA's Description of attributes spreadsheet is accounted for above.
SpilTerminalIdentifikationis the one exception — it's a valid alternative for land-based terminals, but Fortuna Compliance only reports online channels (SpilHjemmeside), so it's never sent.
Reference tables
Product categories
| Fortuna Compliance value | DGA XML value | Description |
|---|---|---|
BingoGame |
Bingospil |
Bingo |
ManagerGame |
Managerspil |
Manager game |
FixedOddsBetting |
Fastoddsspil |
Fixed-odds betting |
FixedOddsBetExchange |
FastoddsspilBetexchange |
Fixed-odds bet exchange |
FixedOddsBeXDkHorse |
FastoddsspilBeXDkHest |
Fixed-odds bet exchange (Danish horse) |
FixedOddsDanskHorse |
FastoddsspilDanskHest |
Fixed-odds Danish horse racing |
VirtualFixedOdds |
VirtuelFastOdds |
Virtual fixed-odds |
HorseLikeGame |
Hesteagtig |
Horse-like game |
HorseDK |
HestDK |
Danish horse (pool) |
PoolGame |
Puljespil |
Pool game |
PokerTournament |
PokerTurnering |
Poker tournament |
PokerCashGame |
PokerCashGame |
Poker cash game |
CasinoSinglePlayer |
KasinospilSinglePlayer |
Casino single-player |
CasinoMultiPlayer |
KasinospilMultiPlayer |
Casino multi-player |
PoolGameDanskHorse |
PuljespilDanskHest |
Pool game (Danish horse) |
SpreadBetting |
SpreadBetting |
Spread betting |
PoolRNG |
PuljeRNG |
Pool RNG |
ContinuousCombinationGame |
FortloebendeKombispil |
Continuous combination game |
Game categories
| Fortuna Compliance value | DGA XML value |
|---|---|
Slots |
spilleautomat |
Bingo |
bingo |
Roulette |
roulette |
Baccarat |
baccarat |
PuntoBanco |
puntobanco |
Blackjack |
blackjack |
Poker |
poker |
Other |
andet |
Combination |
kombinationsspil |