Transactions
THNDR calls this endpoint to notify the Operator of a transaction request, instructing them to either debit or credit the player’s balance.
Endpoint
POST {operatorURL}/thndr/transactionsBet Transaction
The BET Transaction is sent by THNDR to notify the Operator of a wager placed by a player.
The Operator must process this request to debit the player’s balance (and optionally record a potential reward).
{
"type": "BET",
"transactionId": "a395479b-7d31-406e-abab-2dd66a61d5ee-BET",
"requestedAt": "2025-08-21T14:30:00.123Z",
"userId": "{USER_ID}",
"sessionId": "{SESSION_ID}",
"roundId": "a395479b-7d31-406e-abab-2dd66a61d5ee",
"currency": "USD",
"amount": 120,
"gameId": "solitaire",
"reward": 200,
"serviceFee": 20
}transactionId- Unique transaction identifier. Must be persisted by the Operator for idempotency and rollback handling.requestedAt- The date and time when the request was initially made, in ISO 8601 format (e.g., 2025-08-21T14:30:00.123Z).userId- Player identifier on the Operator’s platform.sessionId- The session identifier provided by the Operator when the game was launched.roundId- Identifier of the game round this transaction belongs to.currency- Player's wallet currency provided by the Operator when the game was launched (read more in Currencies).amount- Bet amount, in the smallest unit of the currency (e.g., cents for USD, pence for GBP).usdAmount- Optional. Transaction amount in USD cents; present only when the match currency is USD, carrying the original pre-conversion USD value (may differ fromamount).gameId- Game identifier. Possible values:solitaire,blocks,twentyone,blackjack,slots,plinko,videopoker,marbles, andhilo.reward- The possible payout in the smallest unit of the currency if this bet wins (shown for info, do not credit yet).serviceFee- Service fee portion included inamount(info-only); Operator must debit onlyamount, notamount + serviceFee.
Error Handling
If the player does not have sufficient funds, the Operator must return:
Win Transaction
The WIN transaction is sent by THNDR to notify the Operator that a player has won a round.
The Operator must process this request to credit the player’s balance.
transactionId- Unique transaction identifier. Must be persisted by the Operator for idempotency and rollback handling.requestedAt- The date and time when the request was initially made, in ISO 8601 format (e.g., 2025-08-21T14:30:00.123Z).userId- Player identifier on the Operator’s platform.sessionId- The session identifier provided by the Operator when the game was launched.roundId- Identifier of the game round this transaction belongs to.currency- Player's wallet currency provided by the Operator when the game was launched (read more in Currencies).amount- Win amount, in the smallest unit of the currency (e.g., cents for USD, pence for GBP).usdAmount- Optional. Transaction amount in USD cents; present only when the match currency is USD, carrying the original pre-conversion USD value (may differ fromamount).gameId- Game identifier. Possible values:solitaire,blocks,twentyone,blackjack,slots,plinko,videopoker,marblesandhilo.roomId- Identifier for the game room. Players sharing the same roomId are participating in the same PvP match.playerScore- Final score of the player identified byuserId. Absent if this player never submitted a score.opponentScore- Final score of this player's opponent in the sameroomId. Absent if the opponent never submitted a score.tournamentId(optional) - Identifier of the tournament this round belongs to. Present only for tournament rounds.
Lose Transaction
The LOSE transaction is sent by THNDR to notify the Operator that a player has lost a round.
The Operator might process this request to record a loss.
transactionId- Unique transaction identifier. Must be persisted by the Operator for idempotency.requestedAt- The date and time when the request was initially made, in ISO 8601 format (e.g., 2025-08-21T14:30:00.123Z).userId- Player identifier on the Operator’s platform.sessionId- The session identifier provided by the Operator when the game was launched.roundId- Identifier of the game round this transaction belongs to.currency- Player's wallet currency provided by the Operator when the game was launched (read more in Currencies).gameId- Game identifier. Possible values:solitaire,blocks,twentyone,blackjack,slots,plinko,videopoker,marblesandhilo.roomId- Identifier for the game room. Players sharing the same roomId are participating in the same PvP match.playerScore- Final score of the player identified byuserId. Absent if this player never submitted a score.opponentScore- Final score of this player's opponent in the sameroomId. Absent if the opponent never submitted a score.tournamentId- Identifier of the tournament this round belongs to. Present only for tournament rounds.
Draw Transaction
The DRAW transaction is sent by THNDR to notify the Operator that a player has tied a round.
The Operator must process this request to credit the player’s balance.
transactionId- Unique transaction identifier. Must be persisted by the Operator for idempotency and rollback handling.requestedAt- The date and time when the request was initially made, in ISO 8601 format (e.g., 2025-08-21T14:30:00.123Z).userId- Player identifier on the Operator’s platform.sessionId- The session identifier provided by the Operator when the game was launched.roundId- Identifier of the game round this transaction belongs to.currency- Player's wallet currency provided by the Operator when the game was launched (read more in Currencies).amount- Win amount, in the smallest unit of the currency (e.g., cents for USD, pence for GBP).usdAmount- Optional. Transaction amount in USD cents; present only when the match currency is USD, carrying the original pre-conversion USD value (may differ fromamount).gameId- Game identifier. Possible values:solitaire,blocks,twentyone,blackjack,slots,plinko,videopoker,marblesandhilo.roomId- Identifier for the game room. Players sharing the same roomId are participating in the same PvP match.playerScore- Final score of the player identified byuserId. Absent if this player never submitted a score.opponentScore- Final score of this player's opponent in the sameroomId. Absent if the opponent never submitted a score.
Rollback Transaction
The ROLLBACK transaction is sent by THNDR to request the Operator to reverse a previously processed BET transaction, in cases of error, cancellation, or game rollback.
The Operator must ensure that the original transaction is undone and the player’s balance is correctly updated.
transactionId- Unique transaction identifier. Must be persisted by the Operator for idempotency.requestedAt- The date and time when the request was initially made, in ISO 8601 format (e.g., 2025-08-21T14:30:00Z).originalTransactionId- The transactionId of the original BET transaction being rolled back.userId- Player identifier on the Operator’s platform.sessionId- The session identifier provided by the Operator when the game was launched.roundId- Identifier of the game round this transaction belongs to.currency- Player's wallet currency provided by the Operator when the game was launched (read more in Currencies).gameId- Game identifier. Possible values:solitaire,blocks,twentyone,blackjack,slots,plinko,videopoker,marblesandhilo.
Promo Transaction
The PROMO transaction is sent by THNDR once per free match grant, to report the combined result of every free match on it.
The Operator must process this request to credit the player's balance.
It is sent when either:
every match on the grant has been played, or
the grant expires with at least one match played.
A grant that is cancelled, or expires with no match played, sends nothing.
transactionId- Unique transaction identifier, stable across retries. Must be persisted by the Operator for idempotency.requestedAt- The date and time when the request was initially made, in ISO 8601 format (e.g., 2026-10-02T14:30:00.123Z).userId- Player identifier on the Operator's platform.sessionId- The session in which the last match on the grant was played.roundId- Identifier of the last match played on the grant.currency- Thecurrencysent on the grant (read more in Currencies).amount- Total the player won across every match on the grant, in the smallest unit of the currency (e.g., cents for USD, pence for GBP). Credit this amount. May be0.usdAmount- Optional.amountin USD cents before conversion; present only when the match currency is USD.gameId- Game identifier of the last match played on the grant. Possible values:solitaire,blocks,twentyone,blackjack,slots,plinko,videopoker,marblesandhilo.grantId- ThegrantIdthe Operator sent when granting the free matches.cost- Total entry fees waived across every match played on the grant, in the smallest unit of the currency (info-only). Do not debit it; use it to report the cost of the promotion.usdCost- Optional.costin USD cents before conversion; present only when the match currency is USD.isTest- Present andtruewhen the player is a test player.
Each match is converted at the exchange rate of the session it was played in, and the converted amounts are summed, so amount and cost can differ slightly from converting usdAmount and usdCost at a single rate. See What each outcome adds to the grant for how each result contributes.
Signature Verification
Verify the request signature using raw request body as the request payload. More in the Request Signing section.
Last updated