OddSphere Admin Panel
The top-right corner always shows a ● N PENDING button in orange when there are users awaiting approval. This is your first priority when you log in — head to Users and approve or review any pending accounts before anything else.
| Source | Market | When Scraped | Odds Behaviour |
|---|---|---|---|
| Auto | 🇲🇺 Mauritius (MRU) | Thursdays — races appear automatically in the admin panel | Live odds update every 5 minutes on race day |
| Auto | 🇭🇰 Hong Kong (HK) | Scraped and available in the admin panel | Scraped as tote/parimutuel odds — must be manually converted to fixed odds before going live to users |
| Manual | Any | Created by a moderator via + Create Race | Odds set at creation; remain fixed unless you edit them |
-
1Races appear automatically on ThursdaysYou don't need to create them. Check the Upcoming tab on Thursday mornings — scraped MRU races will be listed with current odds pulled from the tote.
-
2Odds refresh every 5 minutes on race dayThe system automatically updates all runner odds every 5 minutes while the race meeting is live. Users see the most current odds available.
-
3Manual edit locks the odds permanentlyIf you manually overwrite any odds on a scraped race, the automatic 5-minute updates stop for that race. The odds you set will stay fixed. Only do this intentionally.
-
4Bets close and results settle automaticallyThe system stops accepting bets at race time and settles results automatically upon completion. You do not need to manually settle scraped MRU races.
HK races are scraped as tote (parimutuel) odds, which fluctuate based on the betting pool. Before making a HK race visible to users, you must convert to fixed odds manually:
-
1Find the HK race in UpcomingIt will appear automatically once scraped. Keep it hidden from users until odds are set.
-
2Click Edit and update each runner's oddsReplace the tote values with your fixed odds. Once saved, these odds are locked — the scraper will not overwrite them.
-
3Show the race to usersOnce fixed odds are in place, set the race to visible. Settlement is automatic once results come through.
Use + Create Race for any race not covered by the scraper — special events, alternate markets, or test races.
-
1Click + Create Race (top right)Fill in race name, date, time, and runners with their fixed odds.
-
2Set visibilitySave as hidden to prepare in advance, or set live immediately. Odds on manually created races are always fixed — they won't auto-update.
-
3Confirm and saveThe race appears in Upcoming and is logged in the Audit trail.
| Tab | What You'll See | What You Can Do |
|---|---|---|
| Upcoming | All scheduled races (scraped + manual) | Edit odds, hide, delete, view bets |
| Past Races | Completed races with results | Review settlement, audit history |
All games are entered by hand. Click + Create Game (top right) and fill in the teams, date, time, stage/group label, and fixed odds for all three markets (Home Win, Draw, Away Win).
| Status | Meaning |
|---|---|
| Hidden | Game exists but users cannot see it. Use for preparation. |
| Open | Visible to users. Bets can be placed. |
| Suspended | Visible but no new bets accepted. Use at kickoff to close the market. |
| Settled ✓ | 90-minute result entered manually. Winning bets paid out. |
| Void | Game cancelled or postponed. All bets refunded. |
- Show — makes a hidden game visible (sets to Open)
- Suspend — closes the market without hiding the game; use at kickoff
- Edit — update teams, date, time, or odds before the game goes live
- Settle — enter the 90-minute score and trigger payouts
- Void — cancel the game and refund all bets
-
1Suspend the game at kickoffClick Suspend when the match starts. This stops users from placing new bets while the match is in progress.
-
2Wait for the 90-minute final scoreSettlement is based on the 90-minute score only. Extra time, penalties, and golden goals do not count. Always confirm the official full-time result before settling.
-
3Click Settle and enter the resultSelect the winning outcome (Home / Draw / Away) based on the 90-minute score. Confirm to trigger payouts to all winning bettors.
Any new user who registers appears at the top of the Users tab under PENDING APPROVAL, highlighted in orange. The count also shows in the top-right ● N PENDING indicator throughout the dashboard.
-
1Review the applicant's name and emailCheck it looks legitimate before approving.
-
2Click Approve to grant accessThe user moves to the active list with a starting balance. They receive a notification via Telegram.
| Column | What It Shows |
|---|---|
| User | Display name + Telegram ID or email |
| Balance | Current virtual credit (VC) balance |
| Status | ACTIVE or frozen |
Click Edit next to any user to open the User Detail panel. You can also search by name or email using the search bar at the top of the list.
When you click Edit, a panel opens showing the user's current balance, total bets placed, and fields to make changes.
-
1Check the current Balance and Total BetsThese are read-only displays showing the user's live state. Confirm you have the right user before making any change.
-
2Enter the new amount in Override BalanceType the full new balance — this replaces the current amount entirely. For example, if the user has 1,500 VC and you want to add 500, enter 2000, not 500.
-
3Enter a Reason (mandatory)This field is required. Write a clear reason such as "Beta re-credit", "Bonus top-up", or "Correction for failed settlement". This is logged in the Audit trail.
-
4Click SaveThe balance updates immediately and the action is logged under the user's account in the Audit trail.
| Action | What It Does | When to Use |
|---|---|---|
| Freeze | Suspends the user account — they can no longer place bets or access the platform | Suspected abuse, disputed activity, or at admin instruction |
| Grant Moderator | Upgrades the user's role from User → Moderator | Only when explicitly authorised — moderators can create/edit races and manage users |
| 🗑 Delete User | Permanently removes the account and all associated data | Only at admin instruction — this cannot be undone |
Use + Create User to add a user directly without them going through the registration flow. Useful for staff testers or pre-approved members.
| Metric | What It Means |
|---|---|
| Bets | Total number of bets placed on the selected day |
| Staked | Total VC wagered by all users on that day |
| House Net | Net VC gained or lost by the house (positive = house profit; negative = users won more) |
| Margin | House net as a percentage of staked amount |
-
1Use the calendar on the leftClick any date to load that day's report. Dates marked with a ● purple dot are race days — days where at least one race was held.
-
2Export if neededUse the ↓ CSV or ↓ PDF buttons (top right of the data panel) to download the day's report for record-keeping or sharing.
| Tab | Purpose |
|---|---|
| Inbox | Messages received from users |
| Broadcast | Send a message to all users simultaneously |
-
1Go to Broadcast → ComposeEnter a Subject (e.g. "Weekend races now live") and your message body.
-
2Optionally tick Schedule messageSet a future date/time if you want the message sent automatically later. Check Scheduled to see pending scheduled messages.
-
3Click Send to All UsersThe message is delivered immediately via Telegram to all registered users.
The Register /start Webhook button at the bottom of the Broadcast page links the Telegram bot so users automatically get a welcome reply when they type /start in Telegram. This only needs to be done once during initial setup. Do not re-register unless instructed by your admin.
| Action Type | Indicator | Example |
|---|---|---|
| RACE DELETED | Red dot | "test — race and open bets deleted" |
| RACE CREATED | Green dot | "test — created and set live" |
| RACE HIDDEN | Orange dot | "HKU Handicap — hidden from users" |
| USER APPROVED | — | User account approved by moderator |
| GAME SETTLED | — | Match result entered, payouts triggered |
Use the filter tabs at the top to narrow the log:
Each entry shows the action label, the item affected, a short description, the admin email who performed it, and a timestamp.