Catalogue
Two calls tell you what you may launch. Both are signed like every operator API call and are rate limited per operator.
GET /v1/product
The products you may launch from: [{ "product": "runecode", "name": "RuneCode" }].
GET /v1/{product}/game?after=<int64>
{ "updated": 1792000000,
"games": [ { "product": "runecode", "publisher": "wizards", "game": "royal-tiger-v2",
"name": "Royal Tiger v2", "rtp": "96.20", "updated": 1792000000, "image": "https://…/cover.webp" } ] }
- The
(product, publisher, game)triple identifies a game; pass it unchanged to the launch call. rtpis the return-to-player of the release assigned to your operator, as an exact decimal string (for example"96.20"), never a floating-point number.imageis omitted, notnull, when there is none.- Incremental sync: pass the
updatedof your previous response asafter. The boundary is inclusive, so de-duplicate by the slug triple. Incremental sync never reports removals: do a full refresh (noafter) periodically, for example daily. - The list contains exactly the games a launch would currently accept for at least one of your currencies and jurisdictions: a listed game is never unlaunchable.
- The response carries a strong
ETagandCache-Control: private, max-age=3600; sendIf-None-Matchto get304. - An unknown product is
404.
The SDKs: rgs.products() and rgs.games(product, after?).
Rate limit
The catalogue allows about one request per second per operator (burst 5). Cache it; do not call it per player request.
Planned: the richer catalogue
A paginated GET /runecode/v1/catalogue with media, mode, volatility, bet-level, jurisdiction and release fields is specified but not served yet: see Availability.