Introduction

This document describes technologies available for customers wishing to integrate with Multibet API directly. It explains the overall architecture, integration points and requirements.

Table of Contents

Conceptual Diagram

API Domain Names

Environment

Base URL

Notes

Swagger

Production

https://multibet.api.geniussports.com/v2/

Production environment

https://multibet.api.geniussports.com/api-docs/index.html#/

UAT

https://uat.multibet.api.geniussports.com/v2/

User Acceptance Testing. Limited capacity.

https://uat.multibet.api.geniussports.com/api-docs/index.html#/

Authentication

Please refer to the Multibet API Swagger for details regarding authenticating with the API https://multibet.api.geniussports.com/api-docs/index.html

Resources

Genius Sports provides the following API endpoints:

For Market Types, Prices, Cashout, Results and Markets, please refer to the Multibet Swagger or the individual links above. For Fixture coverage, see below.

Fixture Coverage

Returns list of fixtures that are available to be used in Multibet. The Fixture Id is required to call the remaining three endpoints: Markets-types, Prices, Results

API Domain Names

Environment

Base URL

Notes

Production

https://public.coverage.api.geniussports.com

Production environment

UAT

https://uat.public.coverage.api.geniussports.com

User Acceptance Testing. Limited capacity.

Authentication

You should go through all steps in “Get Cognito Token and authenticate using the Coverage API <api-key>

Getting an API key

Your <api-key> for using Coverage API will be provided to you during the onboarding process.

Calling the API

Once you have an <access-token> and your <api-key> you can pass these as headers to the API:

curl --request GET \
  --url https://uat.public.coverage.api.geniussports.com/coverage/multibetprematch/fixtures/{fixtureId} \
  --header 'Authorization: Bearer <access-token> \'
  --header 'x-api-key: <api-key>'

Fixture Coverage Resources

Multibet Pre-Match coverage by sport and date range

Returns data about a particular fixture that will show this fixture is available for use in Multibet Pre-Match.

Path

GET /coverage/multibetprematch/sports/{sportId}/fixtures

{sportId} should be replaced by the relevant Genius Sports ids. Only fixtures starting after this date {from_time} and only fixtures starting before this {to_time} will be returned. Format: yyyy-MM-ddTHH:mm:ss E.g. 2023-05-15T20:00:00

Example: https://uat.public.coverage.api.geniussports.com/coverage/multibetprematch/sports/10/fixtures?from_time=2023-05-15T20%3A00%3A00&to_time=2023-05-17T22%3A00%3A00

Response Body
[
    {
        "betgeniusFixtureId": 123456,
        "sourceFixtureId": "123456",
        "source": "GeniusSportsMultibetPreMatch",
        "sportId": 10,
        "available": true,
        "coverageType": 4
    },
    {
        "betgeniusFixtureId": 1234567,
        "sourceFixtureId": "1234567",
        "source": "GeniusSportsMultibetPreMatch",
        "sportId": 10,
        "available": false,
        "coverageType": 4
    },
    {
        "betgeniusFixtureId": 12345678,
        "sourceFixtureId": "12345678",
        "source": "GeniusSportsMultibetPreMatch",
        "sportId": 10,
        "available": true,
        "coverageType": 4
    }
]

Multibet Pre-Match coverage by fixture

Returns data about a particular fixture that will show this fixture is available for use in Multibet Pre-Match.

Path

GET /coverage/multibetprematch/fixtures/{fixtureId}

{fixtureId} should be replaced by the relevant Genius Sports ids.

Example: https://uat.public.coverage.api.geniussports.com/coverage/multibetprematch/fixtures/12345

Response Body
[
    {
        "betgeniusFixtureId": 123456,
        "sourceFixtureId": "123456",
        "source": "GeniusSportsMultibetPreMatch",
        "sportId": 10,
        "available": true,
        "coverageType": 4
    }
]

Multibet In-Play coverage by sport and date range

Returns data about a particular fixture that will show this fixture is available for use in Multibet In-Play.

Path

GET /coverage/multibetinplay/sports/{sportId}/fixtures

{sportId} should be replaced by the relevant Genius Sports ids. Only fixtures starting after this date {from_time} and only fixtures starting before this {to_time} will be returned. Format: yyyy-MM-ddTHH:mm:ss E.g. 2023-05-15T20:00:00

Example: https://uat.public.coverage.api.geniussports.com/coverage/multibetinplay/sports/10/fixtures?from_time=2023-05-15T20%3A00%3A00&to_time=2023-05-17T20%3A00%3A00

Response Body
[
    {
        "betgeniusFixtureId": 123456,
        "sourceFixtureId": "123456",
        "source": "GeniusSportsMultibetInPlay",
        "sportId": 10,
        "available": true,
        "coverageType": 4
    },
    {
        "betgeniusFixtureId": 1234567,
        "sourceFixtureId": "1234567",
        "source": "GeniusSportsMultibetInPlay",
        "sportId": 10,
        "available": false,
        "coverageType": 4
    },
    {
        "betgeniusFixtureId": 12345678,
        "sourceFixtureId": "12345678",
        "source": "GeniusSportsMultibetInPlay",
        "sportId": 10,
        "available": true,
        "coverageType": 4
    }
]

Multibet In-Play coverage by fixture

Returns data about a particular fixture that will show this fixture is available for use in Multibet In-Play.

Path

GET /coverage/multibetinplay/fixtures/{fixtureId}

{fixtureId} should be replaced by the relevant Genius Sports ids.

Example: https://uat.public.coverage.api.geniussports.com/coverage/multibetinplay/fixtures/12345

Response Body
[
    {
        "betgeniusFixtureId": 123456,
        "sourceFixtureId": "123456",
        "source": "GeniusSportsMultibetInPlay",
        "sportId": 10,
        "available": true,
        "coverageType": 3
    }
]

Appendix A - End to End Example

This example demonstrates the flow of the Multibet API calls for a Football fixture 123456. For simplicity the available markets shown are limited to two (MatchResult and HomeTeamTotalGoalsOverUnder).

Step 1: Get the list of the available market types to show to the user

Using Multibet identifiers

GET sports/10/fixtures/123456/market-types?limitTo=MatchResult,HomeTeamTotalGoalsOverUnder

[
  {
    "id": "MatchResult",
    "name": "Match Result",
    "translatedName": "",
    "categoryName": "Match Result",
    "translatedCategoryName": "",
    "selections": {
      "MatchResult_Home": {
        "name": "Manchester United",
        "translatedName": "Man Utd",
        "compatible": true
        "probability": 0.123,
        "decimalPrice": 1.23,
        "suspended": false
      },
      "MatchResult_Draw": {
        "name": "Draw",
        "translatedName": "X",
        "compatible": true,
        "probability": 0.123,
        "decimalPrice": 1.23,
        "suspended": false
      },
      "MatchResult_Away": {
        "name": "Arsenal",
        "translatedName": "FC Arsenal",
        "compatible": true,
        "probability": 0.123,
        "decimalPrice": 1.23,
        "suspended": false
      }
    }
  },
  {
    "id": "HomeTeamTotalGoalsOverUnder",
    "name": "Manchester United Total Goals OverUnder",
    "translatedName": "Man Utd Total Goals Over/Under",
    "categoryName": "Home Team Total Goals OverUnder",
    "translatedCategoryName": "Home Team Total Goals Over/Under",
    "selections": {
      "HomeTeamTotalGoalsOverUnder_Over_0.5": {
        "name": "Over 0.5",
        "translatedName": "Over 0.5",
        "compatible": true
        "probability": 0.123,
        "decimalPrice": 1.23,
        "suspended": false
      },
      "HomeTeamTotalGoalsOverUnder_Over_1.5": {
        "name": "Over 1.5",
        "compatible": true,
        "translatedName": "Over 1.5",
        "probability": 0.123,
        "decimalPrice": 1.23,
        "suspended": false
      },
      "HomeTeamTotalGoalsOverUnder_Over_2.5": {
        "name": "Over 2.5",
        "translatedName": "Over 2.5",
        "compatible": true,
        "probability": 0.123,
        "decimalPrice": 1.23,
        "suspended": false
      }
    }
  }
]

Using Trading Platform identifiers

GET trading-platform/sports/10/fixtures/123456/market-types?limitTo=66451238,23452345

[
  {
    "id": "MatchResult",
    "name": "Match Result",
    "translatedName": "",
    "categoryName": "Match Result",
    "translatedCategoryName": "",
    "selections": {
      "2452345": {
        "name": "Manchester United",
        "translatedName": "Man Utd",
        "compatible": true
        "probability": 0.123,
        "decimalPrice": 1.23,
        "suspended": false
      },
      "42356234": {
        "name": "Draw",
        "translatedName": "X",
        "compatible": true,
        "probability": 0.123,
        "decimalPrice": 1.23,
        "suspended": false
      },
      "452452345": {
        "name": "Arsenal",
        "translatedName": "FC Arsenal",
        "compatible": true,
        "probability": 0.123,
        "decimalPrice": 1.23,
        "suspended": false
      }
    }
  },
  {
    "id": "HomeTeamTotalGoalsOverUnder",
    "name": "Manchester United Total Goals OverUnder",
    "translatedName": "Man Utd Total Goals Over/Under",
    "categoryName": "Home Team Total Goals OverUnder",
    "translatedCategoryName": "Home Team Total Goals Over/Under",
    "selections": {
      "243624621": {
        "name": "Over 0.5",
        "translatedName": "Over 0.5",
        "compatible": true
        "probability": 0.123,
        "decimalPrice": 1.23,
        "suspended": false
      },
      "345624624": {
        "name": "Over 1.5",
        "compatible": true,
        "translatedName": "Over 1.5",
        "probability": 0.123,
        "decimalPrice": 1.23,
        "suspended": false
      },
      "678762346": {
        "name": "Over 2.5",
        "translatedName": "Over 2.5",
        "compatible": true,
        "probability": 0.123,
        "decimalPrice": 1.23,
        "suspended": false
      }
    }
  }
]

Step 2: User adds a leg (Match Result - Home) to the bet

Using Multibet identifiers

To get the price for the current bet: GET sports/10/fixtures/123456/prices?legs=MatchResult_Home

{
    "decimalPrice": 1.66,
    "probability": 0.5656463943226999,
    "suspended": false,
    "status": "available",
    "legs": [
        {
            "id": "MatchResult_Away",
            "status": "trading"
        }
    ]
}

Using Trading Platform identifiers

To get the price for the current bet: GET trading-platform/sports/10/fixtures/123456/prices?legs=32389135

{
    "decimalPrice": 1.66,
    "probability": 0.5656463943226999,
    "suspended": false,
    "status": "available",
    "legs": [
        {
            "id": "435435612",
            "status": "trading"
        }
    ]
}

Step 3: Get the list of the compatible market types to show to the user after one leg is selected

The following request gets the list of available markets taking into account the already selected leg:

Using Multibet identifiers

GET sports/10/fixtures/123456/market-types?legs=MatchResult_Home&limitTo=MatchResult,HomeTeamTotalGoalsOverUnder

The Match Result market will be included in the response as compatible:false because it is already used in one of the legs. The probabilities and prices take into account that the Match Result Home leg is included in the bet.

[
  {
    "id": "MatchResult",
    "name": "Match Result",
    "translatedName": "",
    "categoryName": "Match Result",
    "translatedCategoryName": "",
    "selections": {
      "MatchResult_Home": {
        "name": "Manchester United",
        "translatedName": "Man Utd",
        "compatible": false
        "suspended": false
      },
      "MatchResult_Draw": {
        "name": "Draw",
        "translatedName": "X",
        "compatible": false
        "suspended": false
      },
      "MatchResult_Away": {
        "name": "Arsenal",
        "translatedName": "FC Arsenal",
        "compatible": false,
        "suspended": false
      }
    }
  },
  {
    "id": "HomeTeamTotalGoalsOverUnder",
    "name": "Manchester United Total Goals OverUnder",
    "translatedName": "Man Utd Total Goals Over/Under",
    "categoryName": "Home Team Total Goals OverUnder",
    "translatedCategoryName": "Home Team Total Goals Over/Under",
    "selections": {
      "HomeTeamTotalGoalsOverUnder_Over_0.5": {
        "name": "Over 0.5",
        "translatedName": "Over 0.5",
        "compatible": true
        "probability": 0.123,
        "decimalPrice": 1.23,
        "suspended": false
      },
      "HomeTeamTotalGoalsOverUnder_Over_1.5": {
        "name": "Over 1.5",
        "compatible": true,
        "translatedName": "Over 1.5",
        "probability": 0.123,
        "decimalPrice": 1.23,
        "suspended": false
      },
      "HomeTeamTotalGoalsOverUnder_Over_2.5": {
        "name": "Over 2.5",
        "translatedName": "Over 2.5",
        "compatible": true,
        "probability": 0.123,
        "decimalPrice": 1.23,
        "suspended": false
      }
    }
  }
]

Using Trading Platfrom identifiers

GET tradin-platform/sports/10/fixtures/123456/market-types?legs=32389135&limitTo=32389135,30194586

The Match Result market will be included in the response as compatible:false because it is already used in one of the legs. The probabilities and prices take into account that the Match Result Home leg is included in the bet.

[
  {
    "id": "MatchResult",
    "name": "Match Result",
    "translatedName": "",
    "categoryName": "Match Result",
    "translatedCategoryName": "",
    "selections": {
      "32389135": {
        "name": "Manchester United",
        "translatedName": "Man Utd",
        "compatible": false
        "suspended": false
      },
      "42356234": {
        "name": "Draw",
        "translatedName": "X",
        "compatible": false
        "suspended": false
      },
      "452452345": {
        "name": "Arsenal",
        "translatedName": "FC Arsenal",
        "compatible": false,
        "suspended": false
      }
    }
  },
  {
    "id": "HomeTeamTotalGoalsOverUnder",
    "name": "Manchester United Total Goals OverUnder",
    "translatedName": "Man Utd Total Goals Over/Under",
    "categoryName": "Home Team Total Goals OverUnder",
    "translatedCategoryName": "Home Team Total Goals Over/Under",
    "selections": {
      "243624621": {
        "name": "Over 0.5",
        "translatedName": "Over 0.5",
        "compatible": true
        "probability": 0.123,
        "decimalPrice": 1.23,
        "suspended": false
      },
      "345624624": {
        "name": "Over 1.5",
        "compatible": true,
        "translatedName": "Over 1.5",
        "probability": 0.123,
        "decimalPrice": 1.23,
        "suspended": false
      },
      "678762346": {
        "name": "Over 2.5",
        "translatedName": "Over 2.5",
        "compatible": true,
        "probability": 0.123,
        "decimalPrice": 1.23,
        "suspended": false
      }
    }
  }
]

Step 3: User adds a second leg (HomeTeamTotalGoalsOverUnder_Over_2.5) to the bet

Using Multibet identifiers

The following call gets the price for the current bet: GET sports/10/fixtures/123456/prices?legs=MatchResult_Home,HomeTeamTotalGoalsOverUnder_Over_2.5

{
    "decimalPrice": 1.77,
    "probability": 0.4656463943226999,
    "suspended": false,
    "status": "available",
    "legs": [
        {
            "id": "MatchResult_Home",
            "status": "trading"
        },
        {
            "id": "HomeTeamTotalGoalsOverUnder_Over_2.5",
            "status": "trading"
        }
    ]
}

Using Trading Platform identifiers

The following call gets the price for the current bet: GET trading-platform/sports/10/fixtures/123456/prices?legs=2452345,243624621

{
    "decimalPrice": 1.77,
    "probability": 0.4656463943226999,
    "suspended": false,
    "status": "available",
    "legs": [
        {
            "id": "2452345",
            "status": "trading"
        },
        {
            "id": "243624621",
            "status": "trading"
        }
    ]
}

Step 4: Request to create a market for the required bet

Valid only for customers who use Option 2. Multibet API + Sportsbook Integration

The following call creates a market in the customer's Trading Platform, if that bet was not requested previously. In case market has been already created it gets the market id from the Integration Service along with any other available context from Trading Platform

Using Multibet identifiers

GET /sports/10/fixtures/123456/markets?legs=legs=MatchResult_Home,HomeTeamTotalGoalsOverUnder_Over_2.5

{
  "id": "104517634",
  "tradingPlatformId": "123abc",
  "tradingPlatformMetadata": "CP$null$6768414.2$Lions%20v%20Jaguares$45592268.2...",
  "tradingPlatformFixtureId": "1234"
}

Using Trading Platform identifiers

GET trading-platform/sports/10/fixtures/123456/markets?legs=legs=2452345,243624621

{
  "id": "104517634",
  "tradingPlatformId": "123abc",
  "tradingPlatformMetadata": "CP$null$6768414.2$Lions%20v%20Jaguares$45592268.2...",
  "tradingPlatformFixtureId": "1234"
}

Step 5: Request a result for the bet

Using Multibet identifiers

GET sports/10/fixtures/123456/results?legs=MatchResult_Home,HomeTeamTotalGoalsOverUnder_Over_2.5

{
    "result": "lose",
    "legResults": [
        {
            "leg": "MatchResult_Home",
            "legResult": "win"
        },
        {
            "leg": "HomeTeamTotalGoalsOverUnder_Over_2.5",
            "legResult": "lose"
        }
    ]
}

Using Trading Platform identifiers

GET trading-platform/sports/10/fixtures/123456/results?legs=2452345,243624621

{
    "result": "lose",
    "legResults": [
        {
            "leg": "2452345",
            "legResult": "win"
        },
        {
            "leg": "243624621",
            "legResult": "lose"
        }
    ]
}