Bifrost Integration Chat — 2026-03-06 (Friday)
Channel: #forsyt-bm-integration (Suntech Innovation Slack)
Bhargav — 12:08 AM
Hi @Michael Cheremuhin, we've deployed fixes for issues 1, 2, 5, and 6. Here's what changed and a few questions:
Issue 1 — NO bets failing: Fixed. Our isHarjeetOdds() function wasn't recognizing 'INDIAN' as an odds type — it only matched 'HARJEET'/'HARJEETS'. This meant markets with oddsType: 'INDIAN' had their prices treated as decimal instead of harjeet format, causing valid harjeet prices (especially 0) to be rejected as "No price available" during bet validation. Now fixed — 'INDIAN', 'HARJEET', and 'HARJEETS' are all handled identically.
Issue 2 — Max button: Fixed. The Max button was only considering the user's balance and market-level volume, but not the per-outcome maximum at the best price level. Now it takes min(per-outcome max, market volume, balance).
Issue 3 — Betslip price sync: Our betslip follows a price-improvement-only sync: we only update the betslip price when the new price is BETTER for the customer (higher for back, lower for lay). If the price worsens, the customer keeps their original price. This is standard betting UX to protect customers from being silently disadvantaged. We are not requesting a new price from the API — we receive price updates via the market book stream and apply them to open betslips only when favorable. Would you prefer all price changes (including worse prices) to sync instead?
Issue 4 — Super Over: We've added diagnostic logging (oddsType now appears in our catalogue logs). In the last 48h we only received 9.x fancy market types — no 14.x sportsbook markets and no SUPER_OVER type in our logs. A few questions to help us fix this:
What marketType does Bifrost send for Super Over? (e.g., SUPER_OVER, MATCH_ODDS_SB, something else?)
What name string comes with it?
• Is it a 14.x or 9.x market ID?
Once we know the exact type, we can add proper mapping so it displays as "Super Over" instead of falling back to "Match Odds (Bookmaker)".
Issue 5 — Lay odds not showing for match odds: Fixed. We were forcing all Bifrost markets into a back-only grid. Now, any Bifrost multi-outcome market that has lay data will display with both back and lay columns (same grid we use for Betfair exchange markets).
Issue 6 — Fractional harjeet prices showing as "2": Fixed. Two bugs — same root cause as Issue 1 ('INDIAN' not recognized), plus our display function was using Math.round() on Indian rates. A harjeet rate of 1.5 was displayed as Math.round(1.5) = 2. Now we properly convert: harjeet 1.5 → decimal 1.015 in our backend, then convert back to Indian rate 1.5 for display.
Questions for you:
Can you confirm what oddsType values you send in market catalogues? We now handle 'INDIAN', 'HARJEET', 'HARJEETS', and 'DECIMAL' — all the Indian variants are treated as the same paise format. Is there any difference between 'INDIAN' and 'HARJEET' in your system?
- For the Super Over issue — what
marketTypeand name does Bifrost send? We need this to add proper display mapping. - On price sync (Issue 3) — should we keep price-improvement-only, or do you want real-time sync in both directions?
Thread (41 replies):
Michael Cheremuhin — 12:21 AM pretty strange about ‘indian’ odds type, will check where it might come from. will also check the rest. the main things is NO bets are fixed, let me give a nudge to conformance team
Bhargav — 12:29 AM Thanks. Please let us know your comments on the above questions.
Also, Currently Bifrost sends empty minStakeCurrencies and no minStake, so we're using a flat fallback (1 HKD = 10 FP). At low rates like 10, that means almost zero effective risk per bet.
Two questions:
- Can you populate minStakeCurrencies or minStake per market/runner on your side? The proto fields are already there.
- If not, do you have a recommended minimum liability threshold we should enforce? We're thinking of switching from "min stake" to "min liability" so the effective risk is meaningful regardless of odds.
Badal Agrawal — 11:41 AM
min(per-outcome max, market volume, balance). Why is market volume required in this equation? @BhargavMichael Cheremuhin — 1:21 PM hi gents. would you mind sharing sample messages from us with oddsType
'INDIAN'and'HARJEETS'? i'd expect it to beDECIMALandHAAR_JEETMichael Cheremuhin — 1:23 PM for SuperOver we are using same market type MATCH_ODDS_SB with "name": "Super Over (Bookmaker)"
Michael Cheremuhin — 1:24 PM as for prices sync - let's keep applying only when it becomes better
Michael Cheremuhin — 1:26 PM regarding minStake - overall we don't provide this field, though it's reserved. something like 10HKD might be a good value for either min stake or liability
Michael Cheremuhin — 2:57 PM @Bhargav what happened with the odds?
Michael Cheremuhin — 2:57 PM 📎 image.png
Michael Cheremuhin — 2:57 PM 📎 image.png
Michael Cheremuhin — 2:59 PM if you want to give them in decimal, the formula is: decimal_price = (haarjeet_price / 100) + 1 you will need to convert the bet odds back into haarjeet
Michael Cheremuhin — 2:59 PM if you want to keep haarjeet, you don't need to modify the odds
Michael Cheremuhin — 3:01 PM pt6 was about rounding that you were doing, not about changing the way how your treat the odds in general. we were almost perfect there, can you please revert that back
Bhargav — 4:17 PM @Michael Cheremuhin We don't have any messages with INDIAN or HARJEETS — those values never appeared in your data. Here are actual samples from the last 24h:
oddsType=ODDS:
catalogue: 9.1958068 type=MATCH_ODDS_SB oddsType=ODDS "Match Odds (Bookmaker)" runners=2 catalogue: 9.1975923 type=NEXT_BALL_MULTI oddsType=ODDS "Ball 0.5 Runs Tas Tigers" runners=7
oddsType=LINE:
catalogue: 9.2103554 type=SESSION_RUNS oddsType=LINE "1 Over Runs Arunachal Pradesh" runners=1
catalogue: 9.2103557 type=SESSION_RUNS oddsType=LINE "2 Over Runs Balochistan" runners=1
The only two values we've ever received are LINE and ODDS. The INDIAN/HARJEETS in our code were assumptions we wrote — not from your messages.
We've now updated to properly recognize LINE and ODDS, and also added HAAR_JEET/DECIMAL per your expected values.
Bhargav — 5:30 PM Can you tell me which markets and for which match should I test these Harjeet oddsType?
Bhargav — 6:48 PM @Michael Cheremuhin Let's connect on this finish this ASAP today. We can connect on a call to make this faster. Today is friday and we are looking to close and get prod APIs today. We want to test for the Final match on Sunday.
Michael Cheremuhin — 7:08 PM @Bhargav seems like i've found the issue. please check if you are using this proto for market book:
Michael Cheremuhin — 7:37 PM
seems like MatchOdds markets don't go to SUSPENDED now (regression)
Thread (1 replies):
Michael Cheremuhin — 7:37 PM sample message:
"marketId": "9.2267633",
"marketStatus": "SUSPENDED",
"maxMarket": 7500,
"maxMarketCurrencies": {
"hkd": 7500,
"aed": 3550,
"eur": 870,
"bdt": 117185,
"gbp": 745,
"rmb": 6880,
"usd": 960,
"inr": 83330
},
"runner": [
{
"id": "3684430",
"status": "ACTIVE",
"priceLadder": {
"availableToBack": [
{
"price": 106,
"maxStake": 471.69,
"maxStakeCurrencies": {
"hkd": 471.69,
"aed": 220,
"eur": 50,
"bdt": 7370,
"gbp": 45,
"rmb": 430,
"usd": 60,
"inr": 5240
}
}
],
"availableToLay": [
{
"price": 113,
"maxStake": 442.47,
"maxStakeCurrencies": {
"hkd": 442.47,
"aed": 205,
"eur": 50,
"bdt": 6910,
"gbp": 40,
"rmb": 405,
"usd": 55,
"inr": 4915
}
}
]
},
"version": "1772806011031"
},
{
"id": "3684431",
"status": "ACTIVE",
"priceLadder": {
"availableToBack": [
{
"price": 89,
"maxStake": 500,
"maxStakeCurrencies": {
"hkd": 500,
"aed": 235,
"eur": 55,
"bdt": 7810,
"gbp": 45,
"rmb": 455,
"usd": 60,
"inr": 5555
}
}
],
"availableToLay": [
{
"price": 94,
"maxStake": 500,
"maxStakeCurrencies": {
"hkd": 500,
"aed": 235,
"eur": 55,
"bdt": 7810,
"gbp": 45,
"rmb": 455,
"usd": 60,
"inr": 5555
}
}
]
},
"version": "1772806011031"
}
],
"version": "1772806011107",
"sportId": "2",
"oddsType": "HAAR_JEET"
}```