Skip to main content
A match session is the per-player context your game runs in. It is issued for a real match, to a real participant, through a valid game key — and it is single-use.

Open a session

Browser:
Under the hood: POST /api/v1/game-sdk/{gameId}/sessions with the bearer access token and the x-game-key header. The response:

Start-gate rules

A session is refused (403) when:
  • the game is not published,
  • the game key is invalid for the requested environment,
  • the key’s allowed origins do not include the request origin,
  • the key lacks the session scope, or
  • the player is not a participant of the given match.
Origin is read from the request Origin/Referer header, so the game key’s origin binding is what protects browser builds.

Consume the session

The token is consumed when you submit a result (POST results). It is verified as:
  • a real session token hash,
  • not already consumed,
  • not expired,
  • bound to this user and this match.
Because consumption is single-use, each result claim uses its own session.

Session status

The SDK exposes teammate session status and player context through get_session_status() and player_context(), so your UI can reflect whether a match session is open, pending, or validated.

Multi-session flows

Each player device opens its own session; sessions are never shared. Mutually-confirmed results are described in Second session & mutual claims. Next: Events & realtime.
Last modified on September 10, 2026