Skip to content

Play-for-fun sportsbook for any site or app

Put a sportsbook on your website.

Pre-match and live betting on up to 11 sports, played with free tokens your players earn on your site: never bought, never cashed out. Brand it in the Studio, embed it with one server call and two lines of HTML.

Free: one sport, pre-match, up to 250 players a month. Create it yourself in minutes.

Sample dataTap a price to try the betslip.

A branded sportsbook running inside a community website, with the betslip docked on the right.

67’
Spain1
Portugal1
34’
Brazil0
Argentina0
Sat20:45
Japan
Uruguay
  • 11 sportsOne on Free, add more (add-on, or included in Full)
  • Live bettingPre-match on Free, live (add-on, or included in Full)
  • AccumulatorsSingles too, settled automatically
  • Two walletsManaged, or seamless (add-on, or included in Full)
  • Free to startPaid plans from $39 a month, billed yearly

It runs on your own website or app, where your players already sign in. Creators, communities and game studios embed it the same way, and so do rewards and loyalty communities, with a separate free balance.

How it works

Set up. Brand. Embed.

No odds to source, no results to chase, no settlement to write. One call on your server, two lines on your page.

  1. Create your sportsbook

    Sign up and create it from the console in minutes. Name your tokens (TOKENS, COINS, whatever your players already know) and pick the sports and leagues your players see.

  2. Brand it in the Studio

    Colors, logo, corner radius, presets and where the betslip sits. Fonts, density and odds buttons (paid plans). You edit on the left and the real sportsbook updates on the right.

    Preset

    4 px
  3. Embed it

    Your server opens a session for the logged-in player with one API call. Your page mounts the sportsbook with two lines of HTML.

    your-page.htmlHTML
    <div data-thesportsbook data-launch-url="LAUNCH_URL"></div><script src="https://play.thesportsbook.app/sdk.js"></script>

A complete sportsbook that lives inside your page.

Live and upcoming matches, the full market list on the match page, a betslip for singles and accumulators, and a history of every ticket. It adapts to the width of the iframe, not the window.

One sportsbook in two iframes, with one betslip. Each layout follows the width of its iframe, not the window.

  • One view for everything

    Upcoming and live (add-on, or included in Full) matches, sports, leagues, search, match pages and My bets all run inside one iframe. Players never leave your site.

  • Match pages with the full market list

    Live score, statistics and the full market list for each match, with a 2D match viewer (add-on, or included in Full) on sports that have one.

  • Betslip, floating or docked

    Floating at the bottom right, or in a column on the right, on every plan. Stake limits are checked before submit, and if a price moves, the player sees the new one and accepts it.

  • Your token name, their odds format

    Stakes and returns show with your token’s name, like TOKENS or COINS, before or after the amount. Currency signs and codes aren’t allowed. Each player picks their own odds format: decimal, fractional, American and more.

Edit on the left. See it live on the right.

The Studio renders your actual sportsbook, with real listings and a sample balance, while you change it. Save, and every open sportsbook picks up the new look within seconds.

Also in the Studio

  • Colors and logo

    Every surface, text, line, odds button and state color, from a light or a dark base. Your logo and favicon, uploaded or linked.

  • Typography (paid plans)

    18 Google Fonts, a separate heading font, and a base size from 13 to 16 px.

  • Layout

    Show or hide the 2D match viewer (add-on, or included in Full), and open on Live or Upcoming. Preview at desktop, tablet and phone widths.

  • Checked before you save

    Text and odds pairs are checked against WCAG AA. No custom CSS: every value is validated, so a theme can’t break the sportsbook. Unsaved changes stay a draft.

Run your sportsbook without asking us.

Numbers, players, bets, wallet, team and audit log, at console.thesportsbook.app.

The operator console overview with tokens staked, net token result, token hold and tokens on open bets for the last 7 days.

  • Overview

    Tokens staked, net token result, token hold, tokens on open bets, active players and bets for any range, with the sports, leagues and markets behind them.

  • Players

    Search, sort by tokens staked or net result, open any player’s history. Adjust a balance with a reason, or block a player: their open sessions end within about a second.

  • Bets

    Filter by status, sport, date, player or stake. Every bet has a timeline from placement to settlement. Export up to 50,000 rows to CSV (paid plans).

  • Wallet and reconciliation

    Every debit, credit and rollback with its status. Reconciliation flags only the operations that need a person.

  • Sports, limits and maintenance

    Choose the sports and leagues your players see, set stake limits and a maximum return, and pause betting with your own message.

  • Team and roles

    Owner, admin and viewer. Invite teammates by email (paid plans). Disable an account and its sessions end on the next request.

  • Audit log (paid plans)

    Every change and who made it, in plain words: “Maintenance: on — Back at 18:00”.

Integration

One call on your server. Two lines on your page.

Your server opens a session for the logged-in player; your page mounts the sportsbook. The launch link works once and expires after 60 seconds.

Your server

Open a session for the logged-in player. Your API key never leaves your server.

Launch link
Single use, 60 s
Player session
12 hours
API rate limit
600 / min per key
Your serverShell
curl -X POST https://api.thesportsbook.app/b2b/v1/sessions \  -H "Authorization: Bearer $SPORTSBOOK_API_KEY" \  -H "Content-Type: application/json" \  -d '{"user_ref": "viewer-42",       "display_name": "Viewer 42", "locale": "en"}'

You get a single-use launch URL.

ResponseJSON
{  "launch_token": "eyJhbGciOi...",  "launch_url": "https://play.thesportsbook.app/embed?token=eyJhbGciOi...",  "expires_in": 60}

Ten events, typed.

Prefer a plain iframe? postMessage events work without the SDK. TypeScript definitions at play.thesportsbook.app/sdk.d.ts.

loaded
The embed is up and exchanging the launch token.
ready
The player session is active and the sportsbook is on screen.
resize
The content height changed.
bet-placed
A bet was accepted. Refresh your balance widget.
session-expired
The session ended. Swap in a new token without reloading.
session-updated
A new token was exchanged and is active.
tokens-requested
The player asked for more tokens. Open your free refill. deposit-requested still fires as a deprecated alias.
maintenance
Betting paused or resumed, for your sportsbook or the platform.
tenant-suspended
Your sportsbook became unavailable, or came back.
error
A token swap failed, or an option was rejected.

Keep token balances with us, or keep them at home.

Two wallet models. Pick one per sportsbook. The embed and the console work the same either way.

  1. 01Debit

    The stake leaves the balance when the bet is placed.

  2. 02Settle

    The result comes in. The bet settles on its own.

  3. 03Credit

    The return lands in the balance. A lost bet returns nothing.

Example: a 10-token single at 1.85 that wins.

Managed

We keep each player’s token balance.

A record of each player’s tokens. You credit and debit players with one API call each; bets and settlements move the balance for you.

  • Credit, debit and read any balance through the API.
  • Idempotency keys make every retry safe: an operation applies at most once.
  • Load a balance before the player’s first session.
  • The quickest integration: if your server can call an API, you’re set.
Credit a playerShell
API=https://api.thesportsbook.app/b2b/v1curl -X POST "$API/users/viewer-42/credit" \  -H "Authorization: Bearer $SPORTSBOOK_API_KEY" \  -H "Content-Type: application/json" \  -d '{"amount": 50, "idempotency_key": "refill-8f1c2"}'​# {"balance": 150, "operation_id": "5b0c…",#  "replayed": false}

Best when your tokens only need to exist inside the sportsbook.

Seamless(add-on, or included in Full)

Your system keeps the balance. We call it.

We send a debit when a bet is placed, and a credit or rollback when it settles, to three endpoints you host.

  • Every call is signed with HMAC-SHA256 and carries an idempotency key.
  • Placement debits are synchronous, with up to three attempts inside six seconds.
  • Credits and rollbacks go through a durable queue: up to 20 attempts with backoff, even when the player is offline.
  • Anything that needs a person shows up in reconciliation. Nothing else raises an alert.
What we sendHTTP
POST /wallet/debitX-Timestamp: 1790000000X-Signature: 5d1f0c…​{  "user_ref": "viewer-42",  "amount": 10,  "currency": "TOKENS",  "bet_id": "0c9a8d5e-…",  "idempotency_key": "0c9a8d5e-…:debit",  "op": "debit"}

Best when your own system already keeps your players’ free token balance.

The seamless wallet is an add-on on Custom and included in Full. Switching from managed to seamless is possible once managed balances are debited to zero and open bets have settled.

11 sports, live and pre-match.

Choose which sports and leagues your players see. Results come in and bets settle on their own.

Free: one sport, up to 3 leagues, pre-match. Custom: the sports and leagues you add, with live betting as an add-on. Full: all 11, unlimited leagues, live and pre-match.

  • Football

    Goals · halves

  • Basketball

    Points · quarters

  • Tennis

    Sets · games

  • Ice Hockey

    Goals · periods

  • Baseball

    Runs · innings

  • Volleyball

    Sets · points

  • American Football

    Points · quarters

  • Esports

    Maps

  • UFC

    3 or 5 rounds

  • Martial Arts

    Rounds

  • Boxing

    Up to 12 rounds

Settled automatically

Most bets settle minutes after the final whistle. A few wait for official results or a check by our team. If a result is corrected later, the bet is re-settled and your wallet is told.

Singles and accumulators

One stake per selection, or several selections on one ticket. Asian lines settle as half won or half lost.

You pick each league your players see, one by one. Esports titles appear as leagues.

Built for your community

For any site that wants to play along.

Give players free tokens: a starting balance, a daily refill, points for taking part. Tokens are never bought and never cashed out.

Play along with the match

The game is on, on a stream, in your app or on TV, and your audience is already calling the score. Now they can back their call, live (add-on, or included in Full), with free tokens.

Named your way

TOKENS, COINS or your community’s own word, before or after the amount. Currency signs and codes aren’t allowed. It shows on every stake and every return.

Wired to your page

The SDK tells your page when a bet is placed or a player asks for more tokens. Connect it to your free refill, overlay or chat bot.

Your players, your rules

Set stake limits and a maximum return, block a player, pause betting. Players are identified by your own user ID, never by an email we collect.

You set the limits. The platform enforces them.

Every rule you set in the console is enforced on the server, whatever the browser sends.

Access

  • API keys

    sbk_…

    Shown once, stored as a hash, revoked on the next request. On paid plans, keep several keys (paid plans) so you can rotate without downtime.

  • Server-issued sessions

    60 s · 12 h

    Only your server can open a player session. Launch links work once and expire after 60 seconds; sessions last 12 hours.

  • Roles and audit

    owner · admin · viewer

    Owner, admin and viewer, enforced by the server. Every change lands in the audit log (paid plans) with who made it.

Limits and control

  • Stake limits and max return

    Minimum stake, maximum live and pre-match stake, maximum return. The betslip warns first; the server refuses anything above them.

  • Live bets are re-checked

    Live bets wait a short acceptance window and are checked against the current price before they’re accepted.

  • Maintenance mode

    503 MAINTENANCE

    Pause betting in your sportsbook with your own message. Players see it at once. Browsing and your console keep working.

  • Player blocking

    ≈ 1 s

    Block a player and their open sessions stop within about a second. Bets already open still settle and return their tokens.

Platform

  • Signed, idempotent wallet calls

    HMAC-SHA256

    Seamless wallet calls are HMAC-signed with a timestamp. Every balance movement carries an idempotency key, so a retry never moves tokens twice.

  • Fair rate limits

    600 / min per key

    Limits count per API key and per player, not per IP, so a watch party on one connection isn’t throttled.

  • Every state has a screen

    Maintenance, an expired session, a blocked player, a suspended sportsbook: each has its own screen for the player and its own SDK event for your page.

Common questions.

More questions? The integration guide covers sessions, wallets, rounds and events. For anything else, ask us.

Read the integration guide (opens in a new tab)

No. The Sportsbook is play-for-fun only. Tokens must be free: players can’t buy them, cash them out, trade them or win prizes of value with them, and players must be 18 or older. The Sportsbook never takes, holds or pays out money for players. You run your community and its tokens, and you’re responsible for doing so lawfully wherever your players are.

No. Tokens must be free and have no monetary value: no token sales, no subscriber or donation bonuses, no cash-out, no prizes of value. Leaderboard badges and roles are fine.

You need a web page you control where members are signed in: your server tells us who is playing. The sportsbook doesn’t run inside Twitch or Discord. Embed it on your site and link to it from your stream, chat or server.

Free covers one sport, up to 3 leagues and 250 players a month, pre-match, with no time limit today. Custom starts at $39 a month billed yearly and grows with what you add: more sports and leagues, live betting, the 2D match viewer, the seamless wallet. Full, with everything, is $399 a month billed yearly. Prices exclude VAT.

No. Sign up, verify your email and create your sportsbook from the console. It starts on Free, and nobody has to approve it. When you sign up, you confirm you’re 18 or older and signing up for a business, accept the terms and confirm your sportsbook is play-for-fun.

In crypto, through OxaPay, from your console. Choose Custom or Full, pay for a month or a year, and the plan applies as soon as the payment confirms. There’s no approval step and nothing to wait for.

Yes. The playground runs the real sportsbook with free demo tokens and no sign-up: restyle it, place bets and see what your players would see. Open the playground at demo.thesportsbook.app (opens in a new tab)

You choose. With the managed wallet, we keep each token balance as a record and you credit or debit it through the API. With the seamless wallet (add-on, or included in Full), your system keeps the balance and we call your endpoints to debit, credit and roll back.

One server call that opens a session for the logged-in player, and two lines on your page. With the managed wallet, add the calls that credit players. With the seamless wallet, you host three endpoints: debit, credit and rollback. The integration guide has Node.js and PHP examples for the wallet endpoints.

No. Odds, results and settlement come with the platform. Bets that need a human look go to our review queue before they settle.

Football, basketball, tennis, ice hockey, baseball, volleyball, American football, esports, UFC, martial arts and boxing, pre-match and live. Free covers one sport and up to 3 leagues, pre-match; Custom adds the sports, leagues and live betting you choose; Full has every sport and no league limit. In the console you pick each league, one by one.

Automatically. Most bets settle minutes after the final whistle; some wait for official results or a manual check. Settlement doesn’t need the player online. If a result is corrected later, the bet is re-settled and your wallet receives the correction.

English and Spanish. You set the default for your sportsbook, and each session can open in either language.

If your wallet doesn’t answer a placement debit, the bet isn’t placed, and a debit that might have gone through is rolled back. Credits and rollbacks wait in a durable queue and are retried up to 20 times. Anything still undelivered appears in reconciliation in your console.

Guides and comparisons

How to embed a sportsbook, what the options cost, and how communities run one.

All articles

Bring a sportsbook to your website.

Create it yourself in minutes and start on Free. When you want more, pay in crypto from your console: your plan applies as soon as the payment confirms.

Free plan · nothing to pay, no approval. For businesses and creators, 18+. Prefer a walkthrough? Request a demo.