Appearance
Game Catalog & Assets
The Game Aggregator abstracts away multiple game providers (Pragmatic Play, Evolution, NetEnt) behind one unified catalog. The frontend interacts with a single typed catalog; operators add or remove providers and games in their backoffice with no SDK update.
Public surface
| Member | Returns | Auth | Description |
|---|---|---|---|
getGames(query?) | Promise<Game[]> | public | The game catalog, filtered and paginated |
getCategories() | Promise<GameCategory[]> | public | Category metadata (lobby filters) |
getProviders() | Promise<GameProvider[]> | public | Provider metadata (logos, filters) |
The catalog, categories, and providers are public lobby data; no session required. Launching games and round history are authenticated.
Query
typescript
interface GameQuery {
limit?: number; // default 20, max 100 (values above max are clamped)
offset?: number; // default 0
search?: string; // case-insensitive match on game name
categoryId?: string; // exact match on a category id from getCategories()
providerId?: string; // exact match on a provider id from getProviders()
isFeatured?: boolean;
}Deterministic ordering: name ascending, then id, identical across reads, so pages never skip or duplicate a row.
Typed structures
typescript
interface Game {
id: string; // e.g. 'game_sweet_bonanza'; pass to launchGame
name: string; // display name
provider: string; // provider id, e.g. 'PRAGMATIC_PLAY'
categories: string[]; // category ids this game belongs to
assets: GameAssets; // normalized image assets (below)
hasDemo: boolean; // whether DEMO mode is offered for this game
isFeatured: boolean; // lobby featuring flag
}
interface GameCategory {
id: string; // e.g. 'SLOTS'
name: string; // display name, e.g. 'Slots'
slug: string; // URL-safe identifier for routing
assets?: GameAssets;
}
interface GameProvider {
id: string; // e.g. 'PRAGMATIC_PLAY'
name: string; // display name
assets?: GameAssets;
}Dynamic image assets
Providers supply images in varying formats; the platform normalizes them into shapes and sizes. Use whichever fits your UI:
typescript
interface ImageSet {
small: string;
medium: string;
large: string;
}
interface GameAssets {
square: ImageSet; // always present (e.g. 200×200 tiles)
circle?: ImageSet; // optional (avatar-style UIs)
wide?: ImageSet; // optional (banners, e.g. 400×200)
}javascript
const games = await sdk.games.getGames({ limit: 5 });
const thumbnailUrl = games[0].assets.square.medium;Operator-configurable values
| Value | Type | Default / range | Effect |
|---|---|---|---|
| Game catalog | per game | operator-defined | Which games appear, their metadata, and asset sets |
| Category & provider metadata | per entry | operator-defined | Lobby filters, names, slugs, assets |
| Featuring | per game | operator-defined | isFeatured ordering input |
Category/provider ids, the asset normalization shapes, and the catalog structures are platform-fixed.
Sandbox
3 seeded games (Sweet Bonanza, Crazy Time, Starburst) across 3 providers, with full image sets on games, categories, and providers. See Environments & Sandbox Data.