Skip to content

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

MemberReturnsAuthDescription
getGames(query?)Promise<Game[]>publicThe game catalog, filtered and paginated
getCategories()Promise<GameCategory[]>publicCategory metadata (lobby filters)
getProviders()Promise<GameProvider[]>publicProvider 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

ValueTypeDefault / rangeEffect
Game catalogper gameoperator-definedWhich games appear, their metadata, and asset sets
Category & provider metadataper entryoperator-definedLobby filters, names, slugs, assets
Featuringper gameoperator-definedisFeatured 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.