Skip to documentation
GAME_ALLIGATOR
ProductsGamificationIntegrationDemos
Let’s talk
ProductsGamificationIntegrationDemos
Let’s talk
Integration
OverviewGuidesAPI referenceResources
Integration overview
Integration architectureFundamentalsGetting startedCertification
Products
Aggregation
Part I · Fundamentals
Core flowRequest & signingEnvelope, money and data formatsErrors: one modelIdempotency & retriesRate limits, pagination, networkMoney Path Rules
Part II · Operator API
Getting startedGames APIWallet APIFree rounds APIReports APIFeatures APIEvent stream
Part III · Certification
Run the checks from the Operator PortalThe command-line tool (for your CI)The checklistCertification checklist
Part IV · Changelog and status
ChangelogDocument ControlChangelog & migration guide: Operator API v2
Appendix
Numbers to rememberWhole guide on one page
API reference
Get player balanceAuthenticate player sessionDebit player balance (bet)Credit player balance (win/bonus)Atomic debit and creditRollback transactionClose game roundSettle free-round grantReconcile uncertain transactionNon-financial notificationgetCapabilitieslistGamesupdateGamelaunchGamelaunchDemocloseSessionlistSessionslistRoundsexportRoundsgetAggregatesissueGrantlistGrantscancelGrantsubscribeackgetOperatorCapabilitiesgetGameFeatureslistBonusBuyTypesissueBonusBuycancelBonusBuygetJackpotsgetBetRangesgetRoundReplaygetRoundDetailslistCampaignscancelCampaignqueryProviderTransactionslistTournamentsgetTournamentgetLeaderboard
Gamification
Integration
Quick startWidgets on your siteSigned-in playersLaunching gamesGameplay eventsTransportsOutcomes and your obligationsGame cataloguesRewardsOnboarding and go-liveReasons, numbers, currencies
Poker
Integration
OverviewEmbed the poker clientServer APIEvents and webhooks
llms-full.txt
Start here
Aggregation / Part I · FundamentalsCore flow

Game Alligators (GA) puts game studios' games into your casino. Traffic runs in two directions, each with its own key pair. Don't mix them. Direction Who calls whom What it's for Key you use Chapter You → GA You call https://api.rexplay.sit

Aggregation / Part I · FundamentalsRequest & signing

Every call GA sends to your wallet looks like this: http POST /v2/wallet/debit HTTP/1.1 Host: wallet.operator.example Content Type: application/json X API Key Id: key live 01 X Request Id: 0198a1d0 9a30 7f08 a7dd 713e4fd33db0 Idempotency Ke

Aggregation / Part I · FundamentalsEnvelope, money and data formats

Every wallet request has the same outer shape. payload is the action specific part and the per call ids live in payload.meta . json { "request id": "0198a1d0 9a30 7f08 a7dd 713e4fd33db0", "ts": "2026 09 13T12:00:00Z", "operator id": "0197aa

Aggregation / Part I · FundamentalsErrors: one model

Your wallet's codes are Appendix A.1. What GA returns to you is Appendix A.2. Every error from /v2/aggregator/ and /v2/features/ has a non 200 HTTP status and one JSON body, Content Type: application/json : json { "code": "ERROR CODE MAINTE

Aggregation / Part I · FundamentalsIdempotency & retries

Certification tests these hardest. Build them in from day one. The full normative text is in Money Path Rules. Keep every op id with its stored answer for at least 4 months . GA resends for 72 hours, and the margin covers reconciliation dis

Aggregation / Part I · FundamentalsRate limits, pagination, network

Your wallet must answer within 5 seconds per call (§2.7). Aim for well under 1 second. GA doesn't filter your source IP on the Operator API. If you restrict inbound traffic to your wallet, allow GA's outbound addresses: 49.13.169.177 and 46

Aggregation / Part I · FundamentalsMoney Path Rules

The rules below govern the v2 wallet contract when a call goes wrong. The cases are a timeout, a duplicate, a rollback of an operation you never saw, and a win that arrives after the session closed. They're additive: GA removes or renames n

Aggregation / Part II · Operator APIGetting started

1. Get sandbox credentials. Email [integration@gamealligator.com](mailto:integration@gamealligator.com). You receive an operator profile with operator id , the Operator API key pair, and a login to https://operator.rexplay.site . There you

↑ ↓ navigate↵ openesc close
  1. Home
  2. /Integration
  3. /Gamification
  4. /Signed-in players
Gamification

Signed-in players

MarkdownSource

The widgets show a signed-in player their own progress, items and rewards. They learn who the player is from your site, once per page, without GA ever seeing your passwords or your session cookies.

3.1 How it works

  1. The resolver calls your token endpoint on your own origin with a plain GET. The browser sends your session cookies with it, because it is your origin.
  2. Your endpoint answers with a short-lived operator token for the signed-in player (§3.2), or with an error when nobody is signed in.
  3. The resolver exchanges the operator token for a GA player token and hands it to every widget of the page. It lives in the page’s memory only — never in storage, cookies or the address bar — and is renewed in the background before it expires.

You tell us the path of the endpoint in the form (players.token_endpoint), e.g. /api/ga-promo/token. It must be on the same origin as the page that shows the widgets.

3.2 Your token endpoint

GET /api/ga-promo/token
Accept: application/json
Cookie: <your session>
Your answerWhen
200 {"operatorToken":"<JWT>"}a player is signed in
401 (any body)nobody is signed in; the widgets show what a guest sees

The JWT is signed on your backend, never in the browser:

  • algorithm HS256, key: the same operator signing key you already hold for Operator API v2 (the wallet signing key; its secret is shown once when you rotate it in the Operator Portal) — not a separate embed-only secret (§10.2); none and other algorithms are refused;
  • the HMAC key is the secret string exactly as issued, as its UTF-8 bytes — do not base64-decode or hex-decode it, do not trim or add anything;
  • no kid header is needed and none is read: we check the token against each of your active signing keys, so it keeps verifying while two keys overlap during a rotation. The key id is used by the wallet requests only;
  • operator_id — your GA operator id, as registered for you;
  • external_player_id — your player’s id: the same value you send as player_ref in events (§5.1). Another value makes another player;
  • brand — the code of the player’s brand (§5.1). Required when you have several brands (a group operator): the brand ref, the same value as x-brand-id. Must be absent when you have one brand;
  • exp — required; keep it a few minutes: the widgets exchange a token once; every game launch (§4.3) asks for a fresh one.

Optional: currency, locale, ext_param (your context for the game launch, §2.3).

{
  "operator_id": "<your GA operator id>",
  "external_player_id": "u-123",
  "brand": "partner-sandbox-eu",
  "exp": 1790000000
}

The endpoint is the only place where your site vouches for a player. Answer only for the player of the session the request carries.

3.2.1 A site with the session in an Authorization header

If your players sign in with a token in the Authorization header rather than a cookie, the endpoint of §3.2 does not fit: the browser does not send it the session. Hand the token to the widgets from your page’s JavaScript instead.

resolver.js accepts a token provider. Set it in one of two ways:

  • window.Ludarium.setTokenProvider(fn);
  • window.LudariumConfig = { tokenProvider: fn }, defined before resolver.js loads.

fn returns a string or a Promise<string>: the operator JWT, built as described in §3.2. With the launch mode sdk-modal (§4.1) the same provider supplies the token of every game launch.

<script>
  window.LudariumConfig = { tokenProvider: () => auth.getAccessToken() };
</script>
<script src="https://ludarium.rexplay.site/resolver.js" data-client-id="..."></script>
<script>
  window.Ludarium.setTokenProvider(async () => auth.getAccessToken());
</script>
  • The provider is used instead of GET to the token endpoint; its result goes to sessionUrl as operatorToken.
  • The provider is called again when the token expires.
  • If it throws or returns an empty string, the widgets show what a guest sees, the same as for a 401 from the endpoint (§3.4).
  • Without a provider nothing changes: the endpoint of §3.2 is used.
  • The token is accepted only from your page’s JavaScript, never from a slot’s data-* attributes or from the manifest.
  • Set the provider before the first widget mounts.

3.3 A player we have not seen yet

A player who signs in before their first bet is known from the first signed token: the widgets show their own, empty progress. Events you send later (§5) count for the same player, because both name them by the same external_player_id / player_ref under the same brand.

3.4 Guests

Without a token endpoint, when nobody is signed in, when the endpoint fails or takes longer than 1.5 s, or when the token is not valid, the widgets show what a guest sees: public campaigns, closed items, game rows. Promo banners show the campaign without any progress, and their button reads “Sign in to collect”. An action that needs a player — that button included — raises ig:login-required on your page (§2.3). Nothing breaks and nothing waits.

PreviousWidgets on your siteNextLaunching games
Integration support: integration@gamealligator.comIntegration center
On this page
3.1 How it works3.2 Your token endpoint3.2.1 A site with the session in an Authorization header3.3 A player we have not seen yet3.4 Guests
↑ Back to top