InterfaceUpdateToClient

Type: object


CurrentRoundUpdate

Type: object

Type: enum (of string)

Must be one of:

  • "CurrentRoundUpdate"

TcsAPI

Type: object

RoundState

Type: enum (of string)

This describes the current game phase.
Note: It doesn't always move forward. Sometimes the system will correct itself
due to cards being occluded or intentionally moved.

When the round is over we go to DEALER_DONE.
In some situations we cannot determine if the round is over without more context
so we go to DEALER_MAYBE_DONE. For example: All players have busted,
but the dealer has to finish playing the hand anyways because of a side bet.

At the end we will go into ROUND_OVER if the round is supposed to be stored, and into
ROUND_CANCELED if we classify it as sensor noise.
This state will only be reached once, you should not miss this event.
We use this to mark what rounds we store in the database or show on the screen.
Even rounds with wrong dealer procedure will reach ROUND_OVER, they are marked
as such in the anomalies / diagnostics fields.

Must be one of:

  • "DEALER_DONE"
  • "DEALER_MAYBE_DONE"
  • "DEALER_ONE_CARD"
  • "DEALER_TWO_CARDS"
  • "EMPTY"
  • "FAILED"
  • "ROUND_CANCELED"
  • "ROUND_OVER"
  • "STARTED"

Type: array

The length of this list is fixed and determined with the calibration procedure.

No Additional Items

Each item of this array must be:

PlayerAPI

Type: object

Type: array

Players consist of 0 or more stacks. If the player has 0 stacks, it is inactive. If the player has >1 stack, then the player has split its cards.

No Additional Items

Each item of this array must be:

StackAPI

Type: object

Type: array

The cards might be removed as the system handles movement and occlusions.

No Additional Items

Each item of this array must be:

CardAPI

Type: object

Label52

Type: object

Value

Type: enum (of string)

Must be one of:

  • "10"
  • "2"
  • "3"
  • "4"
  • "5"
  • "6"
  • "7"
  • "8"
  • "9"
  • "A"
  • "J"
  • "K"
  • "Q"

Suit

Type: enum (of string)

Must be one of:

  • "C"
  • "D"
  • "H"
  • "S"

Type: array

Must contain a minimum of 2 items

Must contain a maximum of 2 items

No Additional Items

Tuple Validation

Item at 1 must be:
Item at 2 must be:

Type: boolean

Whether the stack was doubled.


All chip stacks associated with this player.

Type: array
No Additional Items

Each item of this array must be:

DealerAPI

Type: object

Contains the info about the dealer (mainly cards). Note: We don't guarantee that we won't take cards out of here. You should treat this as our current best guess for what cards are actually on the table, while handling occlusions, lighting changes, etc. The final value for the dealer cards is given when the phase is ROUND_OVER.

Type: integer

The number of frames since this round was started.

Type: array of string

Used to communicate issues with this round. This is unstable in this form and undocumented. In the future we can expose a structured stable API here. We use it to identify: errors in the dealer procedure, issues with our system for debugging.

No Additional Items

Each item of this array must be:

Type: string

The timestamp when this round was initialized. It also includes the number of frames passed since round begin.


The timestamp when a first card was assigned to the round. This is later than the initialization timestamp, because a round can be initialized by chip stack detections.

Type: array of array
No Additional Items

Each item of this array must be:

Type: array

Must contain a minimum of 2 items

Must contain a maximum of 2 items

No Additional Items

Tuple Validation

Item at 1 must be:

RoundState

Type: enum (of string)

This describes the current game phase.
Note: It doesn't always move forward. Sometimes the system will correct itself
due to cards being occluded or intentionally moved.

When the round is over we go to DEALER_DONE.
In some situations we cannot determine if the round is over without more context
so we go to DEALER_MAYBE_DONE. For example: All players have busted,
but the dealer has to finish playing the hand anyways because of a side bet.

At the end we will go into ROUND_OVER if the round is supposed to be stored, and into
ROUND_CANCELED if we classify it as sensor noise.
This state will only be reached once, you should not miss this event.
We use this to mark what rounds we store in the database or show on the screen.
Even rounds with wrong dealer procedure will reach ROUND_OVER, they are marked
as such in the anomalies / diagnostics fields.

Same definition as state
Item at 2 must be:

Type: stringFormat: uuid Default: "00000000-0000-0000-0000-000000000000"

UUID v4. It is generated each new round. A round starts as soon as anything relevant is detected. Currently 'anything relevant' means cards, chips or cash. The latter two are only considered if these models are deployed and configured. Not every UUID should be treated as a full round — it might be canceled and never reach ROUNDOVER but only ROUNDCANCELED. Example: a chip stack is recognized and then disappears.

LicensingInfo

Type: object

Type: enum (of string)

Must be one of:

  • "Development"
  • "Internal"
  • "Paid"
  • "Trial"

Type: array of string
No Additional Items

Each item of this array must be:

RoundHistory

Type: object

Type: enum (of string)

Must be one of:

  • "RoundHistory"

Type: array
No Additional Items

Each item of this array must be:

SideBetUpdate

Type: object

Side bet payout results for all players in the current round.
Sent whenever the results change. Will be sent multiple times per round as more cards are revealed.

Type: enum (of string)

Must be one of:

  • "SideBetUpdate"

Type: stringFormat: uuid

The UUID of the round these results belong to.

Type: array

One entry per player.

No Additional Items

Each item of this array must be:

PlayerSideBetResultsAPI

Type: object

Type: integer

0-based index of the player, matching the players array in TcsAPI.

Type: array

One entry per configured side bet for this player.

No Additional Items

Each item of this array must be:

SideBetResultAPI

Type: object

SupportedPlayerSideBet

Type: enum (of string)

The name of the side bet (e.g. '21+3', 'PerfectPairs').

Must be one of:

  • "21+3"
  • "BlackJackPot"
  • "Blackjack Xtra"
  • "Blazing Seven"
  • "Crazy Twins"
  • "Get The Picture"
  • "Kings Bounty"
  • "Perfect Pairs"
  • "Progressive"
  • "Progressive Swisscasinos"
  • "Pure Pairs"
  • "Sweet 16"

Type: boolean

True if the player placed a bet on this side bet this round.


The payout result for this side bet. NotYetDetermined if the round has not progressed far enough to calculate the result. PayoutTableUnknown if no payout table is configured for this side bet.

SideBetDetermined

Type: object

The side bet outcome has been fully evaluated.

outcome is a string label for the winning hand category (e.g. "STRAIGHT_FLUSH",
"PERFECT_PAIRS") or "LOSS" when the player loses. It is a plain string rather than
an enumeration so that operator-configured side bets with arbitrary hand categories can be
supported in the future without changing this type.

payout encodes the multiplier applied to the player's stake:
- -1.0 — loss (stake forfeited)
- A positive float — win multiplier (e.g. 3.0 means 3 : 1)
- "MAJOR" / "MINOR" — jackpot tier whose exact value is resolved by the casino's
progressive payout system rather than a fixed multiplier.

Type: string Default: "InterfaceUpdate"