Account Info.

Operator identity, access key, and quick profile summary.

Operator Name
-
Display Name
-
Operator ID
-
Operator Public ID
-
Access Key
-
Access key is masked by default. Enter your password to reveal it.

Games

Select a game to manage tables.

Game catalog

Pick a game to manage tables.

No games available yet.

How to launch a game

Give your players a seamless handoff from your lobby to the GoLetsPlay game client.

  1. Player signs in on your operator site and selects a game.
  2. Your server creates a short-lived launchToken and builds the launch URL with your operatorPublicId.
  3. The browser opens the game client. The client sends launchToken + operatorPublicId to the game server for authorization.
Launch URL template
https://{gameClientBaseUrl}/launch.html?game={gameCode}&token={launchToken}&operatorPublicId={operatorPublicId}
Tip: copy the Operator Public ID from the Account Info tab.
Need a dedicated game client base URL? Contact GoLetsPlay support to enable a branded launcher for your domain.

API

Configure your operator endpoints, follow the integration flow, and test your APIs directly from the GoLetsPlay dashboard. Use the tabs below to focus on one part at a time.

Operator API endpoints

These endpoints are called by the GoLetsPlay game server to authorize players, read balances, and process wallet actions for Poker.

Signing Secret
**** **** **** ****
Shared secret used to verify signed requests. Your operator API must validate X-Signature, X-Timestamp, and X-Nonce on every protected request.
OpenAI API Key (AI Bot)
**** **** **** ****
Used by the game server AI bot layer for behavior decisions. Stored encrypted and fetched server-to-server only.
Game server endpoint (OpenAI key)
GET /api/game/operators/public/{operatorPublicId}/openai-api-key
Header: X-Game-Server-Token: {gameServerToken}
Response
{
  "openAiApiKey": "sk-...",
  "openAiApiKeyLast4": "abcd"
}
Signed request format
Required headers:
Content-Type: application/json
X-Signature: {base64_hmac_sha256}
X-Timestamp: {unix_time_ms_utc}
X-Nonce: {unique_random_value}
X-Provider-Code: GoLetsPlay

Signing message:
{timestamp}.{nonce}.{method}.{pathAndQuery}.{rawBody}
Notes
- Validate signature, timestamp window, and nonce replay on every request.
- Keep the signing secret server-to-server only.
- Always use HTTPS between the game server and your operator endpoints.
- Treat X-Signing-Secret as legacy only if you still allow migration fallback.
How to generate X-Signature
1. Read your operator Signing Secret from the GoLetsPlay API page.
2. Build the signing message exactly:
   {timestamp}.{nonce}.{method}.{pathAndQuery}.{rawBody}
3. Compute HMAC-SHA256 using:
   key = Signing Secret
   message = signing message
4. Convert the HMAC output to Base64.
5. Send that Base64 string in the X-Signature header.

Formula:
X-Signature = Base64(HMACSHA256(SigningSecret, signingMessage))
Example
timestamp = 1774453268283
nonce = ed0bcd52fc034671b3f40e8e71ec7080
method = POST
pathAndQuery = /api/player/authorize
rawBody = {"launchToken":"4737c68b-d74c-4677-9165-cea1c8449af9"}

signingMessage =
1774453268283.ed0bcd52fc034671b3f40e8e71ec7080.POST./api/player/authorize.{"launchToken":"4737c68b-d74c-4677-9165-cea1c8449af9"}
Base domain used when the paths below are relative.
Example: https://wallet.operator.com
Usage
Full endpoint = Base URL + relative path
Example: https://wallet.operator.com/api/balance/get
Validate the launch token and return player profile and balance.
Example: POST /api/player/authorize
Headers
Content-Type: application/json
X-Signature: {base64_hmac_sha256}
X-Timestamp: {unix_time_ms_utc}
X-Nonce: {unique_random_value}
X-Provider-Code: GoLetsPlay
Request body
{
  "launchToken": "GUID"
 }
Note: only launchToken is required in the request body.
Success response
{
  "playerId": 2,
  "operatorPublicId": "GUID",
  "displayName": "player1",
  "gameId": 1,
  "currencyCode": "PHP",
  "languageCode": "en-PH",
  "countryCode": "PH",
  "balance": 1000.00
}
Error response
{
  "error": "Invalid or expired launch token."
}
Return player balance and currency.
Example: POST /api/balance/get
Headers
Content-Type: application/json
X-Signature: {base64_hmac_sha256}
X-Timestamp: {unix_time_ms_utc}
X-Nonce: {unique_random_value}
X-Provider-Code: GoLetsPlay
Request body
{
  "playerId": 1
 }
Success response
{
  "playerId": 1,
  "currencyCode": "PHP",
  "balance": 1000.00
}
Error response
{
  "error": "Player not found."
}
Debit a bet amount (idempotent by transactionId).
Example: POST /api/bet/place
Headers
Content-Type: application/json
X-Signature: {base64_hmac_sha256}
X-Timestamp: {unix_time_ms_utc}
X-Nonce: {unique_random_value}
X-Provider-Code: GoLetsPlay
Request body
{
  "playerId": 1,
  "gameId": 1,
  "roundId": "R-001",
  "transactionId": "T-001",
  "amount": 10.00,
  "currencyCode": "PHP"
}
Success response
{
  "playerId": 1,
  "currencyCode": "PHP",
  "balance": 990.00,
  "transactionId": "T-001"
}
Error response
{
  "error": "Insufficient funds."
}
Credit winnings or settle the round.
Example: POST /api/bet/settle
Headers
Content-Type: application/json
X-Signature: {base64_hmac_sha256}
X-Timestamp: {unix_time_ms_utc}
X-Nonce: {unique_random_value}
X-Provider-Code: GoLetsPlay
Request body
{
  "playerId": 1,
  "gameId": 1,
  "roundId": "R-001",
  "transactionId": "T-002",
  "amount": 25.00,
  "currencyCode": "PHP"
}
Success response
{
  "playerId": 1,
  "currencyCode": "PHP",
  "balance": 1015.00,
  "transactionId": "T-002"
}
Error response
{
  "error": "Duplicate transaction."
}
Reverse a previous bet/settle transaction.
Example: POST /api/bet/rollback
Headers
Content-Type: application/json
X-Signature: {base64_hmac_sha256}
X-Timestamp: {unix_time_ms_utc}
X-Nonce: {unique_random_value}
X-Provider-Code: GoLetsPlay
Request body
{
  "playerId": 1,
  "gameId": 1,
  "roundId": "R-001",
  "transactionId": "T-003",
  "originalTransactionId": "T-001",
  "amount": 10.00
}
Success response
{
  "playerId": 1,
  "currencyCode": "PHP",
  "balance": 1000.00,
  "transactionId": "T-003"
}
Error response
{
  "error": "Transaction not found."
}
Deduct a tip amount from the player's wallet.
Example: POST /api/tip/place
Headers
Content-Type: application/json
X-Signature: {base64_hmac_sha256}
X-Timestamp: {unix_time_ms_utc}
X-Nonce: {unique_random_value}
X-Provider-Code: GoLetsPlay
Request body
{
  "playerId": 1,
  "gameId": 1,
  "roundId": "R-001",
  "transactionId": "T-010",
  "amount": 5.00,
  "currencyCode": "PHP"
}
Success response
{
  "playerId": 1,
  "currencyCode": "PHP",
  "balance": 995.00,
  "transactionId": "T-010"
}
Error response
{
  "error": "Insufficient balance."
}
Notify the operator about rake deducted from the pot.
Example: POST /api/rake/notify
Headers
Content-Type: application/json
X-Signature: {base64_hmac_sha256}
X-Timestamp: {unix_time_ms_utc}
X-Nonce: {unique_random_value}
X-Provider-Code: GoLetsPlay
Request body
{
  "gameId": 1,
  "matchId": "match-123",
  "handId": "match-123-000001",
  "tableId": "table-01",
  "amount": 12.50,
  "currencyCode": "PHP",
  "payloadJson": "{...}"
}
Success response
{
  "gameRakeEventId": 1001
}
Error response
{
  "error": "MatchId is required."
}
Optional endpoints (not required for Poker)
Close a session when the game ends.
Example: POST /api/session/close
Headers
Content-Type: application/json
X-Signature: {base64_hmac_sha256}
X-Timestamp: {unix_time_ms_utc}
X-Nonce: {unique_random_value}
X-Provider-Code: GoLetsPlay
Request body
{
  "playerId": 1,
  "gameId": 1,
  "roundId": "R-001"
 }
Success response
{
  "status": "Closed"
 }
Error response
{
  "error": "Session not found."
 }
Redeem bonus/free-bet credits.
Example: POST /api/freebet/redeem
Headers
Content-Type: application/json
X-Signature: {base64_hmac_sha256}
X-Timestamp: {unix_time_ms_utc}
X-Nonce: {unique_random_value}
X-Provider-Code: GoLetsPlay
Request body
{
  "playerId": 1,
  "gameId": 1,
  "roundId": "R-001",
  "transactionId": "T-004",
  "amount": 5.00
 }
Success response
{
  "playerId": 1,
  "currencyCode": "PHP",
  "balance": 1005.00,
  "transactionId": "T-004"
 }
Error response
{
  "error": "Bonus is not available."
 }
Add contributions to a jackpot pool.
Example: POST /api/jackpot/contribute
Headers
Content-Type: application/json
X-Signature: {base64_hmac_sha256}
X-Timestamp: {unix_time_ms_utc}
X-Nonce: {unique_random_value}
X-Provider-Code: GoLetsPlay
Request body
{
  "playerId": 1,
  "gameId": 1,
  "roundId": "R-001",
  "transactionId": "T-005",
  "amount": 1.00
 }
Success response
{
  "playerId": 1,
  "currencyCode": "PHP",
  "balance": 999.00,
  "transactionId": "T-005"
 }
Error response
{
  "error": "Jackpot pool is closed."
 }
Payout a jackpot winner and finalize the round.
Example: POST /api/jackpot/payout
Headers
Content-Type: application/json
X-Signature: {base64_hmac_sha256}
X-Timestamp: {unix_time_ms_utc}
X-Nonce: {unique_random_value}
X-Provider-Code: GoLetsPlay
Request body
{
  "playerId": 1,
  "gameId": 1,
  "roundId": "R-001",
  "transactionId": "T-006",
  "amount": 100.00
 }
Success response
{
  "playerId": 1,
  "currencyCode": "PHP",
  "balance": 1099.00,
  "transactionId": "T-006"
 }
Error response
{
  "error": "Payout failed."
 }