Account Info.
Operator identity, access key, and quick profile summary.
-
Your commercial profile, public identifier, and access credentials for launching and managing Prime Mac Games content.
Games
Select a game to manage tables.
Game catalog
Pick a game to manage tables.
How to launch a game
Give your players a seamless handoff from your lobby to the Prime Mac Games client.
- Player signs in on your operator site and selects a game.
- Your server creates a short-lived launchToken and builds the launch URL with your operatorPublicId.
- The browser opens the game client. The client sends launchToken + operatorPublicId to the game server for authorization.
https://{gameClientBaseUrl}/launch.html?game={gameCode}&token={launchToken}&operatorPublicId={operatorPublicId}
Home
Operator revenue and GGR metrics derived from stored game history. For Poker cash games, GGR currently equals rake.
Profit trend
Pot, payout, and revenue movement by day based on completed hand summaries already ingested from the game server.
Margin
Revenue efficiency relative to handled pot volume.
Top 5 performing games
Highest rake/revenue in the selected range.
Lowest 5 earning games
Games with the lowest rake/revenue in the selected range.
API
Configure your operator endpoints, follow the integration flow, and test your APIs directly from the Prime Mac Games dashboard. Use the tabs below to focus on one part at a time.
Operator API endpoints
These endpoints are called by the Prime Mac Games game server to authorize players, read balances, and process wallet actions for Poker.
GET /api/game/operators/public/{operatorPublicId}/openai-api-key
Header: X-Game-Server-Token: {gameServerToken}
{
"openAiApiKey": "sk-...",
"openAiApiKeyLast4": "abcd"
}
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}
- 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.
1. Read your operator Signing Secret from the Prime Mac Games 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))
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"}
Full endpoint = Base URL + relative path Example: https://wallet.operator.com/api/balance/get
Content-Type: application/json
X-Signature: {base64_hmac_sha256}
X-Timestamp: {unix_time_ms_utc}
X-Nonce: {unique_random_value}
X-Provider-Code: GoLetsPlay
{
"launchToken": "GUID"
}
{
"playerId": 2,
"operatorPublicId": "GUID",
"displayName": "player1",
"gameId": 1,
"currencyCode": "PHP",
"languageCode": "en-PH",
"countryCode": "PH",
"balance": 1000.00
}
{
"error": "Invalid or expired launch token."
}
Content-Type: application/json
X-Signature: {base64_hmac_sha256}
X-Timestamp: {unix_time_ms_utc}
X-Nonce: {unique_random_value}
X-Provider-Code: GoLetsPlay
{
"playerId": 1
}
{
"playerId": 1,
"currencyCode": "PHP",
"balance": 1000.00
}
{
"error": "Player not found."
}
Content-Type: application/json
X-Signature: {base64_hmac_sha256}
X-Timestamp: {unix_time_ms_utc}
X-Nonce: {unique_random_value}
X-Provider-Code: GoLetsPlay
{
"playerId": 1,
"gameId": 1,
"roundId": "R-001",
"transactionId": "T-001",
"amount": 10.00,
"currencyCode": "PHP"
}
{
"playerId": 1,
"currencyCode": "PHP",
"balance": 990.00,
"transactionId": "T-001"
}
- amount is the bet/debit amount only and should be positive. - The response balance is the player's balance AFTER the deduction. - Example: starting balance 1000.00, bet amount 10.00, response balance 990.00. - Reject if the wallet does not have enough available balance. - transactionId must be idempotent: same request returns same result, different payload with same transactionId should be rejected.
{
"error": "Insufficient funds."
}
Content-Type: application/json
X-Signature: {base64_hmac_sha256}
X-Timestamp: {unix_time_ms_utc}
X-Nonce: {unique_random_value}
X-Provider-Code: GoLetsPlay
{
"playerId": 1,
"gameId": 1,
"roundId": "M-10021",
"transactionId": "SETTLE-M-10021-P1-0007",
"amount": 25.00,
"currencyCode": "PHP",
"playerActivity": {
"matchId": "M-10021",
"totalHands": 12,
"totalBetsAmount": 5400,
"totalTipsAmount": 30,
"totalWinsAmount": 6200,
"totalLoseAmount": 6000,
"totalRakeAmount": 145,
"netAmount": 25
}
}
{
"playerId": 1,
"currencyCode": "PHP",
"balance": 1015.00,
"transactionId": "SETTLE-M-10021-P1-0007"
}
- amount is the win/payout credit only. It should be positive. - Do not send a negative amount here. - The original bet deduction should already have happened in POST /api/bet/place. - The response balance is the player's balance AFTER the credit. - Example: balance after bet is 990.00, settle amount is 25.00, response balance becomes 1015.00. - If rake applies, the settle amount should already be net of rake before this request is sent. - playerActivity is an audit/detail object for the player's completed match activity. - playerActivity.matchId should be the same value as roundId for poker integration. - playerActivity.netAmount should normally match the top-level amount sent to settle.
{
"error": "Duplicate transaction."
}
Content-Type: application/json
X-Signature: {base64_hmac_sha256}
X-Timestamp: {unix_time_ms_utc}
X-Nonce: {unique_random_value}
X-Provider-Code: GoLetsPlay
{
"playerId": 1,
"gameId": 1,
"roundId": "R-001",
"transactionId": "T-003",
"originalTransactionId": "T-001",
"amount": 10.00
}
{
"playerId": 1,
"currencyCode": "PHP",
"balance": 1000.00,
"transactionId": "T-003"
}
- amount should be positive. - Always send originalTransactionId so your backend can look up the original transaction type. - If the original transaction type is a debit (bet, tip, jackpot contribute), rollback should add the amount back to the wallet. - If the original transaction type is a credit (settle/win, free bet, jackpot payout), rollback should deduct the amount back from the wallet. - In simple terms: rollback should reverse the financial effect of the original transaction. - transactionId for the rollback request itself must also be idempotent.
{
"error": "Transaction not found."
}
Content-Type: application/json
X-Signature: {base64_hmac_sha256}
X-Timestamp: {unix_time_ms_utc}
X-Nonce: {unique_random_value}
X-Provider-Code: GoLetsPlay
{
"playerId": 1,
"gameId": 1,
"roundId": "R-001",
"transactionId": "T-010",
"amount": 5.00,
"currencyCode": "PHP"
}
{
"playerId": 1,
"currencyCode": "PHP",
"balance": 995.00,
"transactionId": "T-010"
}
{
"error": "Insufficient balance."
}
Content-Type: application/json
X-Signature: {base64_hmac_sha256}
X-Timestamp: {unix_time_ms_utc}
X-Nonce: {unique_random_value}
X-Provider-Code: GoLetsPlay
{
"gameId": 1,
"matchId": "match-123",
"handId": "match-123-000001",
"tableId": "table-01",
"amount": 12.50,
"currencyCode": "PHP",
"payloadJson": "{...}"
}
{
"gameRakeEventId": 1001
}
- Do not deduct this amount from the player's wallet in this endpoint. - This endpoint is for record keeping, audit, and revenue tracking only. - The rake should already be accounted for in the game result before settle is sent. - In practice, the settle amount sent to POST /api/bet/settle should already be net of rake.
{
"error": "MatchId is required."
}
Optional endpoints (not required for Poker)
Content-Type: application/json
X-Signature: {base64_hmac_sha256}
X-Timestamp: {unix_time_ms_utc}
X-Nonce: {unique_random_value}
X-Provider-Code: GoLetsPlay
{
"playerId": 1,
"gameId": 1,
"roundId": "R-001"
}
{
"status": "Closed"
}
{
"error": "Session not found."
}
Content-Type: application/json
X-Signature: {base64_hmac_sha256}
X-Timestamp: {unix_time_ms_utc}
X-Nonce: {unique_random_value}
X-Provider-Code: GoLetsPlay
{
"playerId": 1,
"gameId": 1,
"roundId": "R-001",
"transactionId": "T-004",
"amount": 5.00
}
{
"playerId": 1,
"currencyCode": "PHP",
"balance": 1005.00,
"transactionId": "T-004"
}
{
"error": "Bonus is not available."
}
Content-Type: application/json
X-Signature: {base64_hmac_sha256}
X-Timestamp: {unix_time_ms_utc}
X-Nonce: {unique_random_value}
X-Provider-Code: GoLetsPlay
{
"playerId": 1,
"gameId": 1,
"roundId": "R-001",
"transactionId": "T-005",
"amount": 1.00
}
{
"playerId": 1,
"currencyCode": "PHP",
"balance": 999.00,
"transactionId": "T-005"
}
{
"error": "Jackpot pool is closed."
}
Content-Type: application/json
X-Signature: {base64_hmac_sha256}
X-Timestamp: {unix_time_ms_utc}
X-Nonce: {unique_random_value}
X-Provider-Code: GoLetsPlay
{
"playerId": 1,
"gameId": 1,
"roundId": "R-001",
"transactionId": "T-006",
"amount": 100.00
}
{
"playerId": 1,
"currencyCode": "PHP",
"balance": 1099.00,
"transactionId": "T-006"
}
{
"error": "Payout failed."
}
How Prime Mac Games connects to your operator system
Use this step-by-step flow when implementing your operator APIs for Prime Mac Games Poker.
- Save your required operator endpoints above: authorize, balance, bet, settle, rollback, tip, and rake.
- Generate your operator Signing Secret and store it securely on your server only.
- Your player logs in on your operator system and your server issues a short-lived launchToken.
- The game client opens with launchToken and operatorPublicId.
- The Prime Mac Games game server resolves your saved endpoint URLs using operatorPublicId.
- The game server calls your APIs with signed headers: X-Signature, X-Timestamp, X-Nonce, and X-Provider-Code.
- Your operator API validates the request signature and returns JSON responses in the expected format.
sequenceDiagram
autonumber
actor Operator as Game Operator
participant GameServer as Prime Mac Games Server
participant Provider as Prime Mac Games Provider
Operator->>Provider: Save endpoint URLs, Signing Secret,\npoker tables, AI bot setup, VIP room setup
GameServer->>Provider: Resolve operator config by operatorPublicId
Provider-->>GameServer: Endpoints, tables, match sizes,\nAI bot instructions, VIP room settings
GameServer->>Operator: POST /api/player/authorize\nSigned headers + launchToken
Operator-->>GameServer: Player profile, balance,\ncurrencyCode, languageCode, countryCode
loop During gameplay
GameServer->>Operator: Wallet APIs\nbalance, bet/place, bet/settle,\nrollback, tip/place, rake/notify
Operator-->>GameServer: Updated balance / transaction result
end
GameServer->>Provider: Push game history\nmatches, players, hands, events
Provider-->>Operator: Poker history and statistics\nshown in dashboard for audit/reporting
POST /api/player/authorize
{
"launchToken": "GUID"
}
playerId operatorPublicId displayName gameId currencyCode languageCode countryCode balance
POST /api/balance/get POST /api/bet/place POST /api/bet/settle POST /api/bet/rollback POST /api/tip/place POST /api/rake/notify
POST /api/bet/place - amount = positive bet/debit amount - response balance = balance after deduction POST /api/bet/settle - amount = positive win/payout only - do not send negative settle amounts - response balance = balance after credit - bet deduction should already be done in /api/bet/place - playerActivity = per-player match summary/audit payload - playerActivity.matchId should match roundId POST /api/bet/rollback - amount should stay positive - use originalTransactionId to identify what is being reversed - if original type is debit, add amount back - if original type is credit, deduct amount back POST /api/rake/notify - do not deduct player balance here - this is audit/reporting only - settle amount should already be net of rake
{
"playerId": 2,
"operatorPublicId": "GUID",
"displayName": "player1",
"gameId": 1,
"currencyCode": "PHP",
"languageCode": "en-PH",
"countryCode": "PH",
"balance": 1000.00
}
{
"error": "Invalid or expired launch token."
}
{
"error": "Player not found."
}
Test operator API endpoints
Send signed sample requests from this dashboard to your operator API. If the browser blocks the request, allow CORS from the Prime Mac Games dashboard origin on your operator server.
Select an endpoint to preview the resolved URL.
No test request sent yet.
Game history API (audit)
These Prime Mac Games endpoints let operators fetch Poker match history for audit, player support, and reconciliation.
- Copy your Operator Public ID from the Account Info tab.
- Use game id 1 for Poker.
- Call the list endpoint to fetch match summaries.
- Use matchId from the list response to fetch one match detail.
- Use handId from the match detail response to fetch hand events.
- Optionally use playerId to filter history for a single player.
GET /api/portal/operators/{operatorPublicId}/games/1/history?limit=100
Optional filters:
- playerId=PLAYER_ID
- sinceUtc=2026-02-14T00:00:00Z
Paging (cursor):
- beforeUtc=2026-02-14T05:00:00Z&beforeGameMatchId=12345
GET /api/portal/operators/{operatorPublicId}/games/1/history/{matchId}
GET /api/portal/operators/{operatorPublicId}/games/1/history/{matchId}/hands/{handId}?limit=200
Optional:
- sinceUtc=2026-02-14T05:00:00Z
{
"items": [ ... ],
"next": {
"beforeUtc": "2026-02-14T05:00:00Z",
"beforeGameMatchId": 12345
}
}
Test Poker history API
Run the Prime Mac Games Poker history endpoints directly from this dashboard and inspect the JSON response.
No history request sent yet.