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 the round is super short or we classify it as not a blackjack round.
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. If it
reaches ROUND_CANCELED you can assume it was just sensor / AI model noise.
Even rounds with wrong dealer procedure will reach this state, they are marked with
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

Containes the info about the dealer (mainly cards).
Note: We don't garantuee 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, becuase a round can be initialized be chips 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:
Item at 2 must be:

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

UUID v4. It is genereated 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:

Type: string Default: "InterfaceUpdate"