Menu

Sessions

session.start

Starts a game for one player. Returns a session and a game link.

Who calls it

You → usPOST /v1/session.start

The player taps a game. Your server calls this. Sign the call with your API key. See Authentication.

Request

FieldTypeWhat it is
requestIdstringYour id for this change. Send it again after a timeout and you get the first answer back.
firstSentAtstring, UTC timeWhen you first sent this request. It stays the same on every retry. A request older than 7 days is refused.
playerIdstringYour id for the player. We send it back in every wallet call, so you know whose balance to use.
casinoSessionIdstringYour own session. We send it back in every wallet call and event.
gameIdstringWhich game to open.
currencystringWhich money the wallet calls use, and how the game shows amounts.
languagestringThe game’s words in the player’s language. A language we do not have falls back to English.
marketstringRequired: UK, SE or none. Only for rules the game itself must follow in that market. It is required, so a forgotten field can’t switch off a law.
betSettingsobjectMin, max and default bet for this player. See Bet settings.
exitUrlstring, optionalWhere the exit button goes when you can’t get client messages: a full browser page, or a Unity app that opens the browser.

Answer

FieldTypeWhat it is
sessionIdstringYou need it to close the session. You find it in every wallet call.
urlstringThe game link. Open it to show the game.
linkExpiresAtstring, UTC timeWhen the link stops working (2 minutes). Do not open a link that has expired, for example one from a late retry.

The balance is not in the answer. Our server asks your wallet when the game opens. The bet settings are not in the answer: you already have them. They are in session.get.

Errors

CodeWhenYour next step
invalid_requestA field is missing or wrong, for example a firstSentAt more than 5 minutes in the future. message names the field.Fix the call. Sending it again unchanged fails again.
request_expiredfirstSentAt is older than 7 days. Nothing is done.A bug or a stuck job on your side. Look up the result with session.get or round.get.
duplicate_mismatchA requestId we have seen comes with a different body.A bug on your side: each new change needs a new id.
game_not_foundNo game with this gameId for your account.Pull games.list again.
game_disabledThe game is turned off in the back office.Hide the game. A player with an open Mines round can still start it.
bet_settings_invalidmin is above max, default is outside them, or a value is 0 or less.Fix the bet settings.
currency_not_supportedThe currency is not set up for your account.Set it up in the back office, or use another currency.

Every call can also return the codes that guard all calls. See Error codes.

Example

POST /v1/session.startExample
Request
{
  "requestId": "rq-77120",
  "firstSentAt": "2026-10-31T09:02:10Z",
  "playerId": "p-82731",
  "casinoSessionId": "c-5531",
  "gameId": "mines",
  "currency": "EUR",
  "language": "en",
  "market": "UK",
  "betSettings": { "min": 10, "max": 10000, "default": 100 },
  "exitUrl": "https://casino.example/lobby"
}

Answer
{
  "ok": true,
  "result": {
    "sessionId": "s-01JC8Z…",
    "url": "https://play.nartifacts.com/s/s-01JC8Z…",
    "linkExpiresAt": "2026-10-31T09:04:10Z"
  },
  "traceId": "tr-01JC…"
}