Launching games

Real-money launch: POST /v1/game/url

You call this when a player clicks a game in your lobby. We return a single-use URL; you redirect the player's browser to it.

{
  "product": "runecode", "publisher": "wizards", "game": "royal-tiger-v2",
  "user": "player-48213", "token": "9f0c1d2e-5a7b-4c3d-8e1f-0a1b2c3d4e5f",
  "currency": "USD", "language": "en", "device": "desktop", "tag": "real"
}
FieldRequiredNotes
product, publisher, gameyesthe three slugs from the catalogue, copied verbatim. Never build or split them yourself
useryesyour player id: opaque, stable per player, at most 128 characters. Do not mint a new one per launch
tokenyesone-time session token, at most 256 characters (a UUID is recommended). Comes back as token on every wallet call of this session; the player's browser never sees it
currencyyesupper case; must be enabled for you
languagenoBCP-47, default en; unknown values fall back to en
devicenodesktop (default), mobile, tablet
tagnoreal (default), affiliate, streamer, employee, qa. Non-real tags are accepted only for users you pre-registered, are excluded from production accounting and are reported separately

Response:

{ "url": "https://play.<rgs-domain>/l/9b2c…", "fair": true }

Rules worth knowing

Optional fields (extensions)

Safe to omit. Send the header RuneCode-Extensions: v1 to receive extra fields in the response (runecode.sessionID, expiresAt, the resolved release and jurisdiction, a request id). brand, country, ip, links, session, metadata and timestamp are accepted as described in the specification. responsibleGaming and displayCurrency are refused with 400 until implemented rather than silently ignored.

Demo launch: POST /v1/game/url/demo

Play money, no wallet, no token reaches you.

{ "product": "runecode", "publisher": "wizards", "game": "royal-tiger-v2", "currency": "USD", "language": "en", "device": "desktop" }

Response { "url": "…" }. Demo sessions are signed with a separate demo key, rate-limited per player IP, and never reach any wallet.

After the launch

When the player opens the URL the game authenticates against the RGS, which calls your wallet's /v1/balance with your token. From then on every bet is a /v1/debit and every payout a /v1/credit: see Implementing the wallet.

Errors

HTTPcodeMeaning
400ERR_BADnot JSON, schema violation, unknown enum value, field too long
400ERR_NAVthe game has no approved release for your operator, jurisdiction or currency
400ERR_CURcurrency not enabled for you
400ERR_JURjurisdiction cannot be resolved
401ERR_ATEmissing or invalid signature, unknown operator, revoked key, stale timestamp
403ERR_FBDoperator suspended, source IP not allowed, endpoint not enabled for you
403ERR_JURblocked in the player's country or jurisdiction
404ERR_GNFunknown game, or not approved for you
409ERR_TOKEN_REUSED / ERR_IDEMPOTENCYsee the rules above
429ERR_RATErate limit; honour Retry-After
503ERR_MAINTmaintenance or bets paused; honour Retry-After

More in Errors and limits.