Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Diagram

The diagram 1 below provides an architectural overview of the 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.

Front End

In the front end, the customer’s sportsbook should embed the Genius Sports widget, which will load the Multibet application. When a player 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

Panel

www.customer.com/multibet/multibet?productName=testmc10.......&competitionId=296&fixtureId=9249471


Code Block
languagexml
<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 player. 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:

Code Block
languagexml
themeConfluence
<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>15316</Id>                    <!--Constant value for all Betbuilder markets (sport-specific)-->
        <Name>Multibet Football</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:

SportMarketType NameMarketTypeId
Football (10)

Multibet Football

15316
American Football (17)Multibet American Football15317


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:

  1. 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.
  2. 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:

Code Block
languagexml
<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 players.

Let’s consider the following scenario: there are 1000 players 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 directly calling our pricing API endpoint prior to 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:

Code Block
languagexml
<?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:

Code Block
languagexml
<?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:

Panel
  • 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