Operator integration
API contract
Use the provider endpoints to read the enabled catalog, request launch URLs, and keep each operator inside its assigned title list.
- Base URL
- http://api:8999
- API key
- Configured for server requests
- Operator
- All enabled titles
Authentication
Headers
When PROVIDER_API_KEYS is set on the backend, provider routes require one of these headers. Local development remains open when no key is configured.
x-provider-api-key<provider-api-key>AuthorizationBearer <provider-api-key>x-operator-idoperator-aCatalog
Endpoint list
/api/provider/v1/gamesReturns the operator-scoped live catalog with feature flags, launch paths, and artwork hints.
/api/provider/v1/games/{symbol}Returns one catalog title by symbol or slug after the same operator access checks.
/api/provider/v1/launch-urlCreates or refreshes a player game session and returns the browser launch URL.
/api/provider/v1/operators/{operator_id}/settingsReturns operator status, wallet mode, callback URL, and default currency without exposing the secret.
/api/provider/v1/operators/{operator_id}/settingsUpdates operator wallet settings and rotates the callback shared secret.
{
"success": true,
"data": {
"total": 100,
"operator_id": "operator-a",
"items": [
{
"symbol": "vs20olympgcl",
"slug": "fortuneofolympus",
"title": "Fortune of Olympus",
"features": {
"buy_feature": true,
"special_bet": true
},
"launch_path": "/games/fortuneofolympus"
}
]
}
}Launch URL
Request and response
Send a symbol or slug with the operator id and your player id. The response URL opens the selected game in the browser.
curl.exe -X POST "http://api:8999/api/provider/v1/launch-url" ^
-H "content-type: application/json" ^
-H "x-provider-api-key: <provider-api-key>" ^
-d "{\"symbol\":\"vs20olympgcl\",\"operator_id\":\"operator-a\",\"external_player_id\":\"player-129001\",\"coin\":\"0.10\",\"currency\":\"USD\"}"{
"symbol": "vs20olympgcl",
"slug": "fortuneofolympus",
"operator_id": "operator-a",
"currency": "USD",
"session_id": "session-token",
"launch_url": "http://api:8999/gs2c/html5Game.do?symbol=vs20olympgcl&mgckey=...",
"expires_at": "2026-04-22T04:30:00+00:00",
"success": true,
"data": {
"symbol": "vs20olympgcl",
"launch_url": "http://api:8999/gs2c/html5Game.do?symbol=vs20olympgcl&mgckey=..."
}
}Wallet callbacks
Signed settlement calls
Operators using callback wallet mode receive JSON calls for balance, debit, credit, and rollback. Debit and credit are fail-closed: rejected or unavailable wallet calls block the game action.
{wallet_base_url}/balanceSigned with the operator shared secret using HMAC-SHA256.
{wallet_base_url}/debitSigned with the operator shared secret using HMAC-SHA256.
{wallet_base_url}/creditSigned with the operator shared secret using HMAC-SHA256.
{wallet_base_url}/rollbackSigned with the operator shared secret using HMAC-SHA256.
{
"operator_id": "operator-a",
"player_id": "player-129001",
"session_id": "session-token",
"game_symbol": "vs20olympgcl",
"currency": "USD",
"request_id": "request-id",
"transaction_id": "wallet-transaction-id",
"transaction_type": "debit",
"action_type": "doSpin",
"amount": "2.00"
}x-pp-request-id: request-id
x-pp-timestamp: 1776817800
x-pp-signature: hmac_sha256("{timestamp}.{raw_json_body}")Operator scope
Catalog allowlist
Set PROVIDER_OPERATOR_CATALOGS to restrict each operator to approved symbols or slugs. Catalog and launch-url routes apply the same access check.
PROVIDER_OPERATOR_CATALOGS={"operator-a":["vs20olympgcl","doghouse"]}