Game Detail / Replay Lookup
Use the wager data that VCT pushed to your Agent to request the provider's original wager detail or replay URL. Store betId, hubSessionId, and status from each callback. VCT locates the original record and handles provider-specific lookup differences.
Lookup scope
An Agent can query only its own pushed wagers. VCT matches the authenticated Agent together with bet_id, hub_session_id, and status.
Environment URLs
| Environment | Base URL |
|---|---|
| Production | https://hub-panel-api.v7stech.com |
| Staging | https://hub-panel-api-dev.v7stech.com |
Endpoint
| Property | Value |
|---|---|
| Path | POST /api/partner/v1/gamedetail |
| Auth | Agent Token (Bearer) |
| Content-Type | application/json |
See Authentication for the Authorization header.
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
bet_id | string | Yes | wagers[].bet_id from the callback, or stored betId. |
hub_session_id | string | Yes | wagers[].session_id from the callback, or stored hubSessionId. This is the VCT session ID, not the Agent's internal sessionId. |
status | string | Yes | wagers[].status, such as BET, SETTLED, BONUS, CANCEL, ROLLBACK, REFUND, or VOID. |
round_id | string | No | wagers[].round_id. VCT uses it as a fallback provider query ID when needed. |
request_id | string | No | Your unique request ID for traceability. VCT generates one when omitted. |
The callback-style names betId, hubSessionId, roundId, and requestId are accepted as aliases. Snake_case takes precedence if both forms are supplied.
Request Example
{
"betId": "02537e2ae3e943f68a8e4eabc41f15a4",
"hubSessionId": "7fb2b4fd-09cf-41ed-b24f-9c30ed9c08bb",
"roundId": "wxGPGe3e9cTZNwzRDYyLqa",
"status": "SETTLED",
"requestId": "agent-detail-20261007-001"
}Processing
VCT finds the unique game log for the authenticated Agent, prepares the lookup data, handles provider-specific query rules, and returns a unified result.
Success Response
VCT returns a unified detail response. A successful business response has code: 0.
{
"code": 0,
"message": "success",
"data": {
"url": "https://provider.example/replay/xxxx",
"detail": {
"bet_amount": 0,
"prize_amount": 42.4
}
}
}data.url is present only when the provider supports a replay or detail URL. data.detail is provider-specific and may be empty.
Provider Support Scope
This is the current capability snapshot as of 2026-10-07. It may be used to explain availability, but do not turn it into a permanent client-side rule; the API response is authoritative.
Currently unsupported
Wagers from these providers return UNSUPPORTED_ACTION. Display that detail/replay is unavailable and do not automatically retry:
fachai, sbobet, ct855, ug, afb, fastspin, odin, nextspin, spadegaming, apollogames, ace333, marioclub, vpower, luckysport
fachai: no outbound API exists for lookup by a single wager ID.sbobet: the provider requiresportfolio; the unified GameDetail API does not currently integrate it.- Other providers in the list: VCT does not currently provide GameDetail.
Partial support and retention limits
| Provider | Current limitation | Agent behavior |
|---|---|---|
microgaming | The feature is still under maintenance | Show temporarily unavailable; do not continuously retry |
jdb | Only replay-enabled games; normally requires a positive win except Buy Feature; wagers within 60 days; link valid about 30 days | Preserve the provider error; do not report the wager as missing |
funkygames | Settled wagers from the last three months only | Show unavailable when outside retention |
afbslot | Playback URL for winning wagers only; other wagers may still return detail | Render detail even when url is empty |
759gaming | Replay link valid for about one hour | Do not cache the URL long-term |
rich88 | Replay link valid for about three minutes | Query again when needed; do not cache the URL long-term |
3sing | No data after the event has been closed for more than 14 days | Show unavailable when outside retention |
allbet | Wagers within 90 days only | Show unavailable when outside retention |
metagaming | Gaming Panda game codes 167000–167035 do not support detail | Show unsupported; do not automatically retry |
scr888h5 | Detail URL for winning rounds only; losing rounds may return a provider error | Do not classify a missing URL as a platform outage |
UI guidance
The bet-push payload does not guarantee a provider field that can determine this capability directly. Do not rely only on a hard-coded front-end list to hide the action. The UI may offer a detail lookup and render the result according to code, message, and error.error_code; a confirmed UNSUPPORTED_ACTION result may be cached locally for that record.
Common Errors
Business failures have a non-zero code. Errors may appear in message, error.error_code, and error.error_message. Read all of them and never treat HTTP 200 as business success.
message / error.error_code | Meaning | Automatic retry |
|---|---|---|
err.hub.game_detail_lookup_fields_required | bet_id, hub_session_id, or status is missing | No; fix the request |
err.hub.game_log_not_found | No matching game log exists for this Agent; the log may not have arrived yet | No; allow a later manual lookup |
err.hub.game_log_lookup_ambiguous | Multiple records matched and VCT refuses to guess | No; contact VCT support |
err.hub.game_log_storage_unavailable | VCT game-log storage is temporarily unavailable | Yes; bounded retry |
MISSING_REQUIRED_FIELD | Restored provider lookup data is incomplete | No; record the response and contact VCT support |
INVALID_PROVIDER | The provider is currently unavailable | No; contact VCT support |
UNSUPPORTED_ACTION | This provider or game does not support GameDetail | No; display unsupported |
PROVIDER_API_ERROR | Provider rejection, retention expiry, or no usable replay/detail | No by default; retain the raw response |
| Network error or HTTP 5xx | The request did not complete or the service is temporarily unavailable | Yes; exponential backoff, at most 2–3 attempts |
Not every provider has a replay or detail API. A successful response may therefore have no url; retain the original wager callback for audit purposes.
Coding-Agent Implementation Specification (Copy Ready)
Implement VCT Game Detail / Replay lookup in the current Agent project, including backend, frontend, audit logging, and tests.
Endpoint: POST {VCT_BASE_URL}/api/partner/v1/gamedetail
Content-Type: application/json
Authorization: Bearer {agent_token}, freshly generated by the Agent backend for every request. Never reuse the token or send it to the browser.
Required: bet_id, hub_session_id, status. Optional: round_id, request_id. Camel-case aliases betId, hubSessionId, roundId, and requestId are accepted.
Requirements:
1. Take all lookup fields from the same bet-push wager: bet_id, session_id as hub_session_id, status, and optional round_id.
2. hub_session_id is the VCT session, not the Agent's internal sessionId.
3. Send only the fields defined in this endpoint's request table. Do not add undefined request parameters.
4. Call VCT from the Agent backend only. Generate a new Agent Token with a fresh Unix-second timestamp for every call. API Key, Secret, and Bearer Token must not appear in the browser, frontend bundle, URL, normal logs, or error messages.
5. Business success requires code=0; HTTP 200 alone is not success. On failure read message, error.error_code, and error.error_message.
6. On success: allow data.url only when it uses http/https and open it in a new tab with rel="noopener noreferrer"; render non-empty data.detail as provider JSON. An empty URL can still be a successful detail-only response. If both fields are empty, display that the provider supplied no replay/detail.
7. For UNSUPPORTED_ACTION display that the provider/game does not support detail or replay and do not retry. Do not make the current unsupported-provider list a permanent frontend rule; the API response is authoritative.
8. Do not retry game_log_not_found, game_log_lookup_ambiguous, validation errors, INVALID_PROVIDER, or MISSING_REQUIRED_FIELD. Retry network errors, HTTP 5xx, and game_log_storage_unavailable at most 2–3 times with exponential backoff. Do not retry PROVIDER_API_ERROR by default.
9. Audit request_id, query time, bet_id, hub_session_id, status, HTTP status, business code/message, error_code/error_message, duration, and raw response. Never log the Agent Secret, full Bearer Token, or provider credentials.
10. This feature is strictly read-only and must not modify wallets, wager amounts, settlement/callback state, or game sessions.
11. Reuse the existing HTTP client, authentication service, wager-detail UI, and error components. Do not introduce a second signing, HTTP, or JSON abstraction.
Required tests:
- snake_case and camelCase mapping, with snake_case precedence;
- fresh Token per request and no credential exposure in browser/logs;
- code=0 with URL, detail only, empty URL, and a non-http/https URL;
- missing fields, not found, ambiguity, UNSUPPORTED_ACTION, and PROVIDER_API_ERROR;
- network timeout, HTTP 5xx, and bounded retry count;
- the same bet_id under different hub_session_id/status values cannot select the wrong record;
- the lookup does not write wallet, wager, settlement, or session state.
Definition of done: backend proxy, frontend action, error states, audit logging, and tests are complete. Report changed files, test commands, and results. Do not replace real response parsing with a mocked success path.