Integration

Five steps, and one of them is a script tag.

The work on your side is the wallet contract — four operations we call on your platform. Everything else is configuration in the backoffice.

On your page

This is the whole embed.

Not a simplified version of it. The same host, the same path, the same initialiser the widget exposes.

index.html
<!-- Anima Sport — the whole sportsbook, one script -->
<div id="sportsbook-root"></div>

<script src="https://www.animasport.online/assets/animasb.js"></script>
<script>
  window.initSportsbookApp({
    skinId:  'your-skin',      // the brand, as configured in the backoffice
    partner: 'your-skin',
    service: 'YOUR_SERVICE_KEY',
    token:   PLAYER_SESSION_TOKEN,   // issued by your platform
    uid:     PLAYER_USERNAME
  });
</script>

The widget is one file

JavaScript and CSS in a single bundle, served with revalidation rather than a long cache, so a fix reaches every operator’s players on their next page load.

It runs on your domain

The widget mounts inside your page, not in an iframe. It calls the platform with absolute URLs, so it behaves the same wherever it is embedded.

Prices arrive over a socket

Odds changes are pushed, not polled. The event list, the match view and the betslip all move together, and a price that moved between opening the betslip and confirming is shown before the bet is sent.

The player is told what happened

Accepted, refused, held for a trader, countered with different odds, or rejected because the session expired — each of those reaches the player as a message, not as a coupon that quietly disappears.

Getting there

From nothing to a live brand.

Steps one, two and five happen in the backoffice. Step three is the only development work.

  1. 1

    Create the brand

    An organisation and a skin in the backoffice, with the currencies it trades in, the sports it carries and the wallet service the engine should call.

  2. 2

    Register your domains

    The origins allowed to load the widget, entered against the skin. Saving them refreshes the engine’s allowed origins immediately — a new site works without a restart or a release.

  3. 3

    Implement the wallet contract

    Four operations the engine calls on your platform: authenticate a session, read a balance, debit a stake, credit a settlement. Every call is logged per coupon and retried automatically when it fails.

  4. 4

    Drop in the script

    One tag on the page and one call to initialise it with the player’s session. The CSS travels inside the bundle, so there is nothing else to load and nothing to build on your side.

  5. 5

    Style it

    Per-skin CSS from the backoffice, served to the widget at runtime. Colours, fonts and spacing change without a release on either side.

The contract

Four operations, on your side.

The engine calls your platform for anything involving a player’s money. It never holds a balance of its own.

Authenticate
Validate a player session token and return the account it belongs to.
Balance
Current balance and currency for that account.
Debit
Take the stake when a coupon is accepted. Idempotent on the coupon reference.
Credit
Pay a settlement or a cashout. Retried on failure, resendable by hand.
WALLET CONVERSATIONcoupon #1042OKAUTHENTICATEsession acceptedHTTP 20009:12:04OKBALANCE142.50 EURHTTP 20009:12:04OKDEBITstake −25.00 EURHTTP 20009:12:05RETRIEDAUTO_WINsettled +87.50 EURHTTP 20022:41:19attempt 1 of 5gateway timeoutHTTP 50422:41:09attempt 2 of 5gateway timeoutHTTP 50422:41:13attempt 3 of 5acceptedHTTP 20022:41:19Five attempts, each waiting longer than the last, then every 30 seconds.A coupon still being retried is not the same as one that needs a person,and the panel says which it is. The last resort is a resend by hand.
The wallet conversation for one coupon: three calls at placement, and a settlement that took three attempts.

We will do the first one with you.

A sandbox brand, your wallet endpoints, and someone on a call while you wire it up.

Get in touch