Skip to main content

Live Odds Message Format

The data we send to customers has three layers. First, the standard BEDEX DataProviderMessage envelope. Second, the LiveOddsUpdateMessage wrapper. Third, the payload of LiveOddsUpdateMessage, which contains odds updates (OddsUpdateMessage) and score updates (ScoreUpdateMessage).

This article explains the data format itself. You can download example messages here.


DataProviderMessage

{
"path": "replay/esports/lol/riot/superleague_lol/10476977477967401/10476977477967401/3e67fcc7-fd42-52b5-c84e-a093ffceee26",
"seqIdx": 100,
"timeSent": "2022-01-14T05:38:08.479411Z",
"payload": {...},
"version": "2.0"
}

DataProviderMessage is the topmost envelope included in all BEDEX messages. It contains several metadata fields.

FieldDescriptionType
pathThe BEDEX identifier for the streamString
seqIdxA unique number that identifies the ordering of messages in each stream. seqIdx starts at 1 and is increased for each messageInteger
timeSentUTC time when the message was originally sent by the data providerISO 8601 datetime
payloadContains the LiveOddsUpdateMessage messageObject
versionDataProviderMessage structure versionString

LiveOddsUpdateMessage

{
"version": "1.0",
"createdAt": "2022-05-01T00:00:00.00Z",
"updatedAt": "2022-05-02T00:00:00.00Z",
"provider": "otter",
"type": "odds",
"payload": {...}
}

The payload of a DataProviderMessage is a LiveOddsUpdateMessage, which includes the following fields.

FieldDescriptionType
versionLiveOddsUpdateMessage structure versionString
createdAtdate of when the first update for this match was createdISO 8601 datetime
updatedAtdate of last updateISO 8601 datetime
providerodds provider’s name set by BayesString
typescores or oddsString
payloadOddsUpdateMessage or ScoreUpdateMessageObject

OddsUpdateMessage

Full OddsUpdateMessage example
{
"metadata": {
"tournament": "esports:tournament:c0874279-09eb-4e55-ac0d-5b98fc198c05",
"match": "esports:match:030d603c-e62a-40ae-9f53-05af1172e50f",
"title": "csgo",
"participants": [
{"name": "team1", "id": "esports:team:3f222519-2242-4857-83ac-3f89ea2c1b9e", "type": "team"},
{"name": "team2", "id": "esports:team:af49ae8b-efd7-4b48-8e32-8f3917e84e09", "type": "team"},
{"name": "team3", "id": "esports:team:0b6a9f08-1a9a-44a0-897c-a5640f2ca53b", "type": "team"},
{"name": "player1", "id": "esports:player:c4530f27-6cd2-4427-a4a8-789cb0a51f28", "type": "player"}
]
},
"createdAt": "2023-03-13T15:16:55.344053",
"updatedAt": "2023-03-13T15:16:55.344053",
"type": "prematch",
"provider": "example_odds_provider",
"markets": [
{
"marketName": "match_winner",
"marketType": "2way",
"specifiers": {},
"outcomes": [
{
"outcome": "team1",
"decimalOdd": 1.6,
"tradingStatus": "open",
"won": false
},
{
"outcome": "team2",
"decimalOdd": 2.25,
"tradingStatus": "open",
"won": false
}
]
},
{
"marketName": "map_total_rounds",
"marketType": "overunder",
"specifiers": {
"mapNumber": 2,
"line": 28.5
},
"outcomes": [
{
"outcome": "over",
"decimalOdd": 2.9,
"tradingStatus": "open",
"won": false
},
{
"outcome": "under",
"decimalOdd": 1.38,
"tradingStatus": "open",
"won": false
}
]
}
]
}

If the type in LiveOddsUpdateMessage is odds, then the following OddsUpdateMessage fields will occupy the payload:

FieldDescriptionType
metadatacontains the fixture service PERIDs of the entities related to this matchObject
oddsTypeodds type. Either prematch or liveString
marketscontains a list of all markets for a matchList of Objects

NOTE: OddsUpdateMessages will always contain all markets that had been initialised for the match, including those that had been closed, settled, and canceled during the match.

metadata

{
...
"metadata": {
"tournament": "esports:tournament:627266ae-0552-5916-98ee-7529b0953184",
"match": "esports:match:2bb1497e-3290-5da7-9196-5d6db1bd8732",
"title": "csgo",
"participants": [
{"name": "team1", "id": "esports:team:3f222519-2242-4857-83ac-3f89ea2c1b9e", "type": "team"},
{"name": "team2", "id": "esports:team:af49ae8b-efd7-4b48-8e32-8f3917e84e09", "type": "team"},
{"name": "team3", "id": "esports:team:0b6a9f08-1a9a-44a0-897c-a5640f2ca53b", "type": "team"},
{"name": "player1", "id": "esports:player:c4530f27-6cd2-4427-a4a8-789cb0a51f28", "type": "player"}
]
}
...
}

The metadata object contains the fixture service PERIDs of the entities related to this match.

FieldDescriptionType
tournamentthe tournament PERIDString
matchthe match PERIDString
titlethe title of the tournamentString
participantsPERIDs of the participating players or teamsList of Objects

markets

{
...
"markets": [
{
"marketName": "match_winner",
"marketType": "2way",
"specifiers": {},
"outcomes": [
{
"outcome": "team1",
"decimalOdd": 1.6,
"tradingStatus": "closed",
"won": true
},
{
"outcome": "team2",
"decimalOdd": 2.25,
"tradingStatus": "closed",
"won": false
}
]
},
...
]
...
}

The markets object contains a list of all markets for a match.

FieldDescriptionType
marketNamethe market descriptionString
marketTypethe market typeString
outcomesthe betting outcomes for this marketList
specifiersadditional details — can be player, team, mapNumber, line, etcObject

ScoreUpdateMessage

Full ScoreUpdateMessage example
"metadata": {
"tournament": "esports:tournament:516155fd-9441-4805-87dd-6418a9842073",
"match": "esports:match:1aa0386d-2189-4cf6-8085-4c5ca0ac7621",
"title": "csgo",
"participants": [
{"name": "team1", "id": "esports:team:3f222519-2242-4857-83ac-3f89ea2c1b9e", "type": "team"},
{"name": "team2", "id": "esports:team:af49ae8b-efd7-4b48-8e32-8f3917e84e09", "type": "team"},
{"name": "team3", "id": "esports:team:0b6a9f08-1a9a-44a0-897c-a5640f2ca53b", "type": "team"},
{"name": "player1", "id": "esports:player:c4530f27-6cd2-4427-a4a8-789cb0a51f28", "type": "player"}
]
},
"matchStatus": "ONGOING",
"matchFormat": "bestOf",
"matchCurrent": 2,
"matchMax": 3,
"scores": [

{
"interval": "match",
"intervalNumber": null,
"scoreType": "maps",
"scores": [
{
"participant": "team1",
"score": 1
},
{
"participant": "team2",
"score": 1
}
]
},
{
"interval": "map",
"intervalNumber": 1,
"scoreType": "rounds",
"scores": [
{
"participant": "team1",
"score": 16
},
{
"participant": "team2",
"score": 12
}
]
},
{
"interval": "match",
"intervalNumber": null,
"scoreType": "kills",
"scores": [
{
"participant": "player1",
"score": 17
}
]
}
]

If the type in LiveOddsUpdateMessage is scores, then the following ScoreUpdateMessage fields will occupy the payload:

FieldDescriptionType
metadatacontains the fixture service PERIDs of the entities related to this match.Object
matchStatuscurrent status of the match, ex. ONGOINGString
matchFormatwhat kind of match is being played, ex. bestOfString
matchCurrentwhich match is currently being played, ex. 2 (out of 2 or more matches)Integer
matchMaxthe max number of matches that will be playedInteger
scorescurrent scores of the teams or players playingList of Objects

metadata

{
...
"metadata": {
"tournament": "esports:tournament:627266ae-0552-5916-98ee-7529b0953184",
"match": "esports:match:2bb1497e-3290-5da7-9196-5d6db1bd8732",
"title": "csgo",
"participants": [
{"name": "team1", "id": "esports:team:3f222519-2242-4857-83ac-3f89ea2c1b9e", "type": "team"},
{"name": "team2", "id": "esports:team:af49ae8b-efd7-4b48-8e32-8f3917e84e09", "type": "team"},
{"name": "team3", "id": "esports:team:c34c2f45-8909-45a0-9c62-16499c5c90e7", "type": "team"},
{"name": "player1", "id": "esports:player:4c3352ee-cfcc-4f52-a34d-ad2005d7de06", "type": "player"}
]
},
...
}

The metadata object contains the fixture service PERIDs of the entities related to this match.

FieldDescriptionType
tournamentthe tournament PERIDString
matchthe match PERIDString
titlethe title of the tournamentString
participantsPERIDs of the participating teams or playersList of Objects

scores

{
...
"scores": [
{
"interval": "match",
"intervalNumber": null,
"scoreType": "maps",
"scores": [
{
"participant": "team1",
"score": 1
},
{
"participant": "team2",
"score": 1
}
]
},
...
]
...
}

The scores object provides the score of each team or player.

FieldDescriptionType
intervalthe interval of the series, ie. match or mapString
intervalNumberthe event number in a series of events, ie. first, second, third... (can be null)Integer
participantPERID of a team or playerString
scorenumeric score of the participant (player or team)Integer
scoreTypewhat the integer score field represents — amount of maps, rounds, or killsString