Tables and rounds
List tables, enable or disable tables through the API (subject to your plan quota), and read a round result.
Guide: read the integration guide for this area
TIP
Examples are signed with the example key and timestamp from "Authentication & signing", so you can re-check them in the Signature debugger.
Get a round result
GET /api/tenant/v1/rounds/{roundId}
A settled (or voided, or disputed) round: result code, cards, points and correction revision. Rounds that are not settled yet return ROUND_NOT_FOUND.
roundIdis a 26-character upper-case ULID (theroundIdof a bet). A malformed ID returnsNOT_FOUND(unknown endpoint).
Parameter
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
roundId | path | string | yes | Round ID (26-character upper-case ULID). Format: ^[0-9A-Z]{26}$ |
Example request
GET /api/tenant/v1/rounds/01K5Y0B8Z6R2M4N7P9Q3S5T8VW HTTP/1.1
Host: elite.ewin888.com
X-Api-Key: ek_s_1a_XXXXXXXXXXXXXXXX
X-Timestamp: 1790218800
X-Nonce: ex0f611c801aa08d65821fe5
X-Signature: b2e8e4652361cb5569e2db5ce643a7a7f9068baa376bfe7fd41166795049d633Response data
| Field | Type | Description |
|---|---|---|
roundId | string | Round ID (26-character upper-case ULID). Format: ^[0-9A-Z]{26}$ |
tableId | string | Table ID, for example S01 (see GET /tables).Length: 1–… |
shoe | string | Shoe number; for Niu Niu the session. |
round | integer | Round number within the shoe; for Niu Niu within the session. |
status | string | settled; void; disputed (a correction or void arrived outside the guardrails after settlement, so the original result and amounts stand).Values: settled, void, disputed |
code | string | null | Result code (one hexadecimal character for baccarat and dragon tiger; 5 characters for Niu Niu, for example 5893A). |
cardInfo | string | null | Card string (for Niu Niu first card|banker|player 1|player 2|player 3). |
result | BaccaratResult | DragonTigerResult | NiuniuResult | null | Structured result (baccarat, dragon tiger or Niu Niu); null when there is none. |
complete | boolean | null | true when all cards are known; false when the data source only gave the outcome and points (for Niu Niu, each hand's outcome, possibly with its rank). |
rev | integer | Result revision (1 for the first result, +1 per correction; a void also adds 1). |
openedAt | string (date-time) | null | When betting opened. |
settledAt | string (date-time) | null | When the round was first settled. |
Example response
Baccarat: banker wins with 6
{
"ok": true,
"data": {
"roundId": "01K5Y0B8Z6R2M4N7P9Q3S5T8VW",
"tableId": "S01",
"shoe": "260924-03",
"round": 12,
"status": "settled",
"code": "1",
"cardInfo": "122334424000",
"result": {
"cards": {
"P1": "2C",
"B1": "4H",
"P2": "3D",
"B2": "2S",
"P3": "10S"
},
"player": 5,
"banker": 6,
"winner": "B",
"playerPair": false,
"bankerPair": false
},
"complete": true,
"rev": 1,
"openedAt": "2026-09-24T03:00:30.012Z",
"settledAt": "2026-09-24T03:01:20.480Z"
}
}Niu Niu: banker Bull 8, players 1 and 3 win
{
"ok": true,
"data": {
"roundId": "01K65N7Q2W4E6R8T0Y1V3J5K7P",
"tableId": "N01",
"shoe": "260928-01",
"round": 7,
"status": "settled",
"code": "5893A",
"cardInfo": "7H|KS QD 10C 3S 5H|4C 6D JS 9C KH|2D 8S QC AH 2C|7D 3H KD 5C 5D",
"result": {
"cards": {
"F": "7H",
"B-1": "KS",
"B-2": "QD",
"B-3": "10C",
"B-4": "3S",
"B-5": "5H",
"P1-1": "4C",
"P1-2": "6D",
"P1-3": "JS",
"P1-4": "9C",
"P1-5": "KH",
"P2-1": "2D",
"P2-2": "8S",
"P2-3": "QC",
"P2-4": "AH",
"P2-5": "2C",
"P3-1": "7D",
"P3-2": "3H",
"P3-3": "KD",
"P3-4": "5C",
"P3-5": "5D"
},
"hands": {
"B": 8,
"P1": 9,
"P2": 3,
"P3": 10
},
"winners": {
"P1": "P",
"P2": "B",
"P3": "P"
}
},
"complete": true,
"rev": 1,
"openedAt": "2026-09-28T06:30:05.010Z",
"settledAt": "2026-09-28T06:30:51.640Z"
}
}Error codes
| Code | HTTP | Meaning |
|---|---|---|
ROUND_NOT_FOUND | 404 | The round does not exist or is not settled yet. |
NOT_FOUND | 404 | unknown endpoint: no such method and path (for example GET on a POST endpoint, or a round ID that is not a 26-character upper-case ULID). table not found: the table to enable or disable does not exist. |
Every endpoint can also return the common errors (UNAUTHORIZED, IP_NOT_ALLOWED, TENANT_SUSPENDED, RATE_LIMITED, INTERNAL_ERROR…).
List tables
GET /api/tenant/v1/tables
The tables you can choose: platform tables, tables you built yourself, and tables other merchants share with you (with provider; listed only while the platform allows cross-merchant sharing and the provider's share is approved and includes you), plus whether you have enabled each one (enabled). Players only see tables you have enabled.
Example request
GET /api/tenant/v1/tables HTTP/1.1
Host: elite.ewin888.com
X-Api-Key: ek_s_1a_XXXXXXXXXXXXXXXX
X-Timestamp: 1790218800
X-Nonce: exfe6fa2bddbdf8319ac6b88
X-Signature: 8f3157bbe143fb81ed69dd409de7b32bdb5a3cc30b42f18b58e1c880a39b09a3Response data
| Field | Type | Description |
|---|---|---|
tables | Table[] | |
tables[].tableId | string | Table ID, for example S01 (see GET /tables).Length: 1–… |
tables[].game | string | Game: baccarat, dragontiger, holdem (Texas Hold'em) or niuniu (Niu Niu).Values: baccarat, dragontiger, holdem, niuniu |
tables[].variants | string[] | Variants offered at this table. |
tables[].name | map<string, string> | Table name per language, keyed by language code (CHT, CHS, ENG…). |
tables[].status | string | open; maintenance (for example the data source is down).Values: open, maintenance |
tables[].betSeconds | integer | Default betting time in seconds. |
tables[].enabled | boolean | Whether you have enabled this table. |
tables[].provider | object | Only on tables another merchant shares with you (cross-merchant sharing): the provider. Your players use your bet limits and you settle with them as usual; the table counts towards your table count. |
tables[].provider.name | string | Provider name. |
Example response
{
"ok": true,
"data": {
"tables": [
{
"tableId": "S01",
"game": "baccarat",
"variants": [
"classic",
"nocomm"
],
"name": {
"CHT": "模擬百家樂 1",
"CHS": "模拟百家乐 1",
"ENG": "Sim Baccarat 1"
},
"status": "open",
"betSeconds": 20,
"enabled": true
},
{
"tableId": "S03",
"game": "dragontiger",
"variants": [
"classic"
],
"name": {
"CHT": "模擬龍虎",
"CHS": "模拟龙虎",
"ENG": "Sim Dragon Tiger"
},
"status": "open",
"betSeconds": 20,
"enabled": false
},
{
"tableId": "N01",
"game": "niuniu",
"variants": [
"standard"
],
"name": {
"CHT": "模擬牛牛 N01",
"CHS": "模拟牛牛 N01",
"ENG": "Sim Niu Niu N01"
},
"status": "open",
"betSeconds": 15,
"enabled": true
},
{
"tableId": "STUDIO-B1",
"game": "baccarat",
"variants": [
"classic",
"nocomm"
],
"name": {
"CHT": "旗艦攝影棚 B1",
"ENG": "Studio B1"
},
"status": "open",
"betSeconds": 20,
"enabled": true,
"provider": {
"name": "旗艦娛樂"
}
}
]
}
}Error codes
No endpoint-specific error codes.
Every endpoint can also return the common errors (UNAUTHORIZED, IP_NOT_ALLOWED, TENANT_SUSPENDED, RATE_LIMITED, INTERNAL_ERROR…).
Enable a table
POST /api/tenant/v1/tables/enable
Makes the table visible and playable for your players; the same rules as the Console "Table selection" page.
- The free plan can enable up to its quota (2 by default); beyond that you get
QUOTA_EXCEEDED. - The paid plan has no quota and billing starts on the day you enable (USD 100 per table per month, charged daily and pro rata from your prepaid credit).
- A suspended account gets
ACCOUNT_LOCKED. Enabling an already enabled table is not an error.
Request body (application/json)
| Field | Type | Required | Description |
|---|---|---|---|
tableId | string | yes | Table ID, for example S01 (see GET /tables).Length: 1–… |
Example request
POST /api/tenant/v1/tables/enable HTTP/1.1
Host: elite.ewin888.com
X-Api-Key: ek_s_1a_XXXXXXXXXXXXXXXX
X-Timestamp: 1790218800
X-Nonce: exe402a4d70d5b26f9ff7ecb
X-Signature: 4fe5abf3732be5a21a02bc5e38589ee2fec4761489dfcefd4080cc5985be9d6d
Content-Type: application/json
{"tableId":"S01"}Response data
| Field | Type | Description |
|---|---|---|
tableId | string | Table ID, for example S01 (see GET /tables).Length: 1–… |
enabled | boolean | Enabled after the call. |
used | integer | Tables enabled now. |
quota | integer | null | Table quota of your plan; null on the paid plan (no limit). |
Example response
{
"ok": true,
"data": {
"tableId": "S01",
"enabled": true,
"used": 2,
"quota": 2
}
}Error codes
| Code | HTTP | Meaning |
|---|---|---|
INVALID_PARAMETER | 400 | A required field is missing, or a field has the wrong format or value; message names the field. |
NOT_FOUND | 404 | unknown endpoint: no such method and path (for example GET on a POST endpoint, or a round ID that is not a 26-character upper-case ULID). table not found: the table to enable or disable does not exist. |
QUOTA_EXCEEDED | 409 | You have reached the free plan's table quota (2 tables by default). |
ACCOUNT_LOCKED | 409 | The account is suspended or closed, so tables cannot be enabled. |
Every endpoint can also return the common errors (UNAUTHORIZED, IP_NOT_ALLOWED, TENANT_SUSPENDED, RATE_LIMITED, INTERNAL_ERROR…).
Disable a table
POST /api/tenant/v1/tables/disable
Players immediately lose access to the table. On the paid plan the table stops being billed from the next day (the day you disable it still counts).
Request body (application/json)
| Field | Type | Required | Description |
|---|---|---|---|
tableId | string | yes | Table ID, for example S01 (see GET /tables).Length: 1–… |
Example request
POST /api/tenant/v1/tables/disable HTTP/1.1
Host: elite.ewin888.com
X-Api-Key: ek_s_1a_XXXXXXXXXXXXXXXX
X-Timestamp: 1790218800
X-Nonce: ex6856b510b474ee6e5809b2
X-Signature: 4cf44c20f65e287a06f5d8a0a73a4e4144fef2ff5358c344a9cd921899043ffc
Content-Type: application/json
{"tableId":"S01"}Response data
| Field | Type | Description |
|---|---|---|
tableId | string | Table ID, for example S01 (see GET /tables).Length: 1–… |
enabled | boolean | Enabled after the call. |
used | integer | Tables enabled now. |
quota | integer | null | Table quota of your plan; null on the paid plan (no limit). |
Example response
{
"ok": true,
"data": {
"tableId": "S01",
"enabled": false,
"used": 1,
"quota": 2
}
}Error codes
| Code | HTTP | Meaning |
|---|---|---|
INVALID_PARAMETER | 400 | A required field is missing, or a field has the wrong format or value; message names the field. |
NOT_FOUND | 404 | unknown endpoint: no such method and path (for example GET on a POST endpoint, or a round ID that is not a 26-character upper-case ULID). table not found: the table to enable or disable does not exist. |
Every endpoint can also return the common errors (UNAUTHORIZED, IP_NOT_ALLOWED, TENANT_SUSPENDED, RATE_LIMITED, INTERNAL_ERROR…).