Appearance
Game Registration
After uploading a PAR sheet, you register a game configuration to make it playable. A game configuration links a PAR sheet to partner-specific settings like the display name. The wager is not a game setting — it is fixed at the PAR sheet's denomination (see Fixed Wager below).
What a Game Configuration Contains
| Field | Description | Required? |
|---|---|---|
parSheetId | The PAR sheet this game uses (must be ACTIVE) | Required |
displayName | The name players see (e.g., "Lucky Sevens") | Required |
configName | A unique system identifier (e.g., "LUCKY_SEVENS") | Required |
The wager band fields (minWagerUsd / maxWagerUsd / wagerIncrementUsd) are optional and all fixed at the PAR denomination — see Fixed Wager. Omit them; if you send them, each must equal the denomination.
Registering a Game
With the SDK
typescript
import { KingstoneClient } from '@kingstoneapp/sdk';
const client = new KingstoneClient({
apiKey: 'ks_sandbox_your_key_here',
sandbox: true,
});
const game = await client.registerGame({
parSheetId: 1, // from uploadParSheet response
displayName: 'Lucky Sevens',
configName: 'LUCKY_SEVENS',
});
console.log(`Game registered: ID ${game.gameConfigId}`);
console.log(` Config: ${game.configName}`);
console.log(` Fixed wager: $${game.minWagerUsd}`); // === maxWagerUsd === wagerIncrementUsd === PAR denominationWith curl
bash
curl -X POST https://sandbox.kingstone.dev/api/partner/v1/games \
-H "X-API-Key: ks_sandbox_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"parSheetId": 1,
"displayName": "Lucky Sevens",
"configName": "LUCKY_SEVENS"
}'Config Name Rules
The configName is a unique system identifier for your game. It must be unique across all of your partner's games. Use uppercase letters, numbers, and underscores (e.g., LUCKY_SEVENS, STAMPEDE_GOLD_5REEL).
If you try to register a game with a configName that already exists, the API returns error KS-4108 (HTTP 409).
Fixed Wager
Every KINGSTONE game is fixed-wager: each spin wagers exactly the PAR sheet's denominationUsd. There is no player-selectable bet range.
- You do not set a wager band — the wager is the PAR denomination.
- The band fields (
minWagerUsd,maxWagerUsd,wagerIncrementUsd) are optional; if supplied, each must equal the denomination, or registration is rejected withKS-4103. - On the registered game, all three come back equal to the denomination.
- A spin's
wagerUsdmust equal that fixed wager. Any other amount is rejected withKS-4103.
To offer a different price point, use a PAR sheet with a different denominationUsd.
Multiple Games per PAR Sheet
You can register multiple game configurations from the same PAR sheet — useful for offering the same math model under different branding. Each configuration gets its own outcome queue and SPP counter, so they operate completely independently. (Both share the same fixed wager, since that is the PAR denomination.)
typescript
// Same PAR sheet + same fixed wager, different branding + independent queues
await client.registerGame({
parSheetId: 1,
displayName: 'Lucky Sevens',
configName: 'LUCKY_SEVENS',
});
await client.registerGame({
parSheetId: 1,
displayName: 'Lucky Sevens — VIP',
configName: 'LUCKY_SEVENS_VIP',
});Listing Games
Retrieve all games registered by your partner account:
typescript
const { games } = await client.listGames();
for (const game of games) {
console.log(`${game.gameConfigId}: ${game.displayName} (${game.configName})`);
console.log(` Fixed wager: $${game.minWagerUsd}`); // === maxWagerUsd === wagerIncrementUsd
}Next Steps
With a game registered, you can start executing spins.
