Reference
Go-live checklist
Complete every item in the sandbox before requesting production credentials.
Launch
-
request-accessis called only from your servers. The access token never reaches a browser. - A new session is opened for every launch.
-
game_urlandsession_tokenare not logged or sent to analytics. -
currencyandlangmatch the player's account.
Wallet
- All four endpoints are registered and reachable over HTTPS.
-
X-Koi-Signatureis verified on the raw body, in constant time, before any processing. - Bet answers arrive in under 10 seconds, balance checks in under 3 seconds.
- Bets and wins are idempotent by
provider_tx_id, rollbacks bylinked_tx_id, with a unique constraint in your database. - Refusals use a non-2xx status with
status: "DENIED"and a documentedcode. - Wins are credited even after the session expired.
- A rollback for an unknown bet is accepted without moving funds.
- Responses carry
old_balance,new_balanceandoperator_tx_id.
Test rounds
Run and keep evidence of these cases with KOI in the sandbox:
| Case | Expected |
|---|---|
| Bet and win | Bet debited once, win credited once. |
| Losing bet | Bet debited, no win callback. |
| Insufficient funds | Bet refused with INSUFFICIENT_FUNDS, no debit. |
| Bet timeout | Bet retried once, then rolled back. Balance unchanged at the end. |
| Duplicate bet | Second delivery returns the first result, no second debit. |
| Win retry | Win delivered twice, credited once. |
| Invalid signature | Request rejected, no wallet movement. |
| Free bets | Grant a bonus, play all rounds: no bet or win callbacks, then one bonus_win with the total, credited once. |
| Free bets cancelled | Cancel after one round: one bonus_win with rounds_remaining above 0. |
Reconciliation
- You store KOI
provider_tx_id,round_idand youroperator_tx_idfor every movement. - You have a contact for reconciliation questions.