Fortuna Compliance API

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 SpillerInformationIdentifikation you 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. SpilTerminalIdentifikation is 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