Skip to content

Game List Query ​

Query the list of active games authorized for the current Agent.

Environment URLs ​

EnvironmentBase URL
Productionhttps://hub-panel-api.v7stech.com
Staginghttps://hub-panel-api-dev.v7stech.com

API Information ​

PropertyValue
PathPOST /papi/v1/game/list
AuthenticationAgent Token (Bearer)
Content-Typeapplication/x-www-form-urlencoded

Request Headers ​

HeaderValueRequired
AuthorizationBearer {agent_token}✅ Yes

Request Parameters ​

ParameterTypeRequiredDescription
brand_guidstringNoHub Brand GUID; recommended for exact Brand filtering
brandstringNoSearch the current Brand Code or Name; may match several Brands
game_genreinteger (numeric form text)No2 Slot, 3 Fish, 4 Sport, 5 Card, 6 Live, 7 Other; the old game_type / category filters are retired
currencystringNoSettlement currency code; returns games supported and enabled for the current Agent (use all or ALL for no single-currency filter)
pageintNoPage number, default 1
pageSizeintNoPage size, default 10, maximum 100

Request Example ​

bash
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) ​

text
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 ​

FieldTypeDescription
listarrayList of game objects
totalintTotal count
pageintCurrent page
pageSizeintPage size

list[Item] Fields ​

FieldTypeDescription
idstringGame GUID
namestringGame name
codestringGame code
game_genreintegerNumeric genre; unclassified / unknown values return 0
game_genre_namestringDisplay name from 2 Slot, 3 Fish, 4 Sport, 5 Card, 6 Live, 7 Other; otherwise empty
currencystringSettlement currency code
brand_guidstringUnique Hub Brand GUID; use for relations and selector values
brand_codestringCurrent Hub Brand Code; not unique across Brands
brand_namestringCurrent Hub Brand Name; display only
imagestringGame image URL
is_maintenancebooleanWhether 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 ALL game's currency and prevents launching with it.
  • If an ALL game is absent, verify that at least one currency passes every authorization check. currency=all/ALL only removes the single-currency filter; it never bypasses authorization.
  • Launch only with an actual currency returned by the game list. Do not send ALL as /game/launch currency.

Successful Response ​

json
{
  "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 ​

json
{
  "status": false,
  "code": 7,
  "data": {},
  "msg": "operator_code mismatch"
}

VCT Gaming Integration Platform