Skip to content

The aggregator is yours.The platform is mine.

Xodac Gaming is the other half of a casino — the player app, the wallet, the bonus engine, the reports and the back office your staff work in. It does not sell you games. It connects to the aggregator you already pay for, and leaves that contract in your name.

We call them

Four endpoints, a thin HTTP client, and nothing that can take your casino down if it is slow.

  • POST /operator/generic/v2/game/url

    open a game session

  • POST /operator/generic/v2/game/list

    the catalog, rate-limited to one request a minute

  • POST /operator/generic/v2/game/round

    replay a settled round

  • POST /operator/generic/v2/products/list

    the providers enabled on your account

They call us

Five endpoints we host and operate. Every bet in your casino depends on them answering, which is why this half is the product.

  • POST /user/info

    who this token belongs to

  • POST /user/balance

    the only endpoint exempt from idempotency

  • POST /transaction/bet

    debit, live token required

  • POST /transaction/win

    credit, an expired token is still valid

  • POST /transaction/rollback

    always answers RS_OK, even for a transaction never seen

If you already pay Hub88, you are being sold that subscription a second time

SoftSwiss, Altenar, Digitain, EveryMatrix and SoftGamings all sell the platform and the game aggregation as one purchase. That is a sensible bundle for an operator starting from nothing. It is a bad deal for an operator who already holds an aggregator contract, has negotiated their own revenue share, and is being asked to abandon it to change platforms.
You keep your aggregator contract
Your Operator ID, your key pair, your commercial terms and your game list stay where they are. We are a client of them, not a reseller of them.
unchanged
You keep your game economics
Nothing in this platform marks up a game or sits between you and the provider’s revenue share.
unchanged
You get the half that is missing
Player app, wallet, ledger, bonuses, VIP, referral, reports, content and a back office. Thirteen modules, closed one at a time.
the platform

What a new vendor can offer instead of a logo wall

There is no customer list on this page, because the honest one is short. What there is instead is a codebase that can be counted, and a specification published in full before you ever speak to us. Every figure below is recountable from the three repositories.
endpoints registered and documented — the OpenAPI check runs clean
141 / 141
end-to-end walks, around 1,300 assertions, none failing
29
modules, M0 to M12, built and closed one at a time
13
MongoDB collections
37
player themes, switched from a database row
8
locales at exact key parity — 615 player keys, 1,329 back-office keys
3
integer money scale; there are no floats anywhere in the ledger
×100,000
wallet status codes, every one of them implemented
15

One design system, two applications

The player app and the back office are built from the same tokens, so the casino your players see and the desk your staff work at are recognisably the same product. Eight themes ship; switching one is a database row, not a release.
The player lobby on a phone
Player app, 390px. The catalog is public on purpose — a lobby behind a login is a lobby nobody reaches.
The deposit reconciliation queue in the back office
Back office, 1440px. The deposit queue, where a staff member matches a transaction id before anything credits.

No provider ever holds a player’s money

Every ledger row in your casino is written by your own API, from callbacks the aggregator sends. That sentence is easy to write and hard to mean, so here is the mechanism, running. Press the buttons.

Player wallet

1,000.00

TransactionKindAmountStatus
No rows yet.

A live ledger, with the same rules the API runs. Send a callback and watch the order the writes happen in.

The order of the two writes is the product

The pending row goes to disk before the balance moves. A crash between them leaves a visible row and untouched money, which an operator can see and resolve. The other order fails silently, and silence is the one outcome an audit cannot recover from.

A retry is not a second bet

Idempotency is a unique index on the transaction id scoped to whoever issued it, not a lookup that races. The duplicate-key error is the guarantee: the second insert is refused and the first result is returned. A conflicting reuse of the same id is told apart from a legitimate retry by comparing six fields — no more, no fewer.

  1. 01The amount is checked as an integer. A caller handing the ledger a float has a bug, so it throws rather than rounding.
  2. 02The wallet is upserted, never found-then-created — a race on a player’s first spin would otherwise be a duplicate-key error.
  3. 03The row is written as pending.
  4. 04A frozen wallet rejects here, with the reason recorded on the row.
  5. 05One guarded atomic update moves the balance, or matches nothing and refuses.
  6. 06The row is marked applied, carrying the balance it produced.

There are no multi-document transactions here. Ordering does the work, which means this behaves identically on a standalone MongoDB and on a replica set.

Your staff are the people who actually use this

A deposit queue built three months after deposits means three months of unaudited manual database edits. Every module shipped its administration in the same pass, so there is no period where operating the casino means opening a database client.
Eight groups, rendered from a permission table
A screen a role cannot open is absent from the menu, not greyed out. The menu never advertises a page that does not exist yet either.
not markup
Every action anyone takes is an append-only audit row
The audit model refuses updates and deletes at the schema level, so there is no code path that can quietly edit history.
append-only
Staff never see a raw error either
The same classification the player app uses runs here: a failure lands on a toast, inline on the screen, a banner, or a full-screen fallback — decided once, in one place.
four surfaces

On a different aggregator? That is one adapter, not a rewrite

Provider detail lives behind a single interface with twelve members. The core never learns the name of an aggregator; the adapter only translates. That boundary is the reason a second integration is bounded work we can quote, rather than an open-ended project.
What the adapter owns
Its key and IP allowlist, how it is configured and how it refuses to run unconfigured, reading the catalog, mapping a provider category to ours, minting a launch URL, verifying an inbound signature, looking up a round, listing products and transactions, and eight freebet calls.
twelve members
What the adapter never owns
It decides nothing about a balance. The ledger decides, identically, whichever adapter the callback arrived through.
the money
How we know the boundary holds
A retried bet, a win with no bet behind it, an unreferenced rollback, a late win on an expired token, a bad signature, a blocked-country game and an unmapped category — all of it runs against a mock adapter that implements the same twelve members.
a chaos suite

An unmapped category is reported to you as a sync error, never defaulted. A game filed under the wrong tab is a bug nobody ever files.

The specification is published. Nobody else does this

Five documents — the library, the specification, the integration, the design system and the back office — written before the code and revised with it. You can read the data model, the wallet contract and the module tracker before you talk to a salesperson, and hold us to them afterwards.

Where our responsibility ends

Xodac Gaming is a software supplier. You hold the gaming licence, you hold the aggregator contract, and you are the operator of record in every market you enter. We run no casino, hold no player funds and take no bets. If your regulator requires your critical suppliers to register with them, that registration is something we complete for your licence — ask us about it during onboarding rather than after.

Certification with Hub88 is run under your own Operator ID and key pair, per region, because those credentials are yours. It is a scheduled step in onboarding with a checklist attached, not a gap in the product.

Three things on this platform are narrower than a brochure would make them sound, and they are named on the pages that describe them: payments ship as reference adapters for one market, SMS codes are logged until you contract a gateway, and the sportsbook is a list of brand links rather than an integration. Read what is deliberately not included before you decide.

A demo is a real casino, not a slide deck

We open the player app and the back office against a live API with a mock adapter, make a deposit, clear it from the queue, take a spin, watch the ledger rows land and then reconcile the round. Half an hour. Bring whoever asks the hard questions.

Six fields, and the answer comes from a person. Tell us which aggregator you are on and we will tell you what week one looks like — including none yet, which changes the answer honestly.