Reference
Changelog
Sandbox domains
- The sandbox environment moved to KOI domains: Player API
https://api.koigames.appand game clienthttps://play.koigames.app. Game URLs returned byPOST /games/request-accessand cover URLs inGET /games/activatednow useplay.koigames.app. The previous*.fly.devhosts keep working during the transition. No contract change.
API 1.2
RTP profiles
- 3×3 slots accept an RTP profile per game (98, 96, 94, 92 or 90%), chosen in the KOI Backoffice. See RTP profiles.
GET /games/activatedreturns the chosen profile inrtp.value. Without a profile, the value is unchanged.- The profile is fixed at launch (
POST /games/request-access); open sessions are not affected by a change.
API 1.1
Slot mathematics
- 3×3 slots (Amazonia Adventure, Iara Folclore, Fortune Dragon, Fortune Olympus and their skins) moved to math
2026.10.1. The reels no longer contain an empty symbol: every cell always shows a symbol. Paytable, 5 lines, wild, the respin feature with its 10× full-screen multiplier and the 2500× maximum win are unchanged. Published RTP changes from 96.07 to 96.82.
Documentation fix
- Losing bets have always been closed by a
winwithamount: 0. Earlier versions of this site said losses sent no callback. Behavior did not change; treat a zero win as the settlement of the bet.
Catalog
GET /games/activatednow fillsimage_urlwith an absolute URL of the game cover hosted by KOI. It was alwaysnullbefore.
Free bets
- Free rounds no longer send bet or win callbacks. When a bonus ends, KOI sends one
bonus_winto yourrewardsendpoint with the total win, stake included. It replaces the per-round callbacks and the account option that disabled them. - Every game pays the full win of a free round, stake included. Crash, double and wall-street free rounds previously paid the profit only.
POST /games/free-betsrequiresbonus_code,quantity(positive integer) andexpires_at(at most 30 days ahead). The samebonus_codefor the same player is idempotent; reusing it with different parameters returns409.- A new grant no longer expires the player's earlier bonuses on the same game. Bonuses are queued and the one that expires first is offered first.
- New
GET /games/free-bets?user_id=lists a player's bonuses with rounds played and remaining. POST /games/alea/free-bets/cancel/{bonus_code}keeps played rounds and pays their win with abonus_win. An optional bodyuser_idcancels for one player. The response is now{ "bonus_code", "cancelled_players" }.- Bet and win callbacks no longer carry
bonus_code, andmodeis neverfreein them.
API 1.0
Launch
POST /games/request-accessrejects"demo": truewith400. The field previously opened the session under a KOI-owned account instead of yours. Usedemo_session.- An access token that is not linked to an account returns
401instead of500.
Catalog
GET /games/activatedreturnsrtp(value,source,math_version) andvolatility. Both arenulluntil published.
Free bets
POST /games/alea/free-bets/cancel/{bonus_code}requires the access token and cancels only grants of your account.
Callbacks
- Retried win and rollback callbacks now carry exactly the signed body. Previously a retry could include an extra internal field and fail signature verification.
Documentation
- New documentation site for operators and aggregators.
- Removed the loss callback page: KOI never sends a loss callback.
- Removed internal and back-office routes from the OpenAPI file.
- Documented timeouts, retries, reconciliation and idempotency keys.