Skip to content

Games, Lobby and Currencies ​

Retrieve the list of games enabled for this operator and the currency table, and configure per-game site bet limits and the game lobby display (menu, tables and banner).

GET /games ​

GET {API_BASE}/operator/v1/games?lang=en

The list of games enabled for this operator. Use it to build the game menu on your site. Games are returned in the sort order defined by the platform.

Query ​

ParameterTypeRequiredDescription
langstringLanguage of the game names. ko en zh ja th vi (same rules as lang in POST /launch). Defaults to ko when empty. If no name exists in that language, the platform falls back to English → Korean → the game code, in that order.

Request example ​

http
GET /operator/v1/games?lang=en HTTP/1.1
Host: {API_HOST}
X-Operator: acme
X-Api-Key: ak_5d2c9e0f7a1b3c4d5e6f708192a3b4c5d6e7f809
X-Timestamp: 1792368067512
X-Nonce: 1c7e5a9b3d2f4e6a8b0c1d2e
X-Signature: 7a0c…(64 hex digits)

Response ​

200 OK

json
{
  "games": [
    {
      "game_code": "holdem_nlh",
      "name": "Texas Hold'em",
      "category": "poker",
      "kind": "table",
      "live": false,
      "thumbnail": {
        "square": "https://{GAME_ORIGIN}/thumbs/holdem_nlh.webp",
        "wide": "https://{GAME_ORIGIN}/thumbs/holdem_nlh.webp"
      },
      "min_bet": 2000,
      "max_bet": 100000,
      "currency": "PHP",
      "status": "open",
      "bet_limits": { "PHP": { "min": 1000, "max": 100000 } },
      "table_create": false,
      "lobby": {}
    },
    {
      "game_code": "live_baccarat",
      "name": "Live Baccarat",
      "category": "live",
      "kind": "round",
      "live": true,
      "thumbnail": {
        "square": "https://{GAME_ORIGIN}/thumbs/live_baccarat.webp",
        "wide": "https://{GAME_ORIGIN}/thumbs/live_baccarat.webp"
      },
      "min_bet": 10000,
      "max_bet": 5000000,
      "currency": "PHP",
      "status": "open",
      "bet_limits": {},
      "table_create": false,
      "lobby": {
        "hide_tables": true,
        "banner": {
          "sha256": "9b2f0c4e6a8d1b3f5e7a9c0b2d4f6e8a1c3e5b7d9f0a2c4e6b8d0f1a3c5e7b9d",
          "title": "Weekend Baccarat Event",
          "link_url": "https://www.acme.example/events/baccarat",
          "width": 1920,
          "height": 480
        }
      }
    }
  ]
}
FieldTypeDescription
game_codestringGame code. See Game codes
namestringGame name in the lang language
categorystringCategory: poker, card, board or live
kindstringtable (P2P, players against each other) or round (banked, players against the house). See Integration overview
livebooleanWhether this is a live game with a dealer video stream
thumbnail.square / thumbnail.widestringThumbnail URLs (both values are currently identical). See Thumbnails below
min_bet / max_betintegerBet size range of the tables that players of this site can currently join (default currency, minor units). See Bet size below. Both are 0 if no table is available
currencystringCurrency of min_bet / max_bet = the operator's default currency (the first of its enabled currencies)
statusstringopen or maintenance (under maintenance — launching returns 503 GAME_MAINTENANCE)
bet_limitsobjectSite bet limits {currency: {min?, max?}}. Currencies without limits have no key, and a side set to 0 (no limit) omits its min / max key. Set with PUT /games/{game_code}/bet-limits.
table_createbooleanWhether dedicated tables can be created for this game (independent mode, and a game allowed by the platform). See POST /tables
lobbyobjectGame lobby display. {} when everything is at its default (all visible, no banner). See the table below

lobby object (keys are omitted when the value is the default)

FieldTypeDescription
hide_menubooleanIf true, this game is hidden from the game list in the game lobby.
hide_tablesbooleanIf true, this game's tables are hidden from the table list in the game lobby.
bannerobjectBanner shown above this game's table list in the game lobby. sha256, title, link_url, width, height (the values from PUT /games/{game_code}/lobby)

Bet size ​

min_bet / max_bet and the site bet limits are compared against a single bet size defined for each table.

Game typeTable bet sizeTable limits key
Banked (Baccarat, Blackjack, Red Dog, etc.)Minimum bet to maximum bet rangemin_bet ~ max_bet
Hold'em, Omaha, Live Hold'emBig blindbb
Speed Hold'emBet amountbet
Tong-itsStakestake
Matgo, Go-StopAmount per pointpoint_value
Seotda, BadugiAnteante

The keys of a table's limits can be seen in GET /tables.

Thumbnails ​

thumbnail is the /thumbs/{game_code}.webp URL under the game client origin. It is a public URL that opens without authentication.

To be agreed

How game thumbnail and icon images are provided (size, format, delivery timing) is agreed upon at contract time. Use the agreed images for your site's game menu, and treat this field as reference only.

Errors ​

Only authentication and common errors apply (Error codes).

GET /currencies ​

GET {API_BASE}/operator/v1/currencies

The currency table used by the platform. All amounts are integers in the currency's minor unit (Conventions), so divide by exponent decimal places when displaying them.

  • All platform currencies are returned. The currencies this operator can use are the enabled currencies registered during onboarding; check them in currencies of GET /settings.
  • The order is not fixed. Look currencies up by code.

Response ​

200 OK

json
{
  "currencies": [
    { "code": "KRW", "exponent": 0, "symbol": "₩" },
    { "code": "USD", "exponent": 2, "symbol": "$" },
    { "code": "PHP", "exponent": 2, "symbol": "₱" }
  ]
}
FieldTypeDescription
codestringCurrency code
exponentintegerNumber of decimal places. The amount 12345 is 123.45 with exponent: 2, and 12345 with 0
symbolstringDisplay symbol

One currency unit = 10^exponent minor units (e.g. for PHP, 100 = ₱1). Amounts sent as settings — such as site bet limits, table limits and rake caps — are accepted only as multiples of one unit (fractional amounts such as ₱10.50 are not allowed).

Errors ​

Only authentication and common errors apply (Error codes).

PUT /games/{game_code}/bet-limits ​

PUT {API_BASE}/operator/v1/games/{game_code}/bet-limits

Sets the site bet limits of a single game, per currency. Intended for admin screens.

Site bet limits are the range that determines which tables are offered to players of this site. Only tables whose bet size falls within the range appear in this site's players' lobby and can be joined. Bet validation within a round uses the table's own limits.

  • One currency is changed per request. Limits for other currencies are left unchanged.
  • Sending both min and max as 0 clears the limits for that currency (no limit).
  • Players already seated continue until they leave their seat. Changes apply only to new entries and the lobby list, and may take up to 30 seconds to take effect.

Path and request fields ​

FieldLocationTypeRequiredDescription
game_codepathstringRequiredA game code enabled for this operator
currencybodystringRequiredOne of the operator's enabled currencies
minbodyintegerLower bound of the bet size (minor units). 0 = no lower bound
maxbodyintegerUpper bound of the bet size (minor units). 0 = no upper bound
  • min and max must be 0 or greater, and if both are greater than 0, min ≤ max must hold.
  • They must be multiples of one currency unit (10^exponent).

Request example ​

http
PUT /operator/v1/games/holdem_nlh/bet-limits HTTP/1.1
Host: {API_HOST}
Content-Type: application/json; charset=utf-8
X-Operator: acme
X-Api-Key: ak_5d2c9e0f7a1b3c4d5e6f708192a3b4c5d6e7f809
X-Timestamp: 1792368067512
X-Nonce: 5e8a1f3c7b9d2e4f6a0b1c2d
X-Signature: 0d9e…(64 hex digits)

{ "currency": "PHP", "min": 1000, "max": 100000 }

Response ​

200 OK — the game's full limits after the change

json
{
  "game_code": "holdem_nlh",
  "bet_limits": {
    "PHP": { "min": 1000, "max": 100000 },
    "USD": { "max": 2000 }
  }
}

Errors ​

HTTPerror.codeCause
400INVALID_REQUESTMalformed JSON, or details.fields: currency (not an enabled currency), min (negative, min > max, or not a multiple of one unit), max (negative, or not a multiple of one unit)
404GAME_NOT_FOUNDThe game is not enabled for this operator

PUT /games/{game_code}/lobby ​

PUT {API_BASE}/operator/v1/games/{game_code}/lobby

Sets how this game is shown in the game lobby (the lobby inside the game client). Intended for admin screens. Once saved, the change applies immediately from the next lobby request.

  • With menu: false, this game is removed from the game list in the game lobby.
  • With tables: false, this game's tables are removed from the table list in the game lobby.
  • If banner is present, a banner is shown above that game's table list. Upload the image first with PUT /lobby-banners and keep the returned sha256.

Send all three values

The request is a full replacement. Omitting menu or tables stores false (hidden), and omitting banner removes the banner. To keep something visible, send true explicitly.

Path and request fields ​

FieldLocationTypeRequiredDescription
game_codepathstringRequiredA game code enabled for this operator
menubodybooleanRequiredtrue = shown in the game list
tablesbodybooleanRequiredtrue = shown in the table list
bannerbodyobject | nullBanner. null means no banner
banner.sha256bodystringRequired (when a banner is present)The value returned by PUT /lobby-banners (64 lowercase hex characters)
banner.titlebodystringBanner description (alt text). Leading and trailing whitespace is trimmed; 200 characters or fewer
banner.link_urlbodystringURL opened when the banner is clicked. An http:// or https:// URL, or empty (no link)
banner.width / banner.heightbodyintegerImage size (pixels). Pass the values from the PUT /lobby-banners response as is. They are clamped to 0–4096 when stored.

Request example ​

json
{
  "menu": true,
  "tables": false,
  "banner": {
    "sha256": "9b2f0c4e6a8d1b3f5e7a9c0b2d4f6e8a1c3e5b7d9f0a2c4e6b8d0f1a3c5e7b9d",
    "title": "Weekend Baccarat Event",
    "link_url": "https://www.acme.example/events/baccarat",
    "width": 1920,
    "height": 480
  }
}

Response ​

200 OK — the saved values (same shape as lobby in GET /games)

json
{
  "game_code": "live_baccarat",
  "lobby": {
    "hide_tables": true,
    "banner": {
      "sha256": "9b2f0c4e6a8d1b3f5e7a9c0b2d4f6e8a1c3e5b7d9f0a2c4e6b8d0f1a3c5e7b9d",
      "title": "Weekend Baccarat Event",
      "link_url": "https://www.acme.example/events/baccarat",
      "width": 1920,
      "height": 480
    }
  }
}

Errors ​

HTTPerror.codeCause
400INVALID_REQUESTMalformed JSON, or details.fields: banner.title (over 200 characters), banner.link_url (not an http(s) URL), banner.sha256 (invalid format)
404BANNER_NOT_FOUNDNo image exists for that sha256 — upload it first with PUT /lobby-banners
404GAME_NOT_FOUNDThe game is not enabled for this operator

PUT /lobby-banners ​

PUT {API_BASE}/operator/v1/lobby-banners

Uploads a game lobby banner image and returns its image ID (sha256). Intended for admin screens. This step only uploads the image; to actually display it, put the returned value in banner of PUT /games/{game_code}/lobby.

  • Uploading the same image again returns the same sha256 (it is stored only once).
  • This endpoint alone has a request body limit of 768KB (other endpoints: 64KB). Because this limit includes the size increase from base64 encoding, prepare original images of 512KB or less.

Request fields ​

FieldTypeRequiredDescription
imagestringRequiredThe image as a base64 string, or a data URL (data:image/png;base64,…)

Image requirements:

  • Format: JPEG, PNG, WebP or GIF (detected from the content)
  • Size: 512KB or less after decoding
  • Width and height: 1–4096 pixels each (recommended: width of 1920 or less)

Request example ​

json
{ "image": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgH…" }

Response ​

200 OK

json
{
  "sha256": "9b2f0c4e6a8d1b3f5e7a9c0b2d4f6e8a1c3e5b7d9f0a2c4e6b8d0f1a3c5e7b9d",
  "width": 1920,
  "height": 480
}
FieldTypeDescription
sha256stringImage ID (SHA-256 of the image content, 64 lowercase hex characters)
width / heightintegerImage size (pixels)

Public URL ​

The game lobby fetches uploaded images from the following URL. It is a public URL that opens without authentication, and since the sha256 changes whenever the content changes, it is cached for one year.

GET {API_BASE}/play/v1/lobby-banners/{sha256}

Upload only images that may be made public

Anyone who knows the sha256 can fetch a banner image, and there is no API to delete an uploaded image. Do not upload images that contain personal information or unreleased content.

Errors ​

HTTPerror.codeCause
400INVALID_REQUESTMalformed JSON
400BAD_IMAGENot base64, unsupported format, over 512KB, or width/height over 4096
401INVALID_SIGNATUREA body truncated for exceeding 768KB also fails as a signature mismatch

Docs v1.0.0 · Operator API v1