Game List Query
Query the list of active games authorized for the current Agent.
Environment URLs
| Environment | Base URL |
|---|---|
| Production | https://hub-panel-api.v7stech.com |
| Staging | https://hub-panel-api-dev.v7stech.com |
API Information
| Property | Value |
|---|---|
| Path | POST /papi/v1/game/list |
| Authentication | Agent Token (Bearer) |
| Content-Type | application/x-www-form-urlencoded |
Request Headers
| Header | Value | Required |
|---|---|---|
Authorization | Bearer {agent_token} | ✅ Yes |
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
brand_guid | string | No | Hub Brand GUID; recommended for exact Brand filtering |
brand | string | No | Search the current Brand Code or Name; may match several Brands |
game_genre | integer (numeric form text) | No | 2 Slot, 3 Fish, 4 Sport, 5 Card, 6 Live, 7 Other; the old game_type / category filters are retired |
currency | string | No | Settlement currency code; returns games supported and enabled for the current Agent (use all or ALL for no single-currency filter) |
page | int | No | Page number, default 1 |
pageSize | int | No | Page size, default 10, maximum 100 |
Request Example
curl -X POST https://api.example.com/papi/v1/game/list \
-H "Authorization: Bearer {agent_token}" \
-d "brand_guid=30ff77f5-0616-4ecc-a8a3-80e35fcaaf3e&game_genre=2&page=1&pageSize=20"AI Implementation Prompt (Copy Ready)
Update the existing Agent project's VCT game catalogue integration. Reuse the HTTP client, server-side Agent Token logic, pagination, and error handling.
Endpoints: POST {VCT_BASE_URL}/papi/v1/game/providers and POST {VCT_BASE_URL}/papi/v1/game/list.
Use application/x-www-form-urlencoded and Authorization: Bearer {agent_token}.
1. Store brand_guid, brand_code, and brand_name from both providers.data and game/list.data.list. providers.data also returns the Brand image field logo_url. Neither catalogue response includes brand; do not require or read that response field. Read the Brand metadata from Hub instead of deriving identity from Product Name.
2. Use the Hub brand_guid as the unique Brand key, cache key, relation, and selector value. Keep different GUIDs separate even when Code and Name are identical. Display brand_name with brand_code. Use logo_url only for display, never as identity or a cache key; show a placeholder when it is empty.
3. Filter game/list with brand_guid. Use numeric game_genre for genre filtering; retain currency and pagination. page defaults to 1; pageSize defaults to 10 and is capped at 100. Fetch all pages according to data.total for bulk imports.
4. Keep the returned game id as game_id for storage and launch. brand_guid is not game_id. currency may contain comma-separated actual currencies. ALL or an omitted request currency removes only the single-currency filter; never launch with ALL.
5. Require HTTP success, code=0, and status not false. Empty arrays are valid. Preserve existing maintenance, image, currency, category, and stale-request handling.
6. Preserve historical transactions and relationships. Backfill GUIDs only when the old mapping is unambiguous; report ambiguous rows. Never merge or guess by Name or Code alone. If the deployed API lacks brand_guid, report the required backend upgrade and stop migration without deleting existing data or falling back to name-based merging.
7. The bet-push callback also includes brand_guid, brand_code, and brand_name; relate wagers to the catalogue using brand_guid. game/rates also accepts exact brand_guid filters and returns the same three Brand fields. Use GUID across rates, catalogue, and wagers; preserve historical billing and calculation rules.
8. Test identical Code/Name with distinct GUIDs, GUID filtering, field consistency, rename stability, complete pagination, empty results, missing new fields, and migration ambiguity. Keep credentials and full tokens out of the browser and ordinary logs.
Deliver the smallest complete change, tests, and migration notes, listing modified files and mappings needing human review.Brand Identity and Migration
Both endpoints resolve brand_code and brand_name from Hub Brand master data using the stored brand_guid; /game/providers also returns logo_url. Neither response includes the duplicate brand field. Use brand_code for the code and brand_name for the name. Code and Name can repeat across sources, so use brand_guid as the unique key and names only for display. logo_url is display-only, may be empty, and may change when Operations replaces the image.
/game/providers keeps different Brand GUIDs separate even when Code and Name match. Pass the selected brand_guid unchanged to /game/list. The legacy brand filter searches the current Code or Name and can match multiple Brands. Missing or deleted Brands and empty Brand Codes are omitted.
Deploy the updated Hub backend before using this contract. If an older response lacks brand_guid, report the required upgrade and pause migration instead of merging by name. Backfill old relationships only when uniquely resolved; preserve historical transactions and report ambiguous mappings for review.
The Bet Push callback uses the same Brand GUID for wager attribution. Game Rates also accepts the same brand_guid for exact filtering and relationships.
Response Fields
Data Fields
| Field | Type | Description |
|---|---|---|
list | array | List of game objects |
total | int | Total count |
page | int | Current page |
pageSize | int | Page size |
list[Item] Fields
| Field | Type | Description |
|---|---|---|
id | string | Game GUID |
name | string | Game name |
code | string | Game code |
game_genre | integer | Numeric genre; unclassified / unknown values return 0 |
game_genre_name | string | Display name from 2 Slot, 3 Fish, 4 Sport, 5 Card, 6 Live, 7 Other; otherwise empty |
currency | string | Settlement currency code |
brand_guid | string | Unique Hub Brand GUID; use for relations and selector values |
brand_code | string | Current Hub Brand Code; not unique across Brands |
brand_name | string | Current Hub Brand Name; display only |
image | string | Game image URL |
is_maintenance | boolean | Whether the game is in maintenance |
Currency and ALL Game Rules
currency=ALL in provider master data is a marker resolved by Hub's global currency allowlist. It is not a launchable currency and is never returned to the Agent unchanged. Hub replaces it with the actual currencies that are globally enabled and also pass game/Brand support, Agent currency access, and commission authorization. The response currency is that final launchable list.
- Disabling a currency in Currency Management removes it from an
ALLgame'scurrencyand prevents launching with it. - If an
ALLgame is absent, verify that at least one currency passes every authorization check.currency=all/ALLonly removes the single-currency filter; it never bypasses authorization. - Launch only with an actual currency returned by the game list. Do not send
ALLas/game/launchcurrency.
Successful Response
{
"status": true,
"code": 0,
"data": {
"list": [
{
"id": "210889a00fc2472992eb040d10d4527f",
"name": "10 Sparkling Crown",
"code": "526",
"game_genre": 2,
"game_genre_name": "Slot",
"currency": "IDR",
"brand_guid": "example-ja-brand-guid",
"brand_code": "JA",
"brand_name": "JA",
"image": "https://images.gscplusmd.com/statics/staging/publics/images/games/1/1091/SLOT/526.png",
"is_maintenance": false
}
],
"total": 1,
"page": 1,
"pageSize": 20
},
"msg": "获取成功"
}Error Response
{
"status": false,
"code": 7,
"data": {},
"msg": "operator_code mismatch"
}