- Created by Aleksandr Tihhonjuk , last modified on Oct 13, 2022
You are viewing an old version of this page. View the current version.
Compare with Current View Page History
« Previous Version 3 Next »
Diagram
The diagram 1 below provides an architectural overview of the Betbuilder / Multibet integration and describes the data flow for a newly ‘built’ bet.
Integration workflow
Multibet integration has a front end and a back end component as shown on diagram 1.
If you have already integrated Betbuilder in the past - you have already completed most of the work to support Multibet. You will only need embed the new widget and support two new market types, which follow the same logic as the Betbuilder ones that you are already familiar with.
Multibet Overview
Multibet is a service service provided purely by Genius Sports, which allows "building" multiple selection bets within the same event. Multibet comes with a customizable widget that can be embedded into desktop / mobile websites and betting applications.
Multibet currently supports Football, NFL American Football with other major sports in the pipeline.
If you have already integrated Betbuilder in the past - you have already completed most of the work to support Multibet. You will only need embed the new widget and support two new market types, which follow the same logic as the Betbuilder ones that you are already familiar with.
Front End
In the front end, the customer’s sportsbook should embed the Genius Sports widget, which will load the Multibet application. When a punter requests a bet, the Genius Sports widget will make a call to the customer’s betslip with all the required data to populate it with the selection details. The technical information for the front end integration can be found in the following space - SmartStream Integrations.
Customers that have already integrated with other front end Genius Sports products such as scorecentres and scoreboards can re-use the existing Iframe implementation for Multibet.
How do I embed a Multibet widget under a specific fixture?
Multibet widget offered by Genius Sports is fixture specific and does not accomodate an event viewer and selector page, therefore it should be embedded under a specific fixture within Sportsbook page. Within the widget, you will be able to deep-link to a specific fixture using competitionId and fixtureId URL parameter which is expecting Genius Sports Fixture and Competition Ids as a values:
www.customer.com/multibet/multibet?productName=testmc10.......&competitionId=296&fixtureId=9249471
<iframe src="https://gsm-widgets.betstream.betgenius.com/multibet?fixtureId=6102728&productName=[clientName]&competitionId=296&culture=es-ES" width="1180" height="622"></iframe>
www.customer.com/multibet must reverse proxy https://gsm-widgets-uat.betstream.betgenius.com - for more information please refer to "Authenticating user session using a proxy service".
Back End
The back end integration process is explained in detail in the “Genius Sports Integration Schema” section. Each message, will be pushed to the customer’s endpoint as described and the data contract details for Fixture, Market and Resulting messages will remain mostly the same. Any differences to the standard Genius Sports pricing feed are highlighted below.
Multibet Fixture Availability
Multibet fixtures coverage is managed by Genius Sports. Below is list of currently supported sports/leagues:
Football - all fixtures with InPlay feeds coverage
American Football - InPlay NFL
Fixture data will be delivered via Fixture messages as outlined in “Genius Sports Integration Schema”.
Market Creation/Update
The number of possible combinations for a Betbuilder / Multibet bet, is practically unlimited and therefore the list of available markets cannot be pre-defined as it is typically done for single PreMatch / InPlay selections. Instead, the markets will dynamically be generated in the platform’s back end, every time a new unique combination is requested from a punter. The name of the market will be the description of the ‘built’ bet while the marketType Id and MarketType Name will remain the same as shown in the example below:
<MarketSet> <FixtureId>3476056</FixtureId> <Markets> <Market> <Id>100001331</Id> <Sequence>0</Sequence> <TradingStatus>Open</TradingStatus> <Name>Both teams to score – Yes, Match booking pts – over 39.5, Match corners – over 10.5, Player cards – Eric Bailly carded </Name> <!--The description of the built bet dynamically generated.--> <ExpiryUtc>2015-10-24T09:59:59Z</ExpiryUtc> <MarketType> <Id>9573</Id> <!--Constant value for all Betbuilder markets (sport-specific)--> <Name>Request a Bet</Name> <!--Constant value for all Betbuilder markets (sport-specific)--> <IsHandicap>false</IsHandicap> </MarketType> <InPlay>false</InPlay> <Selections> <Selection> <Id>300002720</Id> <TradingStatus>Trading</TradingStatus> <Name>Yes</Name> <!--Constant value for all Betbuilder selections--> <Outcome> <Id>39</Id> <Name>Yes</Name> </Outcome> <Numerator>200</Numerator> <Denominator>3</Denominator> <Decimal>66.67</Decimal> </Selection> </Selections> </Market> </Markets> </MarketSet>
The following market types are available for Multibet product:
Sport | MarketType Name | MarketTypeId |
---|---|---|
Football (10) | Multibet Football | 15316 |
American Football (17) | Multibet American Football | 15317 |
Platform’s response to Multibet Market messages
Following a Multibet market creation/update request, the customer’s platform is expected to return a string of data which will include the ‘instructions’ for the population of the Betslip in the front end. There are 2 options how to achieve this:
- The default option for getting the betslip populated after it’s created, is for Genius Sports service to “predict” the response data within our platform and publish a feedback message to Multibet system after a successful response for the market creation (OK 200). This is possible if client platform is using Genius Sports Market data and any additional information is predictable within our environment.
- Additional option is to take advantage of the asynchronous approach where the market response is pushed from your system to a separate endpoint. If the parameters from your platform would need to be included in the feedback message, then this would be the desired workflow to implement.
Please note that the latest platform response for each unique Multibet market, will be stored on Genius Sports’ system in order to be re-used for subsequent bets.
An example platform response when using option 2, is provided below:
<UpdategramResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.sportsdataservices.com/integrationService/v3/response"> <Header> <MessageGuid>fe2ef81c-8c6d-4f63-9fb4-290bc7f15f1e</MessageGuid> <!--as received in the original Genius Sports message--> <TimeStampUtc>2020-04-21T13:20:04.3634Z</TimeStampUtc> <!--timestamp generated when dispatching response --> <BookmakerId>1234</BookmakerId> <!--The Genius Sports Bookmaker Id--> <FixtureId>12312334</FixtureId> <!--The Genius Sports fixture Id--> <PlatformFixtureId>2456789</PlatformFixtureId> <!--(int)The corresponding platform fixture Id--> <StatusCode>0</StatusCode> <!--(int) indicates success/failure--> <StatusMessage>Success</StatusMessage> <!--(string) describes success/failure--> </Header> <MarketSet> <Markets> <Market> <Id>104517634</Id> <!--Genius Sports marketId--> <PlatformId>123abc</PlatformId> <!--(string) The corresponding platform marketId--> <PlatformData> <!--(string) data required to populate the Betslip in the front end--> CP$null$6768414.2$Lions%20v%20Jaguares$45592268.2$Anytime%20Tr yscorer$E6768414.2|SCORE$$$$False$H$null$null$null$$$371565609.2$Coe tzee,%20A$5$4$D,T,A,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,TX,P,Y,L1 5,C,L31,H,L63,SH,G,SSA,DSA,S$CP$50652$ </PlatformData> </Market> </Markets> </MarketSet> </UpdategramResponse>
Alternative to Price Push Feed
Push feed is the default way of sending market price updates but it can potentially cause performance issues (which will lead to stale prices) under heavy load. The load directly correlates with the number of active punters.
Let’s consider the following scenario: there are 1000 punters creating a unique multibets in a short period of time for one fixture. This means that 1000 new markets will be created and price updates will be pushed for each of them for 1 minute. In In-Play price updates might happen very often (potentially every second) which means that for this scenario we might send up to 1000 price updates to Sportsbook trading platform.
Alternative approach is to disable the push feed and use prices
endpoint provided by Basic API Integration before accepting the bet.
Resulting
Resulting will be delivered via V3 integration service to your platform endpoint and the message data contract will remain the same as described under Integration Schema section (link). when Result is received the market referenced by Market.Id should be resulted within your trading platform. SelectionResult includes a result value for single selection "Yes", which determines the globabl outcome of this market. Please find an example message below:
<?xml version="1.0" encoding="utf-8"?> <Updategram xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.sportsdataservices.com/integrationService/v3"> <Header> <MessageGuid>1856d75e-efef-44e7-8eea-69ec4fa74c58</MessageGuid> <TimeStampUtc>2019-03-15T10:56:01.672521Z</TimeStampUtc> <Retry>0</Retry> </Header> <ResultSet> <FixtureId>5553065</FixtureId> <Results> <MarketResult> <MarketId>100032419</MarketId> <Results> <SelectionResult> <SelectionId>300032419</SelectionId> <ResultStatus>Loser</ResultStatus> </SelectionResult> </Results> </MarketResult> </Results> </ResultSet> </Updategram>
Per-leg Resulting
In addition to the above, there is an option to enable a feature which would allow us to deliver per-leg resulting information to your platform. In order to do this, additional selections will be added to the existing MarketResult with additional name properties to identify the individual selections. Below is an example of a result message which includes per-leg resulting info:
<?xml version="1.0" encoding="utf-8"?> <Updategram xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.sportsdataservices.com/integrationService/v3"> <Header> <MessageGuid>947c89cc-112a-4b81-82be-6184e5777811</MessageGuid> <TimeStampUtc>2019-03-15T10:56:02.5163333Z</TimeStampUtc> <Retry>0</Retry> </Header> <ResultSet> <FixtureId>5553065</FixtureId> <Results> <MarketResult> <MarketId>101603559</MarketId> <Results> <SelectionResult> <SelectionId>301603558</SelectionId> <ResultStatus>Loser</ResultStatus> <Name>Yes</Name> </SelectionResult> <SelectionResult> <SelectionId>0</SelectionId> <ResultStatus>Winner</ResultStatus> <Name>Correct score - Perth Glory 2-0</Name> </SelectionResult> <SelectionResult> <SelectionId>0</SelectionId> <ResultStatus>Loser</ResultStatus> <Name>Player cards - Scott Galloway carded</Name> </SelectionResult> <SelectionResult> <SelectionId>0</SelectionId> <ResultStatus>Loser</ResultStatus> <Name>Player goals - Christopher Ikonomidis score anytime</Name> </SelectionResult> </Results> </MarketResult> </Results> </ResultSet> </Updategram>
Here are key details to consider with the per-leg resulting:
- All SelectionResults have Name element included
- Primary selection “Yes” would hold the global result for the betslip
- Leg selections are described with a Name and would all have SelectionId = 0.
- SelectionResult elements will be ordered in the following manner:
- Primary selection with valid ID and Name “Yes” will be first in the list
- Leg selections will be ordered identically to the order published initially with the marketName element in MarketSet message
- No labels