Skip to content

Play-for-fun sportsbook for streamers and communities

Put a sportsbook inside your community.

Pre-match and live betting on up to 11 sports, with bets settled in the points or tokens your community already earns. The Sportsbook never handles cash. 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. We set it up and email you.

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 $40.83 a month, billed yearly

It runs on your own website, where your members already sign in. Link to it from your stream, chat or Discord.

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

    We open your sportsbook and invite you to the console. Name your currency (TOKENS, COINS, whatever your community already uses) and pick the sports and leagues your players see.

  2. Brand it in the Studio

    Colors, logo, corner radius and presets. Fonts, density, odds buttons and a floating betslip (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, every market 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 every market

    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, docked or floating

    A column on the right, or a floating bar at the bottom (paid plans). Stake limits are checked before submit, and if a price moves, the player sees the new one and accepts it.

  • Your currency, their odds format

    Stakes and returns show in your currency: a word like TOKENS, a symbol or nothing, before or after the amount. 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 turnover, GGR, margin and open exposure for the last 7 days.

  • Overview

    Turnover, GGR, margin, open exposure, active players and bets for any range, with the sports, leagues and markets behind them.

  • Players

    Search, sort by turnover 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 payout, 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.
deposit-requested
The player tapped Deposit. Open your own flow.
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 the balance with us, or keep it 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 hold each player’s balance.

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": "topup-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 tokens are spent across your own products.

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, every league, 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.

Show every league, or only the ones you pick, per sport. Esports titles appear as leagues.

Built for communities

For communities that already have a currency.

Points, coins, tokens. If your members earn it, they can play with it here.

Play along with the match

The game is on stream and chat is already calling the score. Now viewers can back their call, live (add-on, or included in Full), with the tokens they’ve earned.

Named your way

TOKENS, COINS, a symbol or no label at all, before or after the amount: whatever your community says. 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 taps Deposit. Connect it to your own top-up flow, overlay or chat bot.

Your players, your rules

Set stake limits and a maximum payout, 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 payout

    Minimum stake, maximum live and pre-match stake, maximum payout. 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 built for play-for-fun tokens and points. It never takes players’ money, holds cash or pays out cash. You decide what your tokens are and how members earn them, and you’re responsible for running that economy under the rules that apply to your community.

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. Custom starts at $40.83 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 $408.33 a month billed yearly.

You choose. With the managed wallet, we hold each balance 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 them all. In the console you show every league or only the ones you pick.

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.

Bring a sportsbook to your community.

Tell us about your community and how your tokens work. Start on Free, or ask us to walk you through the embed, the Studio and the console.

Free plan · we set it up and email you.