Skip to content

Game Launch

Operator → Beexar

Beexar provides two launch endpoints: one for real-money sessions and one for demo sessions with virtual balance.


POST {GATEWAY_URL}/api/v1/softswiss/launcher/real

HeaderValue
Content-Typeapplication/json
X-REQUEST-SIGNHMAC-SHA256 signature of the request body (64 hex chars)
FieldTypeRequiredDescription
casino_idstringYesOperator slug (e.g. "casinoxyz")
gamestringYesGame slug (e.g. "dice", "slots", "crash")
accountobjectYesPlayer account details
account.idstringYesPlayer ID on your side (max 255 chars)
account.currencystringYesCurrency code (e.g. "USD", "EUR", or custom "CUSTOM_TOKEN")
account.nicknamestringNoPlayer nickname (may be displayed in multiplayer games)
account.countrystringNoISO 3166-1 alpha-2 country code
localestringNoUI language (default: "en")
ipstringNoPlayer IP address (IPv4 or IPv6)
client_typestringNo"desktop" or "mobile"
urls.return_urlstringNoURL to redirect player after game
urls.deposit_urlstringNoURL for player to make a deposit
jurisdictionstringNoCountry code for regulatory restrictions (e.g. "DE", "CA-ON")
session_idstringNoYour session identifier (UUID) for round tracking
session_payloadstringNoOpaque string (max 4096 chars) echoed back in every wallet callback
{
"casino_id": "casinoxyz",
"game": "dice",
"account": {
"id": "player_123",
"currency": "USD",
"nickname": "LuckyPlayer"
},
"locale": "en",
"client_type": "desktop",
"urls": {
"return_url": "https://casino.example.com/lobby",
"deposit_url": "https://casino.example.com/deposit"
}
}
{
"launch_url": "https://games.beexar.com/dice/casinoxyz/dice-game?token=a1b2c3d4e5f6..."
}
FieldTypeDescription
launch_urlstringFull URL to launch the game (embed in iframe or redirect)

POST {GATEWAY_URL}/api/v1/softswiss/launcher/demo

Demo sessions use a virtual balance stored in Beexar — no wallet callbacks are triggered during demo play.

ModeAuthenticationUse Case
Operator modeX-REQUEST-SIGN with real HMAC signatureCasino backend launches demo for a known player
Frontend modeX-REQUEST-SIGN: 0000...0000 (64 zeros)Game lobby or website launches anonymous demo
FieldTypeRequiredDescription
casino_idstringYesOperator slug
gamestringYesGame slug
currencystringNoCurrency for virtual balance (default: "USD")
balancestringNoInitial virtual balance (default: "10000")
player_idstringNoAnonymous player ID (for frontend mode, stored in localStorage)
localestringNoUI language
{
"casino_id": "casinoxyz",
"game": "slots",
"currency": "USD",
"balance": "5000"
}
Terminal window
curl -X POST https://gateway.beexar.com/api/v1/softswiss/launcher/demo \
-H "Content-Type: application/json" \
-H "X-REQUEST-SIGN: 0000000000000000000000000000000000000000000000000000000000000000" \
-d '{
"casino_id": "casinoxyz",
"game": "dice",
"player_id": "anon_abc123"
}'
{
"launch_url": "https://games.beexar.com/dice/casinoxyz/dice-game/demo?token=demo_a1b2c3...&balance=10000&currency=USD"
}

Both endpoints answer with the SoftSwiss Twirp envelope. Only two values ever appear in codeinvalid_argument and internal — and the specific meaning is carried by meta.api_code. Branch on meta.api_code, never on code.

HTTPcodemeta.api_codeMeaning
403invalid_argument403Invalid request signature
400invalid_argument400Malformed body or schema validation failure — meta.api_message names the offending field
400invalid_argument404casino_id not found, or it does not match the operator
400invalid_argument405Game is not available to your casino
400invalid_argument410Casino is disabled
400invalid_argument420This endpoint is not available for the operator’s integration type
400invalid_argument154Currency not allowed — also returned when the currency needs an active feature subscription, or when bet limits are not configured for it. See Custom Currencies
500internal500Internal error, or a temporarily unavailable game-availability check. Retryable
{
"code": "invalid_argument",
"msg": "invalid request signature",
"meta": {
"api_code": "403",
"api_message": "invalid request signature"
}
}

<iframe
src="https://games.beexar.com/dice/casinoxyz/dice-game?token=a1b2c3d4..."
style="width: 100%; height: 100vh; border: none;"
allow="autoplay"
sandbox="allow-scripts allow-same-origin allow-popups"
></iframe>

For mobile browsers, redirect the player directly to the launch_url:

if (isMobile()) {
window.location.href = launchUrl;
} else {
document.getElementById('game-frame').src = launchUrl;
}
DeviceStrategyImplementation
DesktopiframeEmbed launch_url in <iframe>
MobileRedirectRedirect to launch_url directly
AutoDetectCheck User-Agent or use client_type field

Terminal window
BODY='{"casino_id":"casinoxyz","game":"dice","account":{"id":"player_123","currency":"USD"}}'
SIGNATURE=$(echo -n "$BODY" | openssl dgst -sha256 -hmac "your_auth_token" | awk '{print $2}')
curl -X POST https://gateway.beexar.com/api/v1/softswiss/launcher/real \
-H "Content-Type: application/json" \
-H "X-REQUEST-SIGN: $SIGNATURE" \
-d "$BODY"

The launch_url follows this pattern:

ModeURL Format
Realhttps://games.beexar.com/{game_type}/{casino_slug}/{game_slug}?token={session_token}
Demohttps://games.beexar.com/{game_type}/{casino_slug}/{game_slug}/demo?token={demo_token}&balance={amount}&currency={code}

The game frontend extracts the token from the URL and uses it for all subsequent API calls to Beexar.


Once a session is created:

  1. The session is valid for 30 minutes with a sliding window — active players get auto-extended
  2. Beexar sends wallet requests (/balance, /betwin, /rollback, /finish) to your callback URLs (real-money only)
  3. When the session expires or the player closes the game, open rounds are finalized
  4. If return_url was provided, the player is redirected there