To run a Discord sports betting game for your community with no real money, put a play-for-fun sportsbook on a small website where members sign in with Discord, and link to it from your server. Members get free tokens, bet on real odds before and during matches, and bets settle automatically; you hand out roles as recognition.
Key takeaways
- A bot is great for simple picks. A full sportsbook adds live odds, accumulators and automatic settlement.
- The sportsbook runs on your community site. We don't ship a Discord bot or app; Discord sign-in is your code.
- Use your own pseudonymous id as the player identifier and the member's chosen nickname as the display name.
- Tokens for server activity at one rate for everyone; never for Nitro boosts, paid roles or server subscriptions.
- Roles are the natural recognition on Discord. Prizes of value aren't allowed.
- Moderate from the console: block a player, pause betting with maintenance mode.
On this page10 sections
- Discord betting bot vs a full sportsbook
- The setup: a community site with Discord sign-in
- Identity: should the Discord user id be the user_ref?
- Tokens for server activity, at one rate for everyone
- Roles as recognition
- Announcing results: SDK events plus your own bot
- A match week on your server
- Moderation: blocking a player, maintenance mode
- Which plan fits a Discord sports betting game
- Frequently asked questions
Discord betting bot vs a full sportsbook
Most Discord sports games are bots. A bot posts fixtures, members react or type a command to pick, and someone (or an integration) marks the result. For a weekly pick'em that works well, and there are plenty to choose from on bot listing sites.
A bot runs into limits when the game gets closer to a real sportsbook:
| Typical Discord bot | Play-for-fun sportsbook on your site | |
|---|---|---|
| Interface | Slash commands, reactions, embeds | A full sportsbook UI: match lists, match pages, betslip, history |
| Markets | A few outcomes per match | The market list we carry for each match |
| Odds | Often none, or fixed | Real odds that move pre-match and live |
| Live betting | Hard to do in chat | Built in (Custom add-on or Full) |
| Accumulators | Rare | Singles and accumulators |
| Settlement | Manual or basic | Automatic, with re-settlement if a result is corrected |
| Mobile | Discord's UI | Layout that adapts to the width; drawer and bottom sheet on phones |
The two work together. Keep your bot for announcements and banter, and put the betting where there's room for it.
The setup: a community site with Discord sign-in
The architecture is small:
- A page on your site where members sign in with Discord. Discord's OAuth2 flow is your code (or your site framework's auth library); it gives you the member's Discord account once they approve.
- A server route that, for the signed-in member, calls our API with your key and gets a single-use launch URL, valid for 60 seconds.
- The embed on the page, mounted with that URL.
- A link in your server: a pinned message, a channel topic, a
#sportsbookchannel with the URL.
The server call (from your backend, never from the browser):
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"}'And the page:
<div data-thesportsbook data-launch-url="LAUNCH_URL_FROM_YOUR_SERVER"></div><script src="https://play.thesportsbook.app/sdk.js"></script>Don't cache the page or the launch URL: each one works once and expires in a minute. The player session it opens lasts 12 hours. Step-by-step instructions are in how to embed a sportsbook on your website.
Identity: should the Discord user id be the user_ref?
Our policy requires players to be identified only with pseudonymous identifiers: no email addresses, phone numbers, legal names or other direct identifiers, in any field.
A Discord user id is a stable number that anyone can look up on Discord. It isn't an email, but it points straight at a public account. The cleaner choice is your own id:
- Create a row in your own database when a member first signs in, keyed by their Discord id.
- Send your row's id (or a random identifier stored with it) as
user_ref. It can be 1 to 128 characters. - Never take
user_reffrom the browser. Your server reads it from the signed-in session.
For display_name, use the nickname the member shows in your community. Display names may contain only a nickname or username the player chose, never a legal name from your records, and Discord's OAuth scopes can include an email address you must not forward. Ask for the smallest scope you need.
Tokens for server activity, at one rate for everyone
Every member starts with the same balance, credited by your server the first time they sign in. After that, a free refill (daily or weekly) keeps everyone playing. When a member presses "Get more tokens" in the sportsbook, your page gets the tokens-requested event and can show the refill.
Discord gives you plenty of free activity to reward:
- taking part in a match-day thread;
- attending a free community event or watch-along in a voice channel;
- completing a profile on your site.
The rule is that the number of tokens never depends on whether anyone paid. That rules out the Discord-specific paid things: Nitro boosts, paid roles, server subscriptions, and any role you sell elsewhere. "Boosters get double tokens" breaks the rule the same way "subscribers get double tokens" does on a stream. Keep activity rewards modest, too; a chat-spam leaderboard helps nobody. More in how to design a free token economy.
Roles as recognition
Discord roles are close to ideal recognition: visible, free, non-transferable, and meaningful inside the community. "Leaderboard positions, badges, titles and community roles are fine; prizes of value are not."
A few formats that work:
- Weekly Top Predictor role, given to the leader by net tokens and moved every Monday.
- Season Champion, kept as a permanent color for past winners.
- Accumulator of the Week, for the best longshot.
Two limits. A role must not give access to anything of value: no paid-channel access, no giveaway entries, no discount codes. And a giveaway you run for the whole server must stay separate from the sportsbook, not limited to people who played it.
Announcing results: SDK events plus your own bot
This is the part where a bot earns its place. We don't provide one, but you can wire your own with two sources.
On the page, the SDK fires bet-placed (bet id, stake, potential return) in the member's browser. Your page can tell your server "member X placed a bet", which your bot can turn into a message in #bets. Treat it as a signal only; never move tokens because of a browser event.
On your server, our API is the source of truth: a player's rounds (open or settled), all open rounds for your sportsbook, a single round, and summary reports. A scheduled job can read settled rounds after the day's matches, update your leaderboard table, and have your bot post the standings. The fields you get per round include the status, stake, odds, return, and each selection with its match and market.
Your bot's code, its token and its permissions are yours. Keep our API key on the server where the job runs; never put it in the bot's client or a public repo.
A match week on your server
A rhythm that works for most sports servers, whatever the sport:
- Monday. Your job reads last week's settled rounds, updates the standings on your site and moves the Weekly Top Predictor role. The bot posts the top five by nickname.
- Midweek. A pinned message links to the sportsbook with the weekend's fixtures. Members who ran low press "Get more tokens" and collect the free refill.
- Friday. An accumulator thread: members share the slips they built (a screenshot or a description, their choice) and argue about them.
- Match days. A voice-channel watch-along for the big game. With live betting on, the arguments follow the odds in real time.
- Sunday night. Most bets have settled minutes after the final whistle; a few wait for official results. Leave the standings until Monday so late results are in.
The sportsbook does the betting and settlement. Your server does what Discord is good at: the talk around it.
Moderation: blocking a player, maintenance mode
Communities need moderation, and the console gives you the tools:
- Block a player. Open sessions end within about a second, the embed shows that the account is on hold, and new bets are refused. Open bets still settle. Block anyone who asks to stop playing; our policy requires it.
- Adjust a balance with a reason that shows in the player's history, for example after a mistake in your refill job.
- Maintenance mode pauses betting in your sportsbook with your own message ("Paused for the server event, back at 21:00"). Everything else keeps working.
- Stake limits stop one member from dominating: minimum stake, maximum pre-match and live stake, maximum return.
Before launch, set your server's rules: 18+ only, the sportsbook is for entertainment, tokens have no value and can't be traded, no real money is staked or won, and you, not us, run it. Our player notice template covers the required points. Discord's own terms and your server's rules apply on top; read them yourself, and check with a lawyer in your jurisdiction if you're unsure how the rules apply where your members are.
Which plan fits a Discord sports betting game
At the time of writing (September 2026), the Free plan covers one sport, up to three leagues, pre-match betting and up to 250 monthly active players, which is plenty for a server trying it out. Live betting during matches is a Custom add-on ($79 a month) or included in Full; Custom covers up to 5,000 monthly active players. See pricing for the current numbers.
If your server runs around a streamer, read the sportsbook for streamers guide. If it's an esports community, a play-for-fun esports betting game covers how esports titles appear. The integration docs (opens in a new tab) have every endpoint, and you can start free (opens in a new tab) with no approval step.
Frequently asked questions
Is there a Discord bot for The Sportsbook?
No. The Sportsbook doesn't ship a Discord bot or Discord Activity. The sportsbook runs on a web page you control, and you link to it from your server. If you want results posted in a channel, your own bot can read them from our API and post them.
How do I add a betting bot to Discord?
Bots are added from a listing site or a developer's invite link with the permissions they ask for. They're good for simple picks. For odds that move during the match, accumulators and automatic settlement, a full sportsbook on your community site, linked from Discord, does more than a bot can.
Can I give tokens to members who boost the server?
No. Nitro boosts, paid roles and server subscriptions are paid, so they can't grant tokens or extra tokens. Tokens can come from free activity such as chat participation or event attendance, at the same rate for every member.
Can the winner get a special Discord role?
Yes. A role, a color or a title is recognition, which is allowed as long as it's free, can't be transferred or bought, and doesn't give access to anything of value. A role that gives access to paid content or giveaways with prizes isn't allowed.
Written by
The Sportsbook team
The people who build The Sportsbook. We have spent seven years building sportsbook software, and we write these guides from that work.
Last updated .