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. /Gameplay events
Gamification

Gameplay events

MarkdownSource

Rounds of games that run through GA’s aggregation come from GA: never send them (see the note before §1). This chapter and §6–§7 cover account events and the rounds of games not on GA.

5.1 Identifiers

FieldWhat it isRule
brandyour brandthe code of the brand as registered for you in GA; we confirm the list at onboarding. Required when one connection carries events of several brands; omitted when it carries one brand
player_refyour playerthe player’s id on your side — the same value as external_player_id in your player tokens (§3.2). Up to 255 bytes of UTF-8. Another id splits one person into two players
event_idthe eventyours; unique forever within your feed; a resend of the same event carries the same event_id
round_idthe roundthe same for every event of one round
game.idthe gamethe id of the game in the catalogue you send us (§8.1)

All your transports share one space of event_ids and round_ids unless you tell us otherwise in the form: an event sent through two of them is one event, and a refund sent by webhook reverses the bet of the same round sent over Kafka.

Bonus-money sessions: promo_player_ref

Some operators run bonus money under a separate session, for example b7~1001~55, while the player’s promotions should count for b7~1001. Pass the attribute promo_player_ref in LaunchGame.attributes, set to the player’s normal player_ref (1 to 255 characters, no whitespace). GA Promo then credits the round to that player instead of the bonus session’s player.

Only promo accounting changes: wallet calls, balance and the session’s own player_ref stay as they are. The ref must belong to the same operator or brand as the session; an invalid value makes the launch fail with InvalidArgument.

5.2 The event: promo.event.v1

JSON Schema: schema/promo-event-v1.schema.json. One event is one JSON object; the webhook also takes a batch {"events": [ … ]} (§6.1).

{
  "spec": "promo.event.v1",
  "event_id": "01J8Z3K9T6-bet-778812",
  "brand": "partner-sandbox-eu",
  "player_ref": "u-123",
  "kind": "bet",
  "round_id": "r-99812",
  "game": {
    "id": "book-of-x"
  },
  "amount": "1.50",
  "currency": "EUR",
  "occurred_at": "2026-09-24T12:00:00Z"
}
FieldRequiredRule
specyesexactly promo.event.v1
event_idyesnon-empty string (§5.1)
brandsee §5.1string, up to 255 bytes of UTF-8
player_refyesnon-empty string, up to 255 bytes of UTF-8
kindyesa round kind — bet, win, settled, refund — or an account kind — deposit, withdrawal, login (§5.4)
round_idround kindsnon-empty string; not read for account kinds
game.idnostring; not read for account kinds; a round event without a game counts only in promotions that list no games
amountall but logina string with a decimal number in the major units of currency (§5.3); not read for login
currencyall but logina code from Appendix C, any letter case; not read for login
occurred_atyesRFC 3339 with a zone (Z or ±hh:mm); fractions of a second allowed

Fields you add beyond these are ignored, at the top level and inside game: the format grows by adding fields. The byte limits count UTF-8 bytes, not characters.

5.3 Amount

A JSON string: digits, optionally a dot and more digits. It is converted to minor units of the currency exactly; more decimals than the currency has is refused, never rounded.

amountcurrencyResult
"1.50", "1.5"EUR1.50 EUR
"100"JPY100 JPY
"0.00012345"BTC0.00012345 BTC
"0.00"EURa bet or settled of zero is set aside (skipped/zero_amount)
"1.505"EURrefused — three decimals, EUR has two
"100.0"JPYrefused — JPY has no decimals
1.5, 150 (JSON numbers)anyrefused
"-1.50", "1e2", "1,50", "01.50", ".5", "1.", ""anyrefused

5.4 Kinds

Round kinds — every money operation of a game round:

kindSend whenamount
beta stake is placedthe stake
wina payout is madethe payout
refundmoney of a round is returnedthe returned amount
settledthe round is over — exactly one per roundthe sum of the round’s bets

Events of a round do not have to arrive in order. Promotions that collect items credit on settled only: a feed without settled counts nothing there.

A refund takes the whole round out of promotions, whatever its amount: what was already counted for the round’s bet and settled is reversed, and a bet or settled of that round that arrives after the refund is set aside as skipped/round_refunded. Send refund only for a round whose stake is returned.

Account kinds — events of the player’s account, not of a round:

kindSend whenamount
depositthe player’s deposit is creditedthe deposit
withdrawalthe player’s withdrawal is paid outthe withdrawal
loginthe player signs innone

They count in promotions built on them — a login streak, a deposit or withdrawal target — and never in the promotions of rounds: they need no round_id or game, take no minimum bet, and a zero amount is decided, not set aside.

One file per kind is in examples/events/ of the pack: bet.json, win.json, refund.json and settled.json carry brand, for a connection of several brands; deposit.json, withdrawal.json and login.json are account events; batch.json has no brand, for a connection of one brand — its second event has an unknown kind and is refused, the other two are accepted.

PreviousLaunching gamesNextTransports
Integration support: integration@gamealligator.comIntegration center
On this page
5.1 IdentifiersBonus-money sessions: promo_player_ref5.2 The event: promo.event.v15.3 Amount5.4 Kinds
↑ Back to top