REST API

This document provides comprehensive documentation for all REST API endpoints in the Poker Engine platform.

Base URL: /api/v1 (paths below omit this prefix). Exceptions: /health and /metrics are also served at the root, and the wallet callback is under /api/wallet/v1.

Total Endpoints: 899

The Auth column in route tables uses: Public (no login), Optional (login enriches the response), User (any logged-in user), Agent (agent account with the relevant agent permission), Developer key (partner API key with request signature), Admin and Super admin (permission level a1 and a; per-feature levels can be overridden by the user group). toggle names a feature toggle that must be enabled.

Table of Contents

  1. Authentication
  2. Response Format
  3. Error Codes
  4. Auth Routes
  5. Health Routes
  6. Metrics Routes
  7. Analytics Routes
  8. Lobby Routes
  9. Private Games Routes
  10. Tournament Routes
  11. Cashier Routes
  12. User Routes
  13. Account Routes
  14. Statistics and Leaderboard Routes
  15. Config, Pages and App Routes
  16. Tickets and Devices Routes
  17. Agent Routes
  18. Developer Routes
  19. Webhook Routes
  20. Wallet Routes
  21. Debug Routes
  22. Admin Routes
  23. Rate Limiting

Authentication

Most endpoints require JWT authentication. Browser clients normally authenticate with HttpOnly access_token and refresh_token cookies set by the auth routes. The cookie is checked first; API clients may instead send the access token in the Authorization header:

Authorization: Bearer <access_token>

Token Lifecycle

  1. Login → Receive HttpOnly access_token and refresh_token cookies
  2. Access Token → Valid for 15 minutes
  3. Refresh Token → Valid for 1 day
  4. Refresh → Use the refresh cookie or request body refresh token to rotate cookies before expiry

Native clients that send X-Auth-Client: mobile receive tokens in the response body instead of relying on cookies.

CSRF

State-changing requests authenticated by cookie require a CSRF token, obtained from GET /auth/csrf-token and sent in the X-CSRF-Token header. Requests authenticated with a verified Authorization header are exempt.

Permission Levels

LevelDescription
aSuper Admin – Full access
a1Admin – Administrative access
bModerator
c, d, e, fNon-admin levels, in descending order

Response Format

Success Response

{
  "success": true,
  "data": {
    // Response payload
  }
}

Paginated Response

Paginated list shapes vary by route. Lobby lists return the fields flat:

{
  "success": true,
  "data": {
    "items": [],
    "total": 150,
    "page": 1,
    "limit": 20,
    "totalPages": 8
  }
}

Error Response

{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Human readable error message",
    "details": {
      "field": ["error message"]
    }
  }
}

Error Codes

CodeHTTP StatusDescription
VALIDATION_ERROR400Invalid request parameters
INSUFFICIENT_FUNDS400Not enough funds
AUTHENTICATION_ERROR401Missing or invalid authentication
AUTHORIZATION_ERROR403Insufficient permissions or disabled feature
FEATURE_TIER_RESTRICTED403Feature not included in the current license plan
NOT_FOUND404Resource not found
CONFLICT409Resource already exists
RATE_LIMIT_EXCEEDED429Too many requests
INTERNAL_ERROR500Server error
GAME_INTEGRITY_ERROR500Game integrity check failed

Routes also return route-specific codes, for example INVALID_TEMP_TOKEN on POST /auth/verify-2fa.

Auth Routes

Base path: /api/v1/auth

POST /auth/register

Register a new user account.

Request Body:

{
  "username": "string (3-30 chars: letters, digits, _ or -)",
  "email": "string (valid email)",
  "password": "string (12-128 chars; lower, upper, digit, symbol)",
  "firstName": "string (optional)",
  "lastName": "string (optional)",
  "referralCode": "string (optional)"
}

Response:

{
  "success": true,
  "data": {
    "message": "If the provided details are valid, a verification email has been sent."
  }
}

POST /auth/login

Authenticate and receive auth cookies. Accounts with 2FA receive requires2FA and tempToken instead; complete with POST /auth/verify-2fa.

Request Body:

{
  "username": "string",
  "password": "string"
}

Response:

{
  "success": true,
  "data": {
    "user": { /* SafeUser object */ },
    "expiresIn": 900
  }
}

POST /auth/refresh

Refresh auth cookies using a refresh token from the request body or the HttpOnly refresh cookie.

Request Body:

{
  "refreshToken": "string"
}

Response:

{
  "success": true,
  "data": {
    "expiresIn": 900
  }
}

POST /auth/forgot-password

Request password reset email.

Request Body:

{
  "email": "string"
}

Response:

{
  "success": true,
  "data": {
    "message": "If an account with that email exists, a password reset link has been sent"
  }
}

POST /auth/reset-password

Reset password using token from email.

Request Body:

{
  "token": "string",
  "password": "string (12-128 chars; lower, upper, digit, symbol)"
}

POST /auth/verify-email

Verify email address using token.

Request Body:

{
  "token": "string"
}

POST /auth/resend-verification

Resend email verification link.

Request Body:

{
  "email": "string"
}

Other Auth Routes

MethodPathAuthDescription
GET/auth/csrf-tokenUserGet a CSRF token
POST/auth/exchangePublic; toggle developerApiExchange a developer SSO login code for a full session
GET/auth/ip-bindingUserGet current IP binding settings for the authenticated user
PUT/auth/ip-bindingUserUpdate IP binding settings for the authenticated user
POST/auth/logoutOptionalLog out the current session
GET/auth/meUserGet current user profile
GET/auth/me/featuresUserGet the current user’s effective admin features
GET/auth/providersPublicReturns the list of enabled authentication providers
POST/auth/revoke-allUserRevoke all refresh tokens and sessions for the authenticated user
DELETE/auth/sessionsUserRevoke all sessions except the current one
GET/auth/sessionsUserList all active sessions for the authenticated user
DELETE/auth/sessions/:idUserRevoke a specific session
POST/auth/verify-2faPublicComplete login for users with 2FA enabled by verifying their TOTP token or backup code

POST /auth/verify-2fa body: tempToken, plus exactly one of token or backupCode.

POST /auth/exchange body: code (64-character hex).

Health Routes

Base path: /api/v1/health

GET /health

Service status. Non-admin callers get a compact payload; admin callers also get component checks in data, migration, and license failure details.

Response:

{
  "status": "ok",
  "version": "string",
  "maintenance": false,
  "liveMigrationEnabled": false,
  "draining": false,
  "activeHands": 0,
  "drainDeadlineAt": null,
  "license": {
    "status": "string",
    "lastChecked": "2024-01-15T10:30:00.000Z"
  }
}

status is ok, degraded or unhealthy.

Status Codes:

  • 200 – Healthy or degraded
  • 503 – Unhealthy

GET /health/live

Kubernetes liveness probe. Checks if process is running.

Response:

{
  "success": true,
  "data": {
    "status": "alive",
    "timestamp": "2024-01-15T10:30:00Z"
  }
}

GET /health/ready

Kubernetes readiness probe. Returns 503 while the database is unavailable, the license is not_configured, or the instance is draining.

Response:

{
  "success": true,
  "data": {
    "status": "ready",
    "timestamp": "2024-01-15T10:30:00Z",
    "checks": { "database": true },
    "draining": false,
    "drainDeadlineAt": null
  }
}

Status Codes:

  • 200 – Ready
  • 503 – Not ready

Other Health Routes

MethodPathAuthDescription
GET/health/circuitsOptionalCircuit breaker states for all registered circuits

All routes above are also available under /api/v1/health.

Metrics Routes

Base path: /metrics

All routes require Admin (a1) unless listed otherwise under Other Metrics Routes.

GET /metrics

Full performance statistics for the last hour, including memory.current and memory.peak in MB (heapUsedMB, heapTotalMB, rssMB, externalMB).

GET /metrics/summary

Compact performance summary.

GET /metrics/memory

Memory usage history for charts.

Response:

{
  "success": true,
  "data": {
    "snapshots": [
      { "timestamp": 1705314000000, "heapUsedMB": 256, "heapTotalMB": 512, "rssMB": 600 }
    ],
    "count": 1
  }
}

GET /metrics/slow

Recent slow requests.

Query Parameters:

ParameterTypeDefaultDescription
thresholdnumber1000Latency threshold in ms
limitnumber20Max results (max: 100)

GET /metrics/routes

Per-route statistics sorted by request count.

GET /metrics/timers

Custom timer stats (database, game operations).

POST /metrics/reset

Reset all metrics. Admin only.

Other Metrics Routes

MethodPathAuthDescription
GET/metrics/load-probePublicServer-side load probe (non-production)
GET/metrics/prometheusPublicPrometheus exposition; requires Authorization: Bearer <metrics scrape token>, returns 404 when no token is configured
POST/metrics/web-vitalsPublicReport web-vitals samples
GET/metrics/web-vitals/configPublicGet web-vitals client config

Analytics Routes

Base path: /api/v1/analytics

All routes require Admin (a1).

GET /analytics

Full game statistics overview.

Query Parameters:

ParameterTypeDefaultDescription
hoursnumber24Time range in hours (max: 2160)

GET /analytics/summary

Compact game statistics summary (24h).

GET /analytics/daily

Daily statistics breakdown.

Query Parameters:

ParameterTypeDefaultDescription
daysnumber7Number of days (max: 90)

GET /analytics/hourly

Hourly breakdown for last 24 hours.

GET /analytics/tables

Per-table statistics.

Query Parameters:

ParameterTypeDefaultDescription
sortBystringhandsPlayedhandsPlayed, rake, players
limitnumber20Max results (max: 100)

GET /analytics/tables/:tableId

Statistics for a specific table.

GET /analytics/leaderboard

Player rankings.

Query Parameters:

ParameterTypeDefaultDescription
metricstringhandsPlayedhandsPlayed, totalWon, totalWagered, totalRake
limitnumber20Max results (max: 100)

GET /analytics/hands

Recent hands history.

Query Parameters:

ParameterTypeDefaultDescription
tableIdstring–Filter by table
limitnumber50Max results (max: 200)

GET /analytics/tournaments

Tournament statistics.

POST /analytics/reset

Reset all analytics data. Admin only.

Other Analytics Routes

MethodPathAuthDescription
GET/analytics/managersAdminPer-manager rake breakdown for top-level manager player trees

GET /analytics/managers accepts days (default 7, max 90).

Lobby Routes

Base path: /api/v1/lobby

GET /lobby/tables

List all public tables with filtering, sorting, and pagination.

Query Parameters:

ParameterTypeDefaultDescription
modestring–REAL_MONEY, VIRTUAL_CHIPS, TOURNAMENT
typestring–PUBLIC, PRIVATE
minSmallBlindnumber–Minimum small blind
maxSmallBlindnumber–Maximum small blind
minBigBlindnumber–Minimum big blind
maxBigBlindnumber–Maximum big blind
gameStatestring–GameState enum value
hasAvailableSeatsboolean–Filter by seat availability
minPlayersnumber–Minimum current players
maxPlayersnumber–Maximum current players
sortBystringnamename, smallBlind, bigBlind, playerCount, maxPlayers
sortDirstringascasc, desc
pagenumber1Page number (1-indexed)
limitnumber20Results per page (max: 100)

Response: a paginated result (items, total, page, limit, totalPages) of table objects:

{
  "id": "uuid",
  "name": "High Rollers",
  "mode": "REAL_MONEY",
  "type": "PUBLIC",
  "maxPlayers": 9,
  "playerCount": 6,
  "smallBlind": 50,
  "bigBlind": 100,
  "minBuyIn": 2000,
  "maxBuyIn": 10000,
  "isPrivate": false,
  "gameState": "PLAYING",
  "gameType": "TEXAS_HOLDEM",
  "availableSeats": 3
}

GET /lobby/tables/search

Search tables by name. Also accepts the filter and pagination parameters of GET /lobby/tables.

Query Parameters:

ParameterTypeRequiredDescription
qstringYesSearch query

GET /lobby/tables/:tableId

Get a table object as returned by GET /lobby/tables.

GET /lobby/tables/:tableId/players

Get seated players at table.

GET /lobby/tables/:tableId/seats

Get available seats at table.

POST /lobby/tables

Create a new table. Admin only.

Request Body:

{
  "name": "string (required)",
  "mode": "REAL_MONEY | VIRTUAL_CHIPS",
  "type": "PUBLIC | PRIVATE",
  "password": "string (required if type=PRIVATE)",
  "maxPlayers": "number (2-10)",
  "smallBlind": "number (>0)",
  "bigBlind": "number (>=smallBlind)",
  "minBuyIn": "number (>0)",
  "maxBuyIn": "number (>=minBuyIn)",
  "ante": "number (optional)",
  "gameType": "string (optional)",
  "rakePercent": "number (optional, 0-100)",
  "rakeCap": "number (optional)",
  "bettingLimit": "string (optional)",
  "ruleProfileId": "string (optional)",
  "ruleProfileVersion": "number (optional)"
}

GET /lobby/stats

Get lobby statistics.

Response:

{
  "success": true,
  "data": {
    "totalTables": 25,
    "totalPlayers": 87,
    "publicTables": 20,
    "privateTables": 5,
    "activeGames": 12
  }
}

Other Lobby Routes

MethodPathAuthDescription
GET/lobby/tables/:tableId/stylePublicGet the visual style for a table (public, no auth required)

Private Games Routes

Base path: /api/v1/private-games

Authentication: All routes require a logged-in user and the privateGames feature toggle.

POST /private-games/tables

Create a new private table.

Request Body:

{
  "name": "string",
  "password": "string (min 4 chars)",
  "mode": "REAL_MONEY | VIRTUAL_CHIPS (optional)",
  "maxPlayers": "number (2-10)",
  "smallBlind": "number (>0)",
  "bigBlind": "number (>=smallBlind)",
  "minBuyIn": "number (>0)",
  "maxBuyIn": "number (>=minBuyIn)",
  "ante": "number (optional)",
  "gameType": "string (optional)",
  "styleId": "string (optional)",
  "mixedGameConfig": "object (optional)",
  "ruleProfileId": "string (optional)",
  "ruleProfileVersion": "number (optional)"
}

Response:

{
  "success": true,
  "data": {
    "tableId": "string",
    "inviteCode": "ABC123XY"
  }
}

POST /private-games/tables/join

Join a private table with password. Seating and buy-in happen over WebSocket (join_table).

Request Body:

{
  "tableIdOrCode": "string (table ID or invite code)",
  "password": "string"
}

Response: { "success": true, "data": { "tableId": "string" } }

GET /private-games/tables

List user’s private tables.

Query Parameters:

ParameterTypeDefaultDescription
createdOnlybooleanfalseOnly return tables created by user

GET /private-games/tables/:tableId

Get private table details.

GET /private-games/tables/:tableId/invite-code

Get invite code. Creator only.

Response:

{
  "success": true,
  "data": {
    "inviteCode": "ABC123XY"
  }
}

DELETE /private-games/tables/:tableId

Delete private table. Creator only.

Other Private Games Routes

MethodPathAuthDescription
POST/private-games/tables/:tableId/invite-tokenUser; toggle privateGamesCreate a short-lived direct-join token (creator only)
POST/private-games/tables/invite-token/consumeUser; toggle privateGamesConsume a short-lived direct-join token
GET/private-games/tables/lookup/:codeUser; toggle privateGamesLook up a private table by invite code for preview before joining

Tournament Routes

Base path: /api/v1/lobby/tournaments

MethodPathAuthDescription
GET/lobby/tournamentsPublic; toggle tournamentsList tournaments
GET/lobby/tournaments/:tournamentIdOptional; toggle tournamentsGet details of a specific tournament
POST/lobby/tournaments/:tournamentId/addonUser; toggle tournamentsProcess an add-on for the authenticated user in a tournament
GET/lobby/tournaments/:tournamentId/entry-optionsUser; toggle tournamentsGet authenticated player eligibility for late registration, rebuy, add-on, and re-entry actions
POST/lobby/tournaments/:tournamentId/rebuyUser; toggle tournamentsProcess a rebuy for the authenticated user in a tournament
POST/lobby/tournaments/:tournamentId/reentryUser; toggle tournamentsProcess a re-entry for the authenticated user in a tournament
POST/lobby/tournaments/:tournamentId/registerUser; toggle tournamentsRegister the authenticated user for a tournament
GET/lobby/tournaments/:tournamentId/standingsUser; toggle tournamentsGet real-time tournament standings (remaining + eliminated players)
POST/lobby/tournaments/:tournamentId/unregisterUser; toggle tournamentsUnregister the authenticated user from a tournament

Cashier Routes

Base path: /api/v1/cashier

MethodPathAuthDescription
GET/cashier/balanceUser; toggle cashierGet user balance
POST/cashier/convertUser; toggle cashierConvert between currencies
GET/cashier/convert/previewUser; toggle cashierPreview a currency conversion
GET/cashier/crypto-address/:currencyUser; toggle cashierGet or create a crypto deposit address
GET/cashier/currency-packagesUser; toggle cashierList currency packages
POST/cashier/depositUser; toggle cashierInitiate a deposit
GET/cashier/payment-methodsUser; toggle cashierReturns available deposit and withdrawal methods based on configured payment systems
POST/cashier/redeem-couponUser; toggle cashierRedeem a coupon code
GET/cashier/statusUser; toggle cashierReturns cashier status flags (e.g
POST/cashier/transferUser; toggle cashierTransfer funds to another user
GET/cashier/verificationUser; toggle cashierGet verification status
POST/cashier/verificationUser; toggle cashierSubmit verification documents
GET/cashier/walletsUser; toggle cashierList the user’s wallets
POST/cashier/withdrawUser; toggle cashierRequest a withdrawal
POST/cashier/withdraw/:transactionId/cancelUser; toggle cashierCancel a pending withdrawal owned by the authenticated user

User Routes

Base path: /api/v1/user

MethodPathAuthDescription
POST/user/2fa/disableUserDisable 2FA on the user’s account after verifying their token
POST/user/2fa/enableUserConfirm and enable 2FA after verifying the token from authenticator app
POST/user/2fa/setupUserInitiate 2FA setup – generates a new TOTP secret and QR code
GET/user/affiliateUserGet affiliate dashboard data for the current user
GET/user/affiliate/leaderboardUserGet affiliate leaderboard
GET/user/affiliate/networkUserGet affiliate network overview (downline summary)
GET/user/affiliate/performanceUserGet affiliate performance history over time
GET/user/affiliate/referralsUserGet list of referred users (paginated)
GET/user/affiliate/rewardsUserGet affiliate rewards/earnings (paginated)
GET/user/agent/playersUserGet list of players assigned to the current agent (paginated)
GET/user/agent/statsUserGet agent statistics for the current user
POST/user/agent/transferAgentTransfer funds from agent balance to an assigned player
POST/user/avatarUserUpload avatar image
GET/user/bonusesUserGet available bonuses for the current user
GET/user/bonuses/historyUserGet bonus credit history for the current user
GET/user/bonuses/wagering-progressUserGet wagering progress for the current user’s active bonuses
POST/user/change-passwordUserChange password (requires current password verification)
GET/user/handsUserGet current user’s hand history (paginated)
GET/user/hands/:gameIdUserGet full details of a specific hand
GET/user/hands/:gameId/replayUserGet full replay data for a specific hand
GET/user/hands/replaysUserGet current user’s hand replays (paginated list)
GET/user/poker-sessionsUserGet paginated list of player poker sessions with filters
GET/user/poker-sessions/:idUserGet detailed player session information with calculated stats
GET/user/poker-sessions/statsUserGet aggregate statistics across all player sessions
GET/user/profileUserReturn current user’s profile
PATCH/user/profileUserUpdate display name (firstName/lastName only)
GET/user/sessionsUserGet current user’s table session history (paginated)
GET/user/settingsUserGet current user’s settings
PATCH/user/settingsUserUpdate current user’s settings (partial update)
POST/user/settings/resetUserReset current user’s settings to defaults
GET/user/statsUserGet current user’s gameplay statistics
GET/user/transactionsUserGet current user’s transaction history
POST/user/virtual-balance/replenishUserReplenish virtual balance when it falls below threshold

Account Routes

Base path: /api/v1/account

MethodPathAuthDescription
DELETE/account/delete-requestUserCancel a pending account deletion request
GET/account/delete-requestUserGet the status of any pending account deletion request
POST/account/delete-requestUserInitiate account deletion with 30-day waiting period
GET/account/exportUserExport all user data for GDPR compliance
GET/account/protectionUserGet responsible-gaming protection settings
POST/account/protection/cool-offUserStart a cool-off period
POST/account/protection/exclusionUserStart a self-exclusion
PUT/account/protection/limitsUserSet protection limits

Statistics and Leaderboard Routes

Base paths: /api/v1/statistics, /api/v1/leaderboard

MethodPathAuthDescription
GET/leaderboardPublicGet leaderboard with optional game variant filter
GET/leaderboard/game-typesPublicGet list of available game types for filtering
GET/leaderboard/rank/:playerIdPublicGet a specific player’s rank on the leaderboard
GET/statisticsUserGet current user’s statistics with comparison to average player
GET/statistics/historyUserGet statistics over time (daily/weekly)
GET/statistics/players/:id/statsUserGet a player’s statistics, optionally filtered by variant
GET/statistics/positionUserGet statistics broken down by position
GET/statistics/variantUserGet current user’s statistics for all game variants
GET/statistics/variant/:gameTypeUserGet current user’s statistics for a specific game variant

Config, Pages and App Routes

Base paths: /api/v1/config, /api/v1/pages, /api/v1/app

MethodPathAuthDescription
GET/app/deeplinks/resolvePublicValidates and resolves deep link paths for the mobile app
GET/app/versionPublicPublic endpoint for mobile app version checks
GET/config/brandingPublicGet public site branding and SEO settings for the frontend
GET/config/currencyPublicGet public currency configuration for the frontend
GET/config/featuresPublicGet public feature toggles for the frontend
GET/config/languagesPublicGet active languages for the frontend language selector
GET/config/languages/:code/phrasesPublicGet all translation phrases for a language by code
GET/config/plugin-scriptsPublicReturns active plugin frontend bundle URLs for client-side loading
GET/config/plugin-settings/:providerTypeUserClient-visible plugin settings
GET/pages/:slugOptionalGet a public page by slug with its active content blocks

Tickets and Devices Routes

Base paths: /api/v1/tickets, /api/v1/devices

MethodPathAuthDescription
GET/devicesUserList the authenticated user’s registered devices
DELETE/devices/:deviceIdUserUnregister a device (soft delete by setting isActive: false)
POST/devices/registerUserRegister or update a device push token (upsert on userId + pushToken)
GET/ticketsUserGet all tickets for the authenticated user
POST/tickets/:ticketId/redeemUserRedeem a satellite ticket to register for the target tournament

Agent Routes

Base path: /api/v1/agent

MethodPathAuthDescription
GET/agent/available-templatesAgent; toggle agentsList commission templates available for sub-agent assignment
GET/agent/available-tiersAgent; toggle agentsList role tiers available for sub-agent assignment
GET/agent/clubsAgent; toggle agentsList agent’s clubs
POST/agent/clubsAgent; toggle agentsCreate a new club
GET/agent/clubs/:clubIdAgent; toggle agentsGet club detail
PUT/agent/clubs/:clubId/buyinAgent; toggle agentsUpdate club buy-in defaults
PUT/agent/clubs/:clubId/chip-priceAgent; toggle agentsUpdate club chip price
POST/agent/clubs/:clubId/inviteAgent; toggle agentsInvite a player to a club
GET/agent/clubs/:clubId/membersAgent; toggle agentsList club members (paginated)
DELETE/agent/clubs/:clubId/members/:memberIdAgent; toggle agentsRemove a club member
PUT/agent/clubs/:clubId/rakeAgent; toggle agentsUpdate club rake settings
GET/agent/clubs/:clubId/tablesAgent; toggle agentsList tables in a club
POST/agent/clubs/:clubId/tablesAgent; toggle agentsCreate a table within a club
DELETE/agent/clubs/:clubId/tables/:tableIdAgent; toggle agentsDelete a club table
POST/agent/clubs/:clubId/tables/:tableId/pauseAgent; toggle agentsPause a club table
POST/agent/clubs/:clubId/tables/:tableId/resumeAgent; toggle agentsResume a club table
GET/agent/commission-breakdownAgent; toggle agentsGet the current-period commission breakdown
GET/agent/commission-settingsAgent; toggle agentsReturns whether commission overrides are enabled
GET/agent/commissionsAgent; toggle agentsGet commission history for the authenticated agent (self-service)
POST/agent/depositAgent; toggle agentsDeposit chips to a player assigned to this agent (or in subtree)
GET/agent/export/commissionsAgent; toggle agentsExport commission history as CSV for the authenticated agent
GET/agent/export/playersAgent; toggle agentsExport players list as CSV for the authenticated agent
GET/agent/metricsAgent; toggle agentsGet key metrics for the authenticated agent’s self-service dashboard
GET/agent/my-permissionsAgent; toggle agentsGet the authenticated agent’s effective permissions
GET/agent/playersAgent; toggle agentsGet list of players assigned to the authenticated agent
POST/agent/playersAgent; toggle agentsCreate a new player account assigned to this agent
GET/agent/players/:playerIdAgent; toggle agentsGet detailed player information for a specific player
PUT/agent/players/:playerIdAgent; toggle agentsUpdate a player’s profile fields
POST/agent/players/:playerId/adjustmentAgent; toggle agentsMake a manual balance adjustment for a player
GET/agent/players/:playerId/hand-historyAgent; toggle agentsView a player’s hand history (paginated)
GET/agent/players/:playerId/limitsAgent; toggle agentsView a player’s deposit limits
PUT/agent/players/:playerId/limitsAgent; toggle agentsSet deposit limits for a player
POST/agent/players/:playerId/suspendAgent; toggle agentsSuspend a player (set isBlocked = true)
POST/agent/players/:playerId/unsuspendAgent; toggle agentsUnsuspend a player (set isBlocked = false)
GET/agent/referral-linksAgent; toggle agentsList the agent’s referral links with click and signup stats
POST/agent/referral-linksAgent; toggle agentsGenerate a new referral link for the agent
GET/agent/reports/activityAgent; toggle agentsExport daily activity summary for the agent (and subtree if permitted)
GET/agent/reports/commissionsAgent; toggle agentsExport commission data for the agent (and subtree if permitted)
GET/agent/reports/financial-summaryAgent; toggle agentsView financial summary for the agent within a date range
GET/agent/reports/player-activityAgent; toggle agentsView player activity reports for the agent’s assigned players
GET/agent/reports/playersAgent; toggle agentsExport player data for the agent (and subtree if permitted)
GET/agent/settlementsAgent; toggle agentsList the agent’s settlements with pagination
GET/agent/settlements/:idAgent; toggle agentsGet a single settlement with full breakdown detail
GET/agent/sub-agentsAgent; toggle agentsList the agent’s direct sub-agents with basic stats
POST/agent/sub-agentsAgent; toggle agentsCreate a sub-agent under the authenticated agent
GET/agent/sub-agents/:idAgent; toggle agentsGet detail for a specific sub-agent (must be in the agent’s subtree)
PUT/agent/sub-agents/:idAgent; toggle agentsEdit sub-agent properties (role tier, commission template)
GET/agent/sub-agents/:id/childrenAgent; toggle agentsList direct children for a specific sub-agent in the authenticated agent’s subtree
PUT/agent/sub-agents/:id/commissionAgent; toggle agentsSet commission overrides for a sub-agent in the requesting agent’s subtree
PUT/agent/sub-agents/:id/credit-lineAgent; toggle agentsSet the credit line for a sub-agent
PUT/agent/sub-agents/:id/limitsAgent; toggle agentsSet financial limits for a sub-agent in the requesting agent’s subtree
GET/agent/sub-agents/:id/reportsAgent; toggle agentsView performance reports for a sub-agent in the requesting agent’s subtree
POST/agent/sub-agents/:id/suspendAgent; toggle agentsSuspend a sub-agent in the requesting agent’s subtree
POST/agent/sub-agents/:id/unsuspendAgent; toggle agentsUnsuspend (reactivate) a sub-agent in the requesting agent’s subtree
POST/agent/subagent/depositAgent; toggle agentsTransfer chips from the current agent’s balance to a direct sub-agent’s balance
POST/agent/subagent/withdrawAgent; toggle agentsWithdraw chips from a direct sub-agent’s balance back to the current agent’s balance
GET/agent/subtree-statsAgent; toggle agentsAggregate stats for the agent’s subtree
GET/agent/transactionsAgent; toggle agentsList the agent’s transactions with pagination and date range filter
POST/agent/transfer-chipsAgent; toggle agentsTransfer chips from the authenticated agent to a sub-agent in their tree
GET/agent/user-searchAgent; toggle agentsSearch for users who are not yet agents (for sub-agent creation)
GET/agent/wholesale-historyAgent; toggle agentsGet wholesale purchase history for the agent
GET/agent/wholesale-infoAgent; toggle agentsGet wholesale purchase info for the agent self-service UI
POST/agent/wholesale-purchaseAgent; toggle agentsPurchase wholesale chips at the agent’s configured discount
POST/agent/withdrawAgent; toggle agentsWithdraw chips from a player back to agent balance

Developer Routes

Base path: /api/v1/developer. See Integration API for signing.

MethodPathAuthDescription
POST/developer/auth/codeDeveloper key; toggle developerApiGenerate a single-use login code for a user
GET/developer/docsPublicServe the documentation index page (?format=json returns { title, content, pages })
GET/developer/docs/:pagePublicServe a specific documentation page
GET/developer/docs/openapi.jsonPublicConvert and serve the OpenAPI spec as JSON
GET/developer/docs/openapi.yamlPublicServe the raw OpenAPI YAML specification
POST/developer/registerPublic; toggle developerApiSelf-register as a developer partner
GET/developer/statusPublic; toggle developerApiCheck partner registration status by email
POST/developer/usersDeveloper key; toggle developerApiProvision a user account linked to an external user ID
GET/developer/users/:externalUserIdDeveloper key; toggle developerApiGet a user account by external user ID
PUT/developer/users/:externalUserIdDeveloper key; toggle developerApiUpdate a user’s profile fields by external user ID
GET/developer/users/:externalUserId/balanceDeveloper key; toggle developerApiGet a user’s balance by external user ID
POST/developer/users/:externalUserId/balance/creditDeveloper key; toggle developerApiCredit (add) funds to a user’s balance
POST/developer/users/:externalUserId/balance/debitDeveloper key; toggle developerApiDebit (subtract) funds from a user’s balance
GET/developer/webhooksDeveloper key; toggle developerApiList all webhook subscriptions for the authenticated partner
POST/developer/webhooksDeveloper key; toggle developerApiSubscribe to a webhook event type (upserts if subscription already exists)
DELETE/developer/webhooks/:subscriptionIdDeveloper key; toggle developerApiUnsubscribe (delete) a webhook subscription

Webhook Routes

Base path: /api/v1/webhooks

POST /webhooks/payment/:paymentSystemId

Receive payment provider webhooks.

Public endpoint – No authentication required. Signature verification performed using headers.

Supported Signature Headers:

  • x-signature
  • hmac
  • x-coinpayments-hmac
  • btcpay-sig
  • stripe-signature
  • x-webhook-signature
  • paypal-transmission-sig (PayPal)

POST /webhooks/payment/:paymentSystemId/test

Test webhook configuration. Admin only.

GET /webhooks/events

Get webhook events. Admin only.

Query Parameters:

ParameterTypeRequiredDescription
paymentSystemIduuidNoFilter by payment system
statusstringNoreceived, processed, failed, duplicate
startDateISO dateNoFilter by start date
endDateISO dateNoFilter by end date
limitnumberNo1-100 (default: 50)
offsetnumberNoPagination offset

GET /webhooks/statistics

Get webhook statistics. Admin only.

POST /webhooks/events/:eventId/retry

Retry failed webhook. Admin only.

Wallet Routes

Base path: /api/wallet/v1

MethodPathAuthDescription
POST/api/wallet/v1/providers/:slug/callbackPublicWallet provider callback; verified by provider signature

Debug Routes

Base path: /api/v1/debug

MethodPathAuthDescription
GET/debug/eventsAdminQuery event traces with filters
GET/debug/events/:correlationIdAdminQuery event trace by correlation ID
GET/debug/events/statsAdminGet event tracing statistics
POST/debug/events/tracingAdminEnable or disable event tracing

Admin Routes

Base path: /api/v1/admin

All admin routes require an admin session (permission level a1 or higher) and the feature permission for the action, except /admin/auth login, refresh and 2FA flows. Routes that are not detailed below are listed in Other Admin Routes.

Admin Authentication

POST /admin/auth/login

Admin login with enhanced security. Admins may receive a pending 2FA response instead of a completed session.

Request Body:

{
  "username": "string",
  "password": "string"
}

Completed session response:

{
  "success": true,
  "data": {
    "user": { /* Admin user object */ },
    "session": { /* Admin session object */ },
    "expiresIn": 900
  }
}

2FA required response:

{
  "success": true,
  "data": {
    "requires2FA": true,
    "tempToken": "string",
    "setupRequired": true
  }
}

Auth tokens are set as HttpOnly cookies when login or 2FA completion succeeds.

POST /admin/auth/2fa/setup

Begin mandatory admin 2FA setup for a pending admin login.

Request Body:

{
  "tempToken": "string"
}

Response:

{
  "success": true,
  "data": {
    "secret": "string",
    "qrCodeUrl": "string"
  }
}

POST /admin/auth/2fa/setup/verify

Complete mandatory admin 2FA setup and finish the pending admin login.

Request Body:

{
  "tempToken": "string",
  "secret": "string",
  "code": "string"
}

POST /admin/auth/2fa

Complete admin login after 2FA verification with a TOTP code or backup code.

Request Body:

{
  "tempToken": "string",
  "code": "string"
}

POST /admin/auth/refresh

Refresh admin tokens with session validation. Updated tokens are set as HttpOnly cookies.

Request Body:

{
  "refreshToken": "string",
  "sessionId": "uuid"
}

POST /admin/auth/logout

Logout and invalidate tokens.

Request Body:

{
  "sessionId": "uuid"
}

GET /admin/auth/sessions

Get user’s active sessions.

POST /admin/auth/sessions/invalidate-all

Invalidate all user sessions.

POST /admin/auth/sessions/:sessionId/invalidate

Invalidate specific session.

GET /admin/me

Get current admin profile.

Table Management

POST /admin/tables

Create a new table.

GET /admin/tables

List all tables with pagination.

Query Parameters:

ParameterDescription
pagePage number (default 1)
limitResults per page (default 20, max 100)
statusFilter by status
tableModeFilter by mode
tableTypeFilter by type
searchSearch by name
isScheduledFilter scheduled tables

GET /admin/tables/:tableId

Get table details including debug information.

PATCH /admin/tables/:tableId

Update table settings.

DELETE /admin/tables/:tableId

Delete a table.

POST /admin/tables/:tableId/pause

Pause a table.

POST /admin/tables/:tableId/resume

Resume a paused table.

GET /admin/tables/:tableId/debug

Get full debug state including all cards.

POST /admin/tables/:tableId/set-cards

Set the next deck for testing. Super admin only.

Request Body:

{
  "cards": [
    "AS",
    "KH"
  ],
  "reason": "string (optional, 3-500 chars)"
}

GET /admin/tables/:tableId/history

Get hand history for table.

POST /admin/tables/:tableId/style

Apply table style.

User Management

GET /admin/users

List users with search, sort, and pagination.

Query Parameters:

ParameterDescription
pagePage number (default 1)
limitResults per page (default 20, max 100)
searchSearch users
sortByField to sort by (default createdAt)
sortOrderasc or desc (default desc)
isBlockedFilter blocked users
isVerifiedFilter verified users
isBotFilter bots

GET /admin/users/:userId

Get user details.

POST /admin/users

Create a user.

Request Body:

{
  "username": "string (3-30, letters, digits, _)",
  "email": "string",
  "password": "string (min 8)",
  "firstName": "string (optional)",
  "lastName": "string (optional)",
  "country": "string (optional)",
  "groupId": "uuid",
  "isVerified": "boolean (optional)",
  "isEmailConfirmed": "boolean (optional)",
  "isBot": "boolean (optional)",
  "isAgent": "boolean (optional)"
}

PATCH /admin/users/:userId

Update user.

POST /admin/users/:userId/block

Block user account.

Request Body:

{
  "reason": "string (optional)"
}

POST /admin/users/:userId/unblock

Unblock user account.

DELETE /admin/users/:userId

Delete user account.

GET /admin/users/:userId/history

Get user operation history.

GET /admin/users/pending

Get pending registration approvals.

POST /admin/users/:userId/approve

Approve registration.

POST /admin/users/:userId/reject

Reject registration.

Request Body:

{
  "reason": "string"
}

GET /admin/users/unconfirmed-emails

Get users with unconfirmed emails.

POST /admin/users/:userId/confirm-email

Manually confirm user email.

POST /admin/users/:userId/revoke-email

Revoke email confirmation.

User Groups

GET /admin/groups

List all groups.

GET /admin/groups/:groupId

Get group details.

POST /admin/groups

Create group.

Request Body:

{
  "name": "string",
  "permissions": "a | a1 | b | c | d | e | f"
}

PATCH /admin/groups/:groupId

Update group.

DELETE /admin/groups/:groupId

Delete group.

GET /admin/groups/:groupId/users

Get users in group.

POST /admin/groups/:groupId/assign

Assign users to group.

Request Body:

{
  "userIds": ["uuid1", "uuid2"]
}

Bonus System

GET /admin/bonuses

List all bonuses.

GET /admin/bonuses/:bonusId

Get bonus details.

POST /admin/bonuses

Create bonus.

Request Body:

{
  "description": "string",
  "event": "ON_DEPOSIT | ON_FIRST_DEPOSIT | ON_FIRST_LOGIN",
  "type": "VIRTUAL | USD | GOLD | DIAMOND | TICKETS",
  "amount": "string (e.g. \"100\" or \"50%\")",
  "startDate": "date",
  "endDate": "date",
  "isActive": "boolean (optional)"
}

PATCH /admin/bonuses/:bonusId

Update bonus.

DELETE /admin/bonuses/:bonusId

Delete bonus.

POST /admin/bonuses/:bonusId/activate

Activate bonus.

POST /admin/bonuses/:bonusId/deactivate

Deactivate bonus.

GET /admin/bonuses/:bonusId/credits

Get bonus credit history.

GET /admin/bonus-credits

List all bonus credits.

POST /admin/bonuses/:bonusId/apply/:userId

Manually apply bonus to user.

Email Templates

GET /admin/email-templates

List all email templates.

GET /admin/email-templates/names

Get available template names.

GET /admin/email-templates/:templateId

Get template details.

POST /admin/email-templates

Create template.

Request Body:

{
  "name": "string",
  "subject": "string",
  "body": "string"
}

PATCH /admin/email-templates/:templateId

Update template.

DELETE /admin/email-templates/:templateId

Delete template.

GET /admin/email-templates/:templateId/variables

Get template variables.

POST /admin/email-templates/preview

Preview a template.

Request Body:

{
  "subject": "string",
  "body": "string",
  "variables": "object (optional)"
}

SMTP Configuration

GET /admin/smtp/config

Get SMTP configuration.

PATCH /admin/smtp/config

Update SMTP configuration. All fields are optional.

Request Body:

{
  "enabled": "boolean (optional)",
  "server": {
    "host": "string",
    "port": "number",
    "encryption": "none | ssl | tls | starttls",
    "timeout": "number"
  },
  "auth": {
    "enabled": "boolean",
    "username": "string",
    "password": "string"
  },
  "sender": {
    "fromAddress": "string",
    "fromName": "string",
    "replyToAddress": "string",
    "replyToName": "string"
  },
  "rateLimit": {
    "enabled": "boolean",
    "maxPerMinute": "number",
    "maxPerHour": "number",
    "maxPerDay": "number"
  }
}

POST /admin/smtp/test

Test the SMTP connection using the saved configuration. No body.

GET /admin/smtp/presets

Get SMTP presets (Gmail, SendGrid, etc.).

GET /admin/smtp/presets/:preset

Get preset details.

POST /admin/smtp/presets/:preset/apply

Apply preset configuration.

GET /admin/smtp/rate-limit

Get current rate limit status.

POST /admin/smtp/rate-limit/reset

Reset rate limit counter.

GET /admin/smtp/encryption-types

Get supported encryption types.

Email Management

POST /admin/emails/send

Send an email from a template.

Request Body:

{
  "to": "string",
  "templateId": "uuid (or templateName)",
  "templateName": "string (or templateId)",
  "variables": "object (optional)",
  "userId": "uuid (optional)"
}

POST /admin/emails/send-custom

Send a custom email.

Request Body:

{
  "to": "string",
  "subject": "string",
  "body": "string",
  "userId": "uuid (optional)"
}

POST /admin/emails/send-to-user/:userId

Send email to specific user.

GET /admin/emails/logs

Get email logs.

Query Parameters:

ParameterDescription
recipientEmailFilter by recipient email
recipientUserIdFilter by recipient user
statusFilter by status
templateIdFilter by template
sentByFilter by sender
startDateFilter start
endDateFilter end
pagePage number
limitResults per page
sortBySort field
sortOrderSort order

GET /admin/emails/logs/:emailLogId

Get specific email log entry.

GET /admin/emails/user/:userId

Get emails sent to user.

GET /admin/emails/stats

Get email statistics.

POST /admin/emails/logs/:emailLogId/retry

Retry failed email.

Bulk Email Campaigns

POST /admin/bulk-emails/campaigns

Create a campaign.

Request Body:

{
  "name": "string",
  "description": "string (optional)",
  "templateId": "uuid (optional)",
  "templateName": "string (optional)",
  "subject": "string (optional)",
  "body": "string (optional)",
  "targetType": "ALL_USERS | GROUP | USER_LIST | FILTER",
  "targetGroupId": "uuid (optional)",
  "targetUserIds": "uuid[] (optional)",
  "targetFilters": "object (optional)",
  "scheduledAt": "datetime (optional)"
}

GET /admin/bulk-emails/campaigns

List campaigns.

GET /admin/bulk-emails/campaigns/stats

Get campaign statistics.

GET /admin/bulk-emails/campaigns/:campaignId

Get campaign details.

PUT /admin/bulk-emails/campaigns/:campaignId

Update campaign.

DELETE /admin/bulk-emails/campaigns/:campaignId

Delete campaign.

POST /admin/bulk-emails/campaigns/:campaignId/start

Start campaign.

POST /admin/bulk-emails/campaigns/:campaignId/cancel

Cancel running campaign.

GET /admin/bulk-emails/campaigns/:campaignId/emails

Get campaign emails.

Coupons

POST /admin/coupons

Create a coupon.

Request Body:

{
  "code": "string (optional)",
  "currency": "USD | GOLD | DIAMOND | VIRTUAL | TICKETS",
  "value": "number (>0)",
  "expiresAt": "datetime (optional)",
  "description": "string (optional)"
}

GET /admin/coupons

List coupons.

GET /admin/coupons/stats

Get coupon statistics.

GET /admin/coupons/:couponId

Get coupon details.

DELETE /admin/coupons/:couponId

Delete coupon.

POST /admin/coupons/:couponId/send-email

Send coupon via email.

POST /admin/coupons/batches

Create a coupon batch.

Request Body:

{
  "name": "string",
  "description": "string (optional)",
  "currency": "USD | GOLD | DIAMOND | VIRTUAL | TICKETS",
  "value": "number (>0)",
  "quantity": "number (1-10000)",
  "expiresAt": "datetime (optional)",
  "codePrefix": "string (optional, max 10)"
}

GET /admin/coupons/batches

List coupon batches.

GET /admin/coupons/batches/:batchId

Get batch details.

GET /admin/coupons/batches/:batchId/coupons

Get coupons in batch.

POST /admin/coupons/batches/:batchId/send-emails

Send batch coupons via email.

Messaging System

GET /admin/messages

List messages (inbox).

Query Parameters:

ParameterDescription
categoryFilter by category
isReadFilter by read state
senderIdFilter by sender
searchSearch messages
pagePage number
limitResults per page
sortBySort field
sortOrderSort order

GET /admin/messages/stats

Get message statistics.

GET /admin/messages/unread-count

Get unread message count.

GET /admin/messages/:messageId

Get message details.

POST /admin/messages/compose

Compose a message.

Request Body:

{
  "receiverId": "uuid",
  "category": "GENERAL | VERIFICATION | WITHDRAWAL | SUPPORT",
  "subject": "string",
  "content": "string",
  "attachments": "string[] (optional)"
}

POST /admin/messages/:messageId/reply

Reply to message.

POST /admin/messages/:messageId/read

Mark as read.

POST /admin/messages/:messageId/unread

Mark as unread.

POST /admin/messages/bulk-read

Bulk mark as read.

Request Body:

{
  "messageIds": ["uuid1", "uuid2"]
}

DELETE /admin/messages/:messageId

Delete message.

POST /admin/messages/bulk-delete

Bulk delete messages.

GET /admin/messages/user/:userId

Get messages from/to user.

Verification Requests

GET /admin/verification-requests

List verification requests.

GET /admin/verification-requests/stats

Get request statistics.

GET /admin/verification-requests/pending-count

Get pending request count.

GET /admin/verification-requests/:requestId

Get request details.

POST /admin/verification-requests/:requestId/approve

Approve a verification request.

Request Body:

{
  "tier": "TIER_1 | TIER_2 | TIER_3",
  "message": "string (optional)"
}

POST /admin/verification-requests/:requestId/reject

Reject a verification request.

Request Body:

{
  "message": "string (optional)"
}

Withdrawal Requests

GET /admin/withdrawal-requests

List withdrawal requests.

GET /admin/withdrawal-requests/stats

Get request statistics.

GET /admin/withdrawal-requests/pending-count

Get pending request count.

GET /admin/withdrawal-requests/:requestId

Get request details.

POST /admin/withdrawal-requests/:requestId/approve

Approve withdrawal.

POST /admin/withdrawal-requests/:requestId/reject

Reject a withdrawal request.

Request Body:

{
  "message": "string (optional)",
  "externalId": "string (optional)"
}

Server Settings

GET /admin/server/settings

Get all server settings.

PATCH /admin/server/settings

Update server settings.

POST /admin/server/settings/reset

Reset to defaults.

GET /admin/server/settings/export

Export settings as JSON.

POST /admin/server/settings/import

Import settings from JSON.

GET /admin/server/site-url

Get site URL configuration.

PATCH /admin/server/site-url

Update site URL.

GET /admin/server/script-paths

Get script paths.

PATCH /admin/server/script-paths

Update script paths.

GET /admin/server/site-email

Get site email.

PATCH /admin/server/site-email

Update site email.

GET /admin/server/timezone

Get timezone.

PATCH /admin/server/timezone

Update timezone.

GET /admin/server/timezones

Get available timezones.

GET /admin/server/time

Get current server time.

General Settings

GET /admin/general/settings

Get general settings.

PATCH /admin/general/settings

Update general settings.

POST /admin/general/settings/reset

Reset to defaults.

GET /admin/general/settings/export

Export settings.

POST /admin/general/settings/import

Import settings.

GET /admin/general/avatar

Get avatar configuration.

PATCH /admin/general/avatar

Update avatar configuration.

GET /admin/general/avatar/defaults

Get default avatars.

POST /admin/general/avatar/defaults

Add default avatar.

DELETE /admin/general/avatar/defaults/:avatarName

Delete default avatar.

GET /admin/general/avatar/formats

Get supported avatar formats.

GET /admin/general/lobby-melody

Get lobby music settings.

PATCH /admin/general/lobby-melody

Update lobby music.

GET /admin/general/seo

Get SEO settings.

PATCH /admin/general/seo

Update SEO settings.

GET /admin/general/seo/meta-tags

Get meta tags.

GET /admin/general/seo/analytics

Get SEO analytics.

Features & Maintenance

GET /admin/general/features

Get all feature flags.

PATCH /admin/general/features

Update multiple features.

GET /admin/general/features/keys

Get all feature keys.

GET /admin/general/features/:feature

Get specific feature status.

POST /admin/general/features/:feature/enable

Enable feature.

POST /admin/general/features/:feature/disable

Disable feature.

POST /admin/general/features/:feature/toggle

Toggle feature.

GET /admin/general/maintenance

Get maintenance mode status.

POST /admin/general/maintenance/enable

Enable maintenance mode. No body.

POST /admin/general/maintenance/disable

Disable maintenance mode.

Game Settings

GET /admin/game/settings

Get all game settings.

PATCH /admin/game/settings

Update game settings.

POST /admin/game/settings/reset

Reset to defaults.

GET /admin/game/settings/export

Export settings.

POST /admin/game/settings/import

Import settings.

GET /admin/game/ip-check

Get IP check configuration.

PATCH /admin/game/ip-check

Update IP check settings.

GET /admin/game/ip-check/status

Get IP check status.

POST /admin/game/ip-check/enable

Enable IP checking.

POST /admin/game/ip-check/disable

Disable IP checking.

POST /admin/game/ip-check/whitelist

Add an IP to the whitelist.

Request Body:

{
  "ip": "string"
}

DELETE /admin/game/ip-check/whitelist/:ip

Remove IP from whitelist.

GET /admin/game/move-time

Get move timeout configuration.

PATCH /admin/game/move-time

Update move time. All fields are optional.

Request Body:

{
  "defaultMoveTimeSeconds": "number (5-300)",
  "minMoveTimeSeconds": "number",
  "maxMoveTimeSeconds": "number",
  "extraTimeBank": "boolean",
  "timeBankSeconds": "number (0-600)",
  "timeBankRefillHands": "number (1-100)",
  "warningTimeSeconds": "number"
}

GET /admin/game/timeout

Get timeout settings.

PATCH /admin/game/timeout

Update timeout settings.

GET /admin/game/showdown

Get showdown settings.

PATCH /admin/game/showdown

Update showdown settings. All fields are optional.

Request Body:

{
  "showdownDelaySeconds": "number (1-30)",
  "autoMuckEnabled": "boolean",
  "showWinningHand": "boolean",
  "showAllHandsAtShowdown": "boolean",
  "muckedHandRevealDelay": "number (0-30)"
}

GET /admin/game/virtual-chip

Get virtual chip configuration.

PATCH /admin/game/virtual-chip

Update virtual chip settings. All fields are optional.

Request Body:

{
  "enabled": "boolean",
  "replenishAmount": "number",
  "replenishThreshold": "number",
  "cooldownMinutes": "number (0-1440)",
  "maxReplenishPerDay": "number (0-100)",
  "initialChips": "number"
}

GET /admin/game/rake

Get rake settings.

PATCH /admin/game/rake

Update rake settings. All fields are optional.

Request Body:

{
  "enabled": "boolean",
  "defaultRakePercent": "number (0-100)",
  "maxRakePercent": "number (0-100)",
  "rakeCap": "number (0-1000)",
  "rakeCapByStakes": "boolean",
  "noFlopNoRake": "boolean",
  "headsUpRakePercent": "number (0-100)"
}

GET /admin/game/bot-timing

Get bot timing settings.

PATCH /admin/game/bot-timing

Update bot timing. All fields are optional.

Request Body:

{
  "enabled": "boolean",
  "minDelayMs": "number (0-30000)",
  "maxDelayMs": "number (max 60000)",
  "humanizeDelay": "boolean",
  "thinkingDelayMultiplier": "number (0.1-10)",
  "preActionDelay": "boolean"
}

GET /admin/game/chat

Get chat settings.

PATCH /admin/game/chat

Update chat settings.

GET /admin/game/chat/status

Get chat enabled status.

POST /admin/game/chat/enable

Enable table chat.

POST /admin/game/chat/disable

Disable table chat.

GET /admin/game/currency

Get currency settings.

PATCH /admin/game/currency

Update currency settings.

GET /admin/game/currency/symbol/:currency

Get currency symbol.

PUT /admin/game/currency/symbol/:currency

Set currency symbol.

POST /admin/game/currency/format

Format an amount.

Request Body:

{
  "amount": "number",
  "currency": "string (optional)"
}

Pages Management

GET /admin/pages

List all pages.

GET /admin/pages/stats

Get page statistics.

GET /admin/pages/slugs

Get all page slugs.

GET /admin/pages/visibility-options

Get visibility options.

GET /admin/pages/reserved-slugs

Get reserved slugs.

GET /admin/pages/check-slug

Check slug availability.

Query Parameters:

ParameterType
slugstring

POST /admin/pages/generate-slug

Generate slug from title.

Request Body:

{
  "title": "string"
}

GET /admin/pages/:pageId

Get page details.

GET /admin/pages/by-slug/:slug

Get page by slug.

POST /admin/pages

Create a page.

Request Body:

{
  "title": "string",
  "content": "string (optional)",
  "slug": "string (optional)",
  "visibility": "PUBLIC | GUESTS | REGISTERED (optional)",
  "isActive": "boolean (optional)"
}

PATCH /admin/pages/:pageId

Update page.

DELETE /admin/pages/:pageId

Delete page.

POST /admin/pages/:pageId/activate

Activate page.

POST /admin/pages/:pageId/deactivate

Deactivate page.

POST /admin/pages/:pageId/visibility

Set page visibility.

Content Blocks

GET /admin/content-blocks/types

Get available block types.

GET /admin/content-blocks/types/descriptions

Get block type descriptions.

GET /admin/content-blocks/types/:type/defaults

Get default values for block type.

GET /admin/pages/:pageId/blocks

Get blocks for page.

GET /admin/pages/:pageId/blocks/count

Get block count for page.

POST /admin/pages/:pageId/blocks

Add a content block.

Request Body:

{
  "pageId": "uuid",
  "type": "string",
  "name": "string (optional)",
  "content": "string",
  "settings": "object (optional)",
  "order": "number (optional)",
  "isActive": "boolean (optional)"
}

POST /admin/pages/:pageId/blocks/reorder

Reorder blocks.

Request Body:

{
  "blockOrder": [
    {
      "id": "uuid",
      "order": 0
    }
  ]
}

DELETE /admin/pages/:pageId/blocks

Delete all blocks from page.

GET /admin/content-blocks/:blockId

Get block details.

PATCH /admin/content-blocks/:blockId

Update block.

DELETE /admin/content-blocks/:blockId

Delete block.

POST /admin/content-blocks/:blockId/activate

Activate block.

POST /admin/content-blocks/:blockId/deactivate

Deactivate block.

POST /admin/content-blocks/:blockId/move-up

Move block up in order.

POST /admin/content-blocks/:blockId/move-down

Move block down in order.

POST /admin/content-blocks/:blockId/duplicate

Duplicate block.

CSS Styles

GET /admin/css-styles/settings

Get CSS settings.

PUT /admin/css-styles/settings

Update CSS settings.

GET /admin/css-styles/stats

Get CSS statistics.

GET /admin/css-styles/scopes

Get CSS scopes.

GET /admin/css-styles/reserved-names

Get reserved names.

GET /admin/css-styles/check-name

Check name availability.

GET /admin/css-styles/export

Export all CSS.

POST /admin/css-styles/import

Import CSS.

POST /admin/css-styles/minify

Minify CSS.

Request Body:

{
  "css": "string"
}

GET /admin/css-styles/compiled

Get compiled CSS for entire site.

GET /admin/css-styles/compiled/:pageId

Get compiled CSS for specific page.

GET /admin/css-styles

List CSS styles.

POST /admin/css-styles

Create a style.

Request Body:

{
  "name": "string",
  "description": "string (optional)",
  "content": "string",
  "scope": "global | page | component (optional)",
  "pageId": "uuid (optional)",
  "isActive": "boolean (optional)",
  "priority": "number (0-1000, optional)"
}

GET /admin/css-styles/by-name/:name

Get CSS style by name.

GET /admin/css-styles/:styleId

Get CSS style.

PUT /admin/css-styles/:styleId

Update CSS style.

DELETE /admin/css-styles/:styleId

Delete CSS style.

POST /admin/css-styles/:styleId/activate

Activate style.

POST /admin/css-styles/:styleId/deactivate

Deactivate style.

POST /admin/css-styles/:styleId/duplicate

Duplicate style.

Languages

GET /admin/languages

List all languages.

GET /admin/languages/active

Get active languages.

GET /admin/languages/stats

Get language statistics.

GET /admin/languages/default-code

Get default language code.

POST /admin/languages

Create a language.

Request Body:

{
  "name": "string",
  "code": "string (e.g. en or en-US)",
  "flag": "string (optional)",
  "isActive": "boolean (optional)",
  "rtl": "boolean (optional)"
}

GET /admin/languages/:languageId

Get language details.

GET /admin/languages/code/:code

Get language by code.

PUT /admin/languages/:languageId

Update language.

DELETE /admin/languages/:languageId

Delete language.

POST /admin/languages/:languageId/activate

Activate language.

POST /admin/languages/:languageId/deactivate

Deactivate language.

GET /admin/languages/:languageId/export

Export translations.

POST /admin/languages/import

Import translations.

POST /admin/languages/:languageId/copy-phrases

Copy phrases to another language.

Request Body:

{
  "targetLanguageId": "uuid",
  "overwrite": "boolean (optional)"
}

GET /admin/languages/:languageId/missing-translations

Get missing translations.

GET /admin/languages/:languageId/phrases

Get paginated phrases.

GET /admin/languages/:languageId/phrases/all

Get all phrases.

PUT /admin/languages/:languageId/phrases

Create or update a phrase.

Request Body:

{
  "key": "string",
  "value": "string"
}

GET /admin/languages/:languageId/phrases/:key

Get specific phrase.

DELETE /admin/languages/:languageId/phrases/:key

Delete phrase.

POST /admin/languages/:languageId/phrases/bulk-delete

Bulk delete phrases.

Table Styles

GET /admin/table-styles/stats

Get table style statistics.

GET /admin/table-styles/options

Get style options (colors, textures).

GET /admin/table-styles/check-name

Check name availability.

GET /admin/table-styles/active

Get active styles.

GET /admin/table-styles/default

Get default style.

GET /admin/table-styles

List table styles.

POST /admin/table-styles

Create a table style.

Request Body:

{
  "name": "string",
  "description": "string (optional)",
  "logoType": "TEXT | IMAGE | NONE (optional)",
  "logoText": "string (optional)",
  "logoImage": "url (optional)",
  "logoPosition": "center | top | bottom (optional)",
  "feltColor": "string (optional)",
  "railColor": "string (optional)",
  "accentColor": "string (optional)",
  "textColor": "string (optional)",
  "cardBackColor": "string (optional)",
  "cardBackImage": "url (optional)",
  "cardBackDesign": "stripes | diamonds | crosshatch | classic | ornate | geometric (optional)",
  "chipStyle": "classic | modern | minimal (optional)",
  "hudStyle": "string (optional)",
  "controlsStyle": "string (optional)",
  "tableLayout": "oval | round | rectangular (optional)",
  "customCss": "string (optional)",
  "isActive": "boolean (optional)",
  "isDefault": "boolean (optional)",
  "priority": "number (0-999, optional)",
  "playerPovMode": "boolean (optional)"
}

GET /admin/table-styles/by-name/:name

Get style by name.

GET /admin/table-styles/:styleId

Get table style.

PUT /admin/table-styles/:styleId

Update table style.

DELETE /admin/table-styles/:styleId

Delete table style.

POST /admin/table-styles/:styleId/activate

Activate style.

POST /admin/table-styles/:styleId/deactivate

Deactivate style.

POST /admin/table-styles/:styleId/set-default

Set as default style.

POST /admin/table-styles/:styleId/duplicate

Duplicate style.

Other Admin Routes

Admin 2FA

MethodPathAuthDescription
GET/admin/2fa/backup-codesAdminGet information about backup codes
POST/admin/2fa/backup-codesAdminRegenerate backup codes
POST/admin/2fa/disableAdminDisable 2FA for the current admin account
POST/admin/2fa/setupAdminGenerate TOTP secret and QR code for 2FA setup
GET/admin/2fa/statusAdminGet the current 2FA status for the admin account
POST/admin/2fa/verifyAdminVerify the TOTP code and enable 2FA This completes the 2FA setup process

Affiliates

MethodPathAuthDescription
GET/admin/affiliates/codesAdmin; toggle affiliatesList all referral codes with pagination
GET/admin/affiliates/codes/:codeAdmin; toggle affiliatesLook up a referral code by code string
DELETE/admin/affiliates/codes/:userIdSuper admin; toggle affiliatesDelete a user’s referral code
POST/admin/affiliates/codes/:userId/regenerateSuper admin; toggle affiliatesRegenerate a user’s referral code
GET/admin/affiliates/leaderboardAdmin; toggle affiliatesGet affiliate leaderboard
GET/admin/affiliates/levelsAdmin; toggle affiliatesList all affiliate commission levels
POST/admin/affiliates/levelsSuper admin; toggle affiliatesCreate a new affiliate level
DELETE/admin/affiliates/levels/:levelSuper admin; toggle affiliatesDelete an affiliate level
PATCH/admin/affiliates/levels/:levelSuper admin; toggle affiliatesUpdate an affiliate level’s reward
GET/admin/affiliates/overviewAdmin; toggle affiliatesGet affiliate system overview and global statistics
GET/admin/affiliates/referralsAdmin; toggle affiliatesList all referral registrations with filters
GET/admin/affiliates/referrals/:idAdmin; toggle affiliatesGet a specific referral registration
POST/admin/affiliates/referrals/:id/confirmSuper admin; toggle affiliatesConfirm a pending referral registration
POST/admin/affiliates/referrals/:id/rejectSuper admin; toggle affiliatesReject a referral registration
POST/admin/affiliates/referrals/:id/rewardSuper admin; toggle affiliatesMark a referral as rewarded
POST/admin/affiliates/referrals/auto-confirmSuper admin; toggle affiliatesAuto-confirm all verified referrals
GET/admin/affiliates/rewardsAdmin; toggle affiliatesList all affiliate rewards with filters
GET/admin/affiliates/rewards/statsAdmin; toggle affiliatesGet global affiliate reward statistics
POST/admin/affiliates/users/:userId/linkSuper admin; toggle affiliatesLink a user to a referrer
POST/admin/affiliates/users/:userId/unlinkSuper admin; toggle affiliatesUnlink a user from their referrer

Affiliate Fraud

MethodPathAuthDescription
GET/admin/affiliate-fraudAdminList fraud flags with filters
GET/admin/affiliate-fraud/:idAdminGet fraud flag details with evidence
PATCH/admin/affiliate-fraud/:idAdminConfirm or dismiss a fraud flag

Agents and Hierarchy

MethodPathAuthDescription
GET/admin/agentsAdmin; toggle agentsList all agents with pagination and filtering
GET/admin/agents/:agentIdAdmin; toggle agentsGet detailed information about a specific agent
GET/admin/agents/:agentId/ancestorsAdminGet ancestor chain from root to parent
POST/admin/agents/:agentId/balanceAdmin; toggle agentsAdjust an agent’s balance (credit or debit)
GET/admin/agents/:agentId/childrenAdminGet direct children of an agent
PUT/admin/agents/:agentId/commission-templateAdminAssign a commission template to an agent
PUT/admin/agents/:agentId/credit-lineAdmin; toggle agentsSet credit line amount for an agent
PUT/admin/agents/:agentId/custom-roleAdminAssign a custom role to an agent
PUT/admin/agents/:agentId/detachAdminDetach agent from parent (make top-level)
PUT/admin/agents/:agentId/financial-freezeAdmin; toggle agentsFreeze or unfreeze an agent’s financial operations
GET/admin/agents/:agentId/financial-limitsAdmin; toggle agentsGet current financial limits for an agent
PUT/admin/agents/:agentId/financial-limitsAdmin; toggle agentsSet financial limits for an agent
GET/admin/agents/:agentId/financial-overviewAdmin; toggle agentsGet complete financial state for an agent (limits, credit line, wholesale, freeze)
PUT/admin/agents/:agentId/permissionsAdminSet per-agent permission overrides
GET/admin/agents/:agentId/playersAdmin; toggle agentsGet paginated list of players assigned to an agent
POST/admin/agents/:agentId/playersAdmin; toggle agentsAssign a player to an agent
DELETE/admin/agents/:agentId/players/:playerIdAdmin; toggle agentsRemove a player from an agent
PUT/admin/agents/:agentId/reassignAdminReassign agent to a new parent
PUT/admin/agents/:agentId/role-tierAdmin; toggle agentsAssign a role tier to an agent
PUT/admin/agents/:agentId/statusAdminUpdate agent status (active, suspended, pending_kyc, closed)
GET/admin/agents/:agentId/subtreeAdminGet all agents in subtree
PUT/admin/agents/:agentId/wholesale-discountAdmin; toggle agentsSet wholesale discount percentage for an agent
DELETE/admin/agents/:userId/designateAdmin; toggle agentsRemove agent status from a user
POST/admin/agents/:userId/designateAdmin; toggle agentsDesignate a user as an agent
POST/admin/agents/hierarchyAdminCreate an agent with hierarchy placement
GET/admin/agents/hierarchy/treeAdminGet all agents with user info and hierarchy data for tree visualization
GET/admin/agents/legacy-countAdmin; toggle agentsCount legacy agents (isAgent=true with no Agent hierarchy record)
POST/admin/agents/migrateAdmin; toggle agentsMigrate all legacy agents (isAgent=true without an Agent record) to the new hierarchy model
GET/admin/agents/pending-approvalsAdmin; toggle agentsList all pending transaction approvals across all agents

Agent Role Tiers

MethodPathAuthDescription
GET/admin/agent-role-tiersAdmin; toggle agentsList all role tiers, ordered by depthLevel ASC
POST/admin/agent-role-tiersAdmin; toggle agentsCreate a new role tier
DELETE/admin/agent-role-tiers/:idAdmin; toggle agentsDelete a role tier (fails if agents are assigned)
GET/admin/agent-role-tiers/:idAdmin; toggle agentsGet a single role tier with count of assigned agents
PUT/admin/agent-role-tiers/:idAdmin; toggle agentsUpdate a role tier

Commission Templates

MethodPathAuthDescription
GET/admin/commission-templatesAdminList all commission templates
POST/admin/commission-templatesAdminCreate a new commission template
DELETE/admin/commission-templates/:idAdminDelete a commission template (fails if agents are assigned)
GET/admin/commission-templates/:idAdminGet a single commission template with count of assigned agents
PUT/admin/commission-templates/:idAdminUpdate a commission template

Custom Roles

MethodPathAuthDescription
GET/admin/custom-rolesAdminList all custom roles
POST/admin/custom-rolesAdminCreate a new custom role
DELETE/admin/custom-roles/:idAdminDelete a custom role (fails if agents are assigned)
GET/admin/custom-roles/:idAdminGet a single custom role with count of assigned agents
PUT/admin/custom-roles/:idAdminUpdate a custom role

Settlements

MethodPathAuthDescription
GET/admin/settlementsAdminList all settlements with pagination, filterable by agentId, status, date range
GET/admin/settlements/:idAdminGet a single settlement with full breakdown
PUT/admin/settlements/:id/approveAdminMark a settlement as approved
PUT/admin/settlements/:id/disputeAdminMark a settlement as disputed with a reason
PUT/admin/settlements/:id/payAdminMark a settlement as paid and credit the agent’s balance
POST/admin/settlements/agent/:agentIdAdminTrigger ad-hoc settlement for a specific agent
POST/admin/settlements/runAdminTrigger a scheduled settlement run for all due agents

Holdback Releases

MethodPathAuthDescription
GET/admin/holdback-releasesAdminList settlement holdback releases

AML Reviews

MethodPathAuthDescription
GET/admin/aml-reviewsAdmin; toggle amlReviewsList AML reviews with filtering and pagination
GET/admin/aml-reviews/:idAdmin; toggle amlReviewsGet AML review details
POST/admin/aml-reviews/:id/approveAdmin; toggle amlReviewsApprove an AML review, allowing the transaction to proceed
PATCH/admin/aml-reviews/:id/notesAdmin; toggle amlReviewsUpdate review notes for an AML review
POST/admin/aml-reviews/:id/rejectAdmin; toggle amlReviewsReject an AML review, blocking the transaction
GET/admin/aml-reviews/pendingAdmin; toggle amlReviewsList pending AML reviews (shortcut for status=PENDING)
GET/admin/aml-reviews/statsAdmin; toggle amlReviewsGet AML review statistics

App Config

MethodPathAuthDescription
GET/admin/app/configAdminGet current app configuration
PATCH/admin/app/configSuper adminUpdate app configuration (minSupportedVersion, updateUrl)

Archival

MethodPathAuthDescription
GET/admin/archival/eligibleAdminGet count of transactions eligible for archival
POST/admin/archival/restore/:transactionIdSuper adminRestore an archived transaction back to the main table
POST/admin/archival/runSuper adminTrigger transaction archival
GET/admin/archival/statsAdminGet archival statistics
GET/admin/archival/transactions/:userIdAdminGet archived transactions for a user

Audit Log

MethodPathAuthDescription
GET/admin/audit-logAdminList admin audit trail entries with filtering and pagination

Auth Config

MethodPathAuthDescription
GET/admin/auth-configSuper adminList auth configuration for all permission levels
DELETE/admin/auth-config/:levelSuper adminReset auth configuration for a permission level back to defaults
GET/admin/auth-config/:levelSuper adminGet auth configuration for a specific permission level
PUT/admin/auth-config/:levelSuper adminUpdate auth configuration for a specific permission level

Bots

MethodPathAuthDescription
GET/admin/botsAdminList all bots in the system
POST/admin/botsAdminCreate a new bot in the pool
DELETE/admin/bots/:botIdAdminRemove a bot from the system
GET/admin/bots/:botIdAdminGet a specific bot’s details
PATCH/admin/bots/:botIdAdminUpdate bot configuration (name, avatar, strategy, delays, buy-in)
POST/admin/bots/:botId/avatarAdminUpload a custom avatar image for a bot
POST/admin/bots/:botId/disableAdminDisable a bot from taking actions
POST/admin/bots/:botId/enableAdminEnable a bot to take actions
PATCH/admin/bots/:botId/strategyAdminChange a bot’s strategy
GET/admin/bots/avatarsAdminGet list of default bot avatar URLs
GET/admin/bots/identitiesAdminList all identities with status
POST/admin/bots/identitiesAdminAdd a single identity
DELETE/admin/bots/identities/:idAdminRemove an identity — returns 409 if currently in use
POST/admin/bots/identities/bulkAdminBulk add identities
POST/admin/bots/pool/replenishAdminReplenish the bot pool to minimum size
GET/admin/bots/scheduler/auto-fillAdminLists all per-table auto-fill configs
DELETE/admin/bots/scheduler/auto-fill/:tableIdAdminRemoves auto-fill config for a table
GET/admin/bots/scheduler/auto-fill/:tableIdAdminReturns auto-fill config for a specific table
PUT/admin/bots/scheduler/auto-fill/:tableIdAdminCreates or updates auto-fill config for a table
GET/admin/bots/scheduler/configAdminReturns the full scheduler configuration
PUT/admin/bots/scheduler/configAdminUpdates scheduler config
GET/admin/bots/scheduler/sessionsAdminReturns all active sessions with bot info, identity, table, timing, and stacks
GET/admin/bots/scheduler/sessions/:botId/historyAdminReturns session history for a specific bot
POST/admin/bots/scheduler/startAdminStarts the scheduler
GET/admin/bots/scheduler/statusAdminReturns scheduler running state, active session count, and last check timestamp
POST/admin/bots/scheduler/stopAdminStops the scheduler
GET/admin/bots/statsAdminGet bot manager statistics
GET/admin/bots/strategiesAdminGet available bot strategies (from DB-backed strategy profiles)
GET/admin/bots/strategy-profilesAdminList all strategy profiles (built-in first, then custom)
POST/admin/bots/strategy-profilesAdminCreate a custom strategy profile
DELETE/admin/bots/strategy-profiles/:idAdminDelete a custom strategy profile
GET/admin/bots/strategy-profiles/:idAdminGet a single strategy profile by ID
PUT/admin/bots/strategy-profiles/:idAdminUpdate a strategy profile

Bulk Email

MethodPathAuthDescription
POST/admin/bulk-emails/audience-countAdminEstimate audience count for given targeting criteria

Chargebacks

MethodPathAuthDescription
GET/admin/chargebacksAdmin; toggle chargebacksList chargebacks with filters
GET/admin/chargebacks/:idAdmin; toggle chargebacksGet chargeback details with history
PATCH/admin/chargebacks/:idAdmin; toggle chargebacksUpdate chargeback status
GET/admin/chargebacks/:id/auditAdmin; toggle chargebacksGet complete audit trail for a chargeback
POST/admin/chargebacks/:id/evidenceAdmin; toggle chargebacksAdd evidence files to a chargeback
POST/admin/chargebacks/bulk-importAdmin; toggle chargebacksBulk import chargebacks from CSV data

Circuit Breakers

MethodPathAuthDescription
GET/admin/circuitsAdminList all available circuit breakers
POST/admin/circuits/:name/resetSuper adminManually reset a circuit breaker to CLOSED state

Coupons

MethodPathAuthDescription
PATCH/admin/coupons/:couponIdAdmin; toggle couponsUpdate a coupon (description, expiresAt, isActive)
GET/admin/coupons/redemptionsAdmin; toggle couponsGet coupon redemption history

Dead Letter Queue

MethodPathAuthDescription
GET/admin/dead-letter-queueAdminList DLQ items with filtering and pagination
DELETE/admin/dead-letter-queue/:idSuper adminDelete a specific DLQ item
GET/admin/dead-letter-queue/:idAdminGet a specific DLQ item by ID
POST/admin/dead-letter-queue/:id/retrySuper adminForce retry a specific DLQ item
GET/admin/dead-letter-queue/statsAdminGet DLQ statistics

Deposit Requests

MethodPathAuthDescription
POST/admin/deposit-requests/:depositId/approveAdminApprove a pending deposit request (credits user’s balance)
POST/admin/deposit-requests/:depositId/rejectAdminReject a pending deposit request
GET/admin/deposit-requests/pendingAdminGet all pending deposit requests with pagination
GET/admin/deposit-requests/pending-countAdminGet count of pending deposit requests

Developer Partners

MethodPathAuthDescription
GET/admin/developer/audit-logAdminPaginated audit log with filters
DELETE/admin/developer/keys/:keyIdAdminRevoke an API key immediately
PUT/admin/developer/keys/:keyIdAdminUpdate mutable fields on an API key
POST/admin/developer/keys/:keyId/rotateAdminRotate the secret for an API key
GET/admin/developer/partnersAdminList partners with pagination and filters
POST/admin/developer/partnersAdminCreate a new partner (admin-created, auto-approved)
DELETE/admin/developer/partners/:idAdminDelete a partner (requires confirm=true query param)
GET/admin/developer/partners/:idAdminGet a single partner with stats
PUT/admin/developer/partners/:idAdminUpdate partner fields
POST/admin/developer/partners/:id/approveAdminApprove a pending partner, optionally generating an API key
POST/admin/developer/partners/:id/reactivateAdminReactivate a suspended partner
POST/admin/developer/partners/:id/rejectAdminReject a partner (deletes the record)
POST/admin/developer/partners/:id/suspendAdminSuspend an active partner
POST/admin/developer/partners/:id/webhook-secretAdminGenerate (or rotate) a webhook signing secret for a partner
GET/admin/developer/partners/:partnerId/keysAdminList API keys for a partner (never includes decrypted secrets)
POST/admin/developer/partners/:partnerId/keysAdminGenerate a new API key for a partner
GET/admin/developer/partners/:partnerId/usersAdminList external user mappings for a partner (paginated)
GET/admin/developer/settingsSuper adminGet developer settings (super admin only)
PUT/admin/developer/settingsSuper adminUpdate developer settings (super admin only)
GET/admin/developer/webhooks/deliveriesAdminPaginated webhook deliveries with filters
POST/admin/developer/webhooks/deliveries/:id/retryAdminManually retry a failed webhook delivery
GET/admin/developer/webhooks/statsAdminAggregate delivery stats

Economy

MethodPathAuthDescription
GET/admin/economy/packagesAdminList currency packages
POST/admin/economy/packagesSuper adminCreate a currency package
DELETE/admin/economy/packages/:packageIdSuper adminDelete a currency package
PATCH/admin/economy/packages/:packageIdSuper adminUpdate a currency package
GET/admin/economy/ratesAdminList currency rates
POST/admin/economy/ratesSuper adminSet a currency rate
GET/admin/economy/reconciliationAdminRun economy reconciliation
GET/admin/economy/settingsAdminGet economy settings
PUT/admin/economy/settingsSuper adminUpdate economy settings
GET/admin/economy/summaryAdminGet wallet and economy summary

Email Templates

MethodPathAuthDescription
GET/admin/email-templates/:templateId/defaultAdminGet the default content for a system template
POST/admin/email-templates/:templateId/duplicateAdminDuplicate an email template
POST/admin/email-templates/:templateId/revertAdminRevert a system template to its default content

Financial Summary

MethodPathAuthDescription
GET/admin/financial/summaryAdminGet financial summary for dashboard cards with optional date range and period comparison

Fraud Alerts

MethodPathAuthDescription
GET/admin/fraud-alertsAdmin; toggle fraudAlertsList fraud alerts with filters
GET/admin/fraud-alerts/:idAdmin; toggle fraudAlertsGet fraud alert details with evidence
PATCH/admin/fraud-alerts/:idAdmin; toggle fraudAlertsUpdate fraud alert status, assignment, or resolution
GET/admin/fraud-alerts/:id/relatedAdmin; toggle fraudAlertsGet related accounts and alerts for investigation

Fraud Cases

MethodPathAuthDescription
GET/admin/fraud-casesAdmin; toggle fraudAlertsList fraud cases
GET/admin/fraud-cases/:idAdmin; toggle fraudAlertsGet a fraud case
PATCH/admin/fraud-cases/:idAdmin; toggle fraudAlertsUpdate a fraud case
POST/admin/fraud-cases/:id/reopenAdmin; toggle fraudAlertsReopen a fraud case
GET/admin/fraud-cases/:id/replay-fixtureAdmin; toggle fraudAlertsGet a fraud case replay fixture
GET/admin/fraud-cases/detector-configsAdmin; toggle fraudAlertsList detector configs
POST/admin/fraud-cases/detector-configsAdmin; toggle fraudAlertsCreate a detector config
POST/admin/fraud-cases/detector-configs/:detectorName/:version/promoteAdmin; toggle fraudAlertsPromote a detector config version
POST/admin/fraud-cases/detector-configs/:detectorName/rollbackAdmin; toggle fraudAlertsRoll back a detector config
POST/admin/fraud-cases/sweepAdmin; toggle fraudAlertsRun a fraud sweep

Game Scheduler

MethodPathAuthDescription
GET/admin/game-scheduler/configAdminReturns the game scheduler configuration
PUT/admin/game-scheduler/configAdminUpdates game scheduler config
POST/admin/game-scheduler/force-checkAdminTriggers an immediate scheduler check
POST/admin/game-scheduler/quick-setupAdminExecute a quick-setup config to generate templates
POST/admin/game-scheduler/quick-setup/previewAdminPreview the templates that would be created by a quick-setup config
POST/admin/game-scheduler/startAdminStarts the game scheduler
GET/admin/game-scheduler/statusAdminReturns scheduler status with stats
POST/admin/game-scheduler/stopAdminStops the game scheduler
GET/admin/game-scheduler/templatesAdminList templates with optional filters and pagination
POST/admin/game-scheduler/templatesAdminCreate a new table template
DELETE/admin/game-scheduler/templates/:idAdminDelete a template
GET/admin/game-scheduler/templates/:idAdminGet a single template by ID
PUT/admin/game-scheduler/templates/:idAdminUpdate a template
POST/admin/game-scheduler/templates/:id/disableAdminDisable a template
POST/admin/game-scheduler/templates/:id/enableAdminEnable a template

Game History

MethodPathAuthDescription
GET/admin/gamesAdminList games
GET/admin/games/:gameIdAdminGet a game
GET/admin/games/:gameId/auditAdminGet a game audit trail
POST/admin/games/:gameId/procedure/repairAdminApply a hand repair procedure
POST/admin/games/:gameId/procedure/voidAdminVoid a hand

Groups

MethodPathAuthDescription
DELETE/admin/groups/:groupId/permissionsSuper adminRemove all feature overrides for a group (revert to hierarchy defaults)
GET/admin/groups/:groupId/permissionsSuper adminGet the effective permissions for a group (hierarchy + overrides)
PUT/admin/groups/:groupId/permissionsSuper adminSet feature overrides for a group
DELETE/admin/groups/:groupId/permissions/:featureSuper adminRemove a specific feature override (revert to hierarchy default)

Languages

MethodPathAuthDescription
GET/admin/languages/:languageId/namespacesAdminGet distinct namespace prefixes for a language
POST/admin/languages/:languageId/seed-defaultsAdminSeed default English phrases for a language

License

MethodPathAuthDescription
GET/admin/licenseAdminGet current license status and details
GET/admin/license/logsAdminView license verification history
POST/admin/license/verifyAdminTrigger an immediate license re-verification

Logs

MethodPathAuthDescription
GET/admin/logs/errorsAdminList error logs
GET/admin/logs/performanceAdminList performance logs
GET/admin/logs/securityAdminList security logs

Pages

MethodPathAuthDescription
DELETE/admin/pages/:pageId/groupsAdminRemove all group access for a page
GET/admin/pages/:pageId/groupsAdminGet group access entries for a page
PUT/admin/pages/:pageId/groupsAdminSet group access for a page (replaces all existing)

Payment Systems

MethodPathAuthDescription
GET/admin/payment-systemsAdminList all payment systems (without sensitive config)
POST/admin/payment-systemsSuper adminCreate a new payment system
DELETE/admin/payment-systems/:idSuper adminDelete a payment system
GET/admin/payment-systems/:idAdminGet a single payment system
PATCH/admin/payment-systems/:idSuper adminUpdate payment system toggles (deposits/withdrawals enabled)
POST/admin/payment-systems/:id/testSuper adminTest payment provider connection/configuration
GET/admin/payment-systems/provider-typesAdminGet list of available provider types (built-in + plugin-registered)

Plugins

MethodPathAuthDescription
GET/admin/pluginsAdminList all installed plugins
DELETE/admin/plugins/:idSuper adminDelete an inactive plugin (super-admin only)
GET/admin/plugins/:idAdminGet single plugin details
POST/admin/plugins/:id/activateSuper adminActivate a plugin (super-admin only)
POST/admin/plugins/:id/deactivateSuper adminDeactivate a plugin (super-admin only)
POST/admin/plugins/:id/upgradeSuper adminUpgrade a plugin with a new .tgz file (super-admin only)
POST/admin/plugins/:providerType/health-checkAdminTrigger an on-demand health check for a plugin (admin only)
GET/admin/plugins/:providerType/settingsAdminGet all settings for a plugin
PUT/admin/plugins/:providerType/settingsSuper adminSave settings for a plugin (super-admin only)
POST/admin/plugins/uploadSuper adminUpload and install a plugin .tgz file (super-admin only)

Private Tables

MethodPathAuthDescription
GET/admin/private-tablesAdminList all private tables with pagination and search
DELETE/admin/private-tables/:idAdminDelete a private table (DB record + in-memory game table)
PATCH/admin/private-tables/:id/styleAdminAssign or clear the visual style for a private table

Sanctions Checks

MethodPathAuthDescription
GET/admin/sanctions-checksAdmin; toggle kycVerificationList sanctions checks with filtering and pagination
GET/admin/sanctions-checks/:idAdmin; toggle kycVerificationGet sanctions check details
POST/admin/sanctions-checks/:id/recheckAdmin; toggle kycVerificationRe-run a sanctions check for a user
GET/admin/sanctions-checks/statsAdmin; toggle kycVerificationGet sanctions check statistics

Sessions

MethodPathAuthDescription
GET/admin/sessionsAdminList all table sessions with optional filters
GET/admin/sessions/:sessionIdAdminGet detailed information about a specific table session

Settings

MethodPathAuthDescription
GET/admin/settings/agent-hierarchyAdmin; toggle agentsGet current agent hierarchy settings
PATCH/admin/settings/agent-hierarchyAdmin; toggle agentsUpdate agent hierarchy settings (partial update)
POST/admin/settings/agent-hierarchy/resetAdmin; toggle agentsReset agent hierarchy settings to defaults
GET/admin/settings/agent-profitAdmin; toggle agentsGet current agent profit settings
PATCH/admin/settings/agent-profitAdmin; toggle agentsUpdate agent profit settings (partial update)
GET/admin/settings/agent-transfer-policyAdmin; toggle agentsGet current agent-to-agent transfer policy
PUT/admin/settings/agent-transfer-policyAdmin; toggle agentsSet agent-to-agent transfer policy
POST/admin/settings/test-smtpSuper adminTest SMTP configuration with optional test email

System

MethodPathAuthDescription
DELETE/admin/system/drainSuper adminCancel a live session drain
GET/admin/system/drainSuper adminGet live session drain status
POST/admin/system/drainSuper adminBegin a live session drain
POST/admin/system/drain/finalizeSuper adminFinalize a live session drain

System Emails

MethodPathAuthDescription
GET/admin/system-emailsAdminGet all system email configurations
PATCH/admin/system-emails/:eventTypeSuper adminUpdate configuration for a specific system email event
POST/admin/system-emails/:eventType/testAdminSend a test email for a specific system email event type

Table Styles

MethodPathAuthDescription
POST/admin/table-styles/:styleId/set-default-privateAdminSet a table style as the default for private tables
GET/admin/table-styles/default-privateAdminGet the default table style for private tables

Tables

MethodPathAuthDescription
DELETE/admin/tables/:tableId/bot-autofillAdminRemoves auto-fill config for a table
GET/admin/tables/:tableId/bot-autofillAdminReturns auto-fill config for a table (or 404 if none)
PUT/admin/tables/:tableId/bot-autofillAdminCreates or updates auto-fill config for a table
DELETE/admin/tables/:tableId/botsAdminRemove all bots from a table
GET/admin/tables/:tableId/botsAdminGet all bots at a specific table
POST/admin/tables/:tableId/botsAdminAdd a bot to a table
DELETE/admin/tables/:tableId/bots/:botIdAdminRemove a bot from a table
POST/admin/tables/:tableId/bots/fillAdminFill empty seats at a table with bots
POST/admin/tables/:tableId/force-timeoutAdminForce-timeout the current player at a table (admin recovery tool)
POST/admin/tables/:tableId/players/:playerId/removeAdminForce-remove a player from a table (admin recovery tool)
POST/admin/tables/:tableId/reloadAdminReload an orphaned table from the database into memory
POST/admin/tables/bulk-deleteAdminDelete multiple poker tables
GET/admin/tables/countAdminGet total and active table counts for dashboard

Tickets

MethodPathAuthDescription
POST/admin/tickets/:ticketId/refundAdminManually refund a single ACTIVE satellite ticket
GET/admin/tickets/tournament/:tournamentIdAdminGet all tickets for a satellite tournament

Tournaments

MethodPathAuthDescription
GET/admin/tournamentsAdminList tournaments with filtering and pagination
POST/admin/tournamentsAdminCreate a new tournament
DELETE/admin/tournaments/:idAdminDelete a tournament
GET/admin/tournaments/:idAdminGet a single tournament by ID (full data for admin editing)
PATCH/admin/tournaments/:idAdminUpdate a tournament
POST/admin/tournaments/:id/advance-levelAdminAdvance the tournament blind/ante level by rule-profile timing policy
POST/admin/tournaments/:id/breakAdminSchedule a synchronized break
POST/admin/tournaments/:id/cancelAdminCancel a tournament
GET/admin/tournaments/:id/clockAdminGet tournament clock, level, ante, break, and pause state
GET/admin/tournaments/:id/floorAdminGet tournament floor state
POST/admin/tournaments/:id/floor/hand-for-handAdminFloor: set hand-for-hand
POST/admin/tournaments/:id/floor/hand-repairAdminFloor: repair a hand
POST/admin/tournaments/:id/floor/hand-voidAdminFloor: void a hand
POST/admin/tournaments/:id/floor/noteAdminFloor: add a note
POST/admin/tournaments/:id/floor/pauseAdminFloor: pause
POST/admin/tournaments/:id/floor/payout-holdAdminFloor: hold payouts
POST/admin/tournaments/:id/floor/payout-releaseAdminFloor: release payouts
POST/admin/tournaments/:id/floor/player-penaltyAdminFloor: penalize a player
POST/admin/tournaments/:id/floor/player-sit-outAdminFloor: sit out a player
POST/admin/tournaments/:id/floor/player-warningAdminFloor: warn a player
POST/admin/tournaments/:id/floor/resumeAdminFloor: resume
POST/admin/tournaments/:id/floor/seating-repairAdminFloor: repair seating
POST/admin/tournaments/:id/force-endAdminForce-end a tournament with configurable mode
POST/admin/tournaments/:id/hand-for-handAdminActivate or deactivate hand-for-hand mode for a running tournament
GET/admin/tournaments/:id/healthAdminRun all invariant checks for a tournament and return a health report
GET/admin/tournaments/:id/historyAdminGet audited admin tournament level, break, pause, resume, and control changes
POST/admin/tournaments/:id/pauseAdminPause a running tournament
POST/admin/tournaments/:id/resumeAdminResume a paused tournament
POST/admin/tournaments/:id/startAdminStart a tournament
GET/admin/tournaments/countAdminGet tournament counts by status
GET/admin/tournaments/sng-templatesAdminList all SnG templates with count of active instances
POST/admin/tournaments/sng-templatesAdminCreate a new SnG template tournament, then create the first lobby instance
DELETE/admin/tournaments/sng-templates/:idAdminSoft deactivate: set autoCreate to false on the template (stops new instance creation)
PUT/admin/tournaments/sng-templates/:idAdminUpdate template fields

Transactions

MethodPathAuthDescription
GET/admin/transactionsAdminGet transactions with filtering and pagination
GET/admin/transactions/:idAdminGet a single transaction with user info and payment provider data
PUT/admin/transactions/:id/approveAdmin; toggle agentsApprove a pending transaction
PUT/admin/transactions/:id/rejectAdmin; toggle agentsReject a pending transaction
GET/admin/transactions/method-volumeAdminGet transaction volume breakdown by payment method for deposits and withdrawals
GET/admin/transactions/provider-statsAdminGet deposit success rates by payment provider/method
GET/admin/transactions/statsAdminGet deposit statistics for summary cards
GET/admin/transactions/top-usersAdminGet top depositors and withdrawers for the period
GET/admin/transactions/type-distributionAdminGet transaction volume breakdown by type
GET/admin/transactions/volumeAdminGet daily transaction volume for deposits and withdrawals

Updates

MethodPathAuthDescription
GET/admin/updatesAdminGet update status
POST/admin/updates/applySuper adminApply an update
POST/admin/updates/checkSuper adminCheck for updates
PATCH/admin/updates/configSuper adminUpdate updater configuration
GET/admin/updates/historyAdminList update runs
GET/admin/updates/history/:runIdAdminGet an update run
GET/admin/updates/logsAdminGet updater logs
POST/admin/updates/preflightSuper adminRun update preflight checks

Users

MethodPathAuthDescription
POST/admin/users/:userId/balance-adjustmentAdminAdjust a user’s balance (requires admin password verification)
GET/admin/users/:userId/balance-adjustment/historyAdminGet balance adjustment history for a user
POST/admin/users/:userId/force-disconnectAdminForce-disconnect a user: revoke sessions, disconnect sockets, optionally remove from table
POST/admin/users/:userId/freezeAdminFreeze a user account for fraud investigation
POST/admin/users/:userId/reset-2faAdminReset a user’s 2FA (disables 2FA without token verification)
POST/admin/users/:userId/unfreezeAdminUnfreeze a user account after fraud investigation
GET/admin/users/countAdminGet total and active user counts for dashboard

Verification Requests

MethodPathAuthDescription
PATCH/admin/verification-requests/:requestId/notesAdmin; toggle kycVerificationUpdate review notes for a verification request

Wallet Aggregator

MethodPathAuthDescription
GET/admin/wallet-aggregator/adapter-typesSuper adminList wallet adapter types
GET/admin/wallet-aggregator/discrepanciesSuper adminList wallet discrepancies
POST/admin/wallet-aggregator/discrepancies/:id/resolveSuper adminResolve a wallet discrepancy
GET/admin/wallet-aggregator/healthSuper adminGet wallet aggregator health
GET/admin/wallet-aggregator/providersSuper adminList wallet providers
POST/admin/wallet-aggregator/providersSuper adminCreate a wallet provider
DELETE/admin/wallet-aggregator/providers/:idSuper adminDelete a wallet provider
PUT/admin/wallet-aggregator/providers/:idSuper adminUpdate a wallet provider
POST/admin/wallet-aggregator/providers/:id/testSuper adminTest a wallet provider
GET/admin/wallet-aggregator/roundsSuper adminList game rounds
POST/admin/wallet-aggregator/sessionsSuper adminCreate a wallet session
GET/admin/wallet-aggregator/transactionsSuper adminList wallet transactions

Word Filters

MethodPathAuthDescription
GET/admin/word-filtersAdminList all word filters
POST/admin/word-filtersSuper adminAdd a word to the filter list
DELETE/admin/word-filters/:idSuper adminRemove a word from the filter list
PATCH/admin/word-filters/:idSuper adminToggle word filter active state
POST/admin/word-filters/batchSuper adminBatch import words to the filter list

Rate Limiting

API endpoints are rate limited to prevent abuse:

EndpointLimit
Login10 requests / 15 minutes
Registration3 requests / hour
Forgot password3 requests / hour
Reset password5 requests / hour
Email verification10 requests / hour
Token refresh20 requests / minute
2FA verification5 requests / 15 minutes
Authenticated user API100 requests / minute
Admin reads100 requests / minute
Admin writes20 requests / minute
Tournament financial mutations10 requests / minute

Rate limit headers are included in responses:

  • RateLimit-Limit: Maximum requests allowed
  • RateLimit-Remaining: Requests remaining
  • RateLimit-Reset: Seconds until the limit resets

Versioning

The API uses URL versioning. Current version: v1.

The legacy paths /api/account, /api/statistics, /api/agent and /api/leaderboard redirect with 308 to their /api/v1 equivalents.

Try the live demo Pricing

Have questions about Poker Engine? We reply fast.