RMQ DATA FEED
How To Connect
Section titled “How To Connect”Please use the classic RabbitMQ queue based on AMQPS and the following settings:
port: 5671host: (ask support)user: username (ask support for credentials)password: password (ask support for credentials)VHost: marketsTLS: truedialing to: amqps://{username}:{password}@{kero-rabbitmq-host}:5671/marketsqueue: {username}The RabbitMQ server has a default heartbeat of 30s, and a timeout of 7200s. These values can be overridden in your config.
There is a heartbeat message with the key *.*.*.alive that is pushed directly from the server every 15s for you to ensure that the server is still running.
Messages will have a routing key in the format of:
<sport>.<stats_source>.<game_id>.<message_type>
-
<sport>is an enum of values:SOCCER,BASKETBALL,HOCKEY,BASEBALL,FOOTBALL -
<stats_source>is an enum of values:betradar,sportradar,nba_cdn,genius,statsapi_nhl,opta -
<game_id>is a source ID of the game -
<message_type>is an enum of values:EVENT,MARKET
RabbitMQ message structure
Section titled “RabbitMQ message structure”| Field | Type | Required | Description |
|---|---|---|---|
type | string | ✅ | Type of message Enum: "MARKET" |
sub_type | string | ✅ | Optional message subtype Enum: "TEMPLATE" |
action | string | ✅ | Action to do with the object Enum: "PUBLISH", "UPDATE_MARKET_ODDS", "SUSPEND", "ACTIVATE","UNPUBLISH", "RESOLVE", "REVERSE", "CANCEL" |
timestamp | integer | ✅ | UNIX timestamp in milliseconds |
object | Market | ✅ | Conditional on type and sub_type, see below |
Market Object
| Field | Type | Required | Description |
|---|---|---|---|
id | string | ✅ | Unique Kero UUID of this market object |
event_id | string | ✅ | Kero UUID of the event |
event | Event | ✅ | Embedded minimal event object |
market_state | string | ✅ | Market state Enum: "PUBLISHED","SUSPENDED","TIMED_OUT","RESOLVED","DRAFT" |
game_id | string | ✅ | External source game ID |
key_market | string | ✅ | Unique key for the market type |
is_core | boolean | ✅ | Whether this is a core market |
title_variable | string (JSON) | ❌ | Dynamic values for title rendering (can be string or map) |
context_note_variable | string (JSON) | ❌ | Dynamic values for context rendering (can be string or map) |
constraint_variable | string (JSON) | ❌ | Dynamic values for constraint rendering (can be string or map) |
context_note_variable_type | string | ❌ | Type of the context_note_variable(if context_note_variable field has a value of a map,then context_note_variable_type is a key in this map) |
title_variable_type | string | ❌ | Format type for title_variable(if title_variable field has a value of a map,then title_variable_type is a key in this map) |
constraint_variable_type | string | ❌ | Format type for constraint_variable(if constraint_variable field has a value of a map,then constraint_variable_type is a key in this map) |
answers_variables | map[string]string (JSON) | ❌ | Dynamic values for answers renderingkey is: answer_a,answer_b,answer_c,etc…value is JSON string |
answers_odds | map[string]AnswersOddsMap | ✅ | Map of odds per answerkey is: answer_a,answer_b,answer_c,etc…value is an object of answers odds |
market_context | MarketContextDetails | ❌ | Statistics metadata related to the current action (can be different depending on SPORT) |
match_state | MatchStateDetails | ❌ | Statistics metadata related to the current game moment (can be different depending on SPORT) |
resolve_condition | string | ❌ | Correct answer for current market (answer_a,answer_b,answer_c, etc.). Shows only on RESOLVE or REVERSE |
variables_entities | map[string]Entity | ❌ | Dynamic metadata related to provided variableskey is a name of a variable from any _variable fieldvalue is an entity object related to it |
answers_restricted | map[string]boolean | ✅ | States which market answers keys are restricted to bet (when value is TRUE: means the answer key is suspended). Such answer key will have a probability set but with a flag (See AnswersOddsMap) |
status_reason | string | ❌ | Reason for the current market state. (See Status reasons) |
Event Object
| Field | Type | Required | Description |
|---|---|---|---|
alternate_game_ids | object | ❌ | Map of provider-specific game IDs ( key = provider name(Enum: betradar, sportradar, nba_cdn, genius, statsapi_nhl, opta),value = provider id) |
Answers Odds Map Object
| Field | Type | Required | Description |
|---|---|---|---|
answer_a | AnswerOdds | ❌ | Odds and prob for answer A |
answer_b | AnswerOdds | ❌ | Odds and prob for answer B |
answer_c | AnswerOdds | ❌ | Odds and prob for answer C |
| … | … | ❌ | Odds and prob for answer … |
answer_z | AnswerOdds | ❌ | Odds and prob for answer Z |
Answers Odds Object
| Field | Type | Required | Description |
|---|---|---|---|
is_restricted | boolean | ✅ | Whether this answer is restricted to bet (TRUE means restricted) |
prob | float | ✅ | Probability for the answer |
odds | Odds | ✅ | Kero Odds in all formats |
Odds Object
| Field | Type | Required | Description |
|---|---|---|---|
american | string | ✅ | American odds representation |
european | string | ✅ | European (Decimal) odds representation |
fractional | string | ✅ | Fractional odds representation |
Market Context Details Object
The marketContextDetails object contains sport-specific contextual information that provides additional details about the current game state and market conditions. This object varies by sport and includes relevant fields for each specific sport type.
| Field | Type | Description |
|---|---|---|
display_ddy | string | Display information for down, distance, and yards (DDY format) Example: “2nd & 8” |
distance | string | Yards needed for a first down Example: “8” |
down | string | Current down number (1-4) Example: “2” |
match_drive_number | string | Sequential number of drives in the entire game Example: “5” |
play_number | string | Sequential number of plays in the current drive Example: “3” |
team_drive_number | string | Sequential number of drives for the specific team Example: “3” |
team | string | Team associated with the market Enum: “home”, “away” |
player1_full_name | string | Full name of the player involved in the market Note: Field name varies based on market type (player1_full_name, player2_full_name, etc.) |
| Field | Type | Description |
|---|---|---|
batter_name | string | Full name of the current batter (player at bat) Example: “Mike Trout” |
batter_order_position | string | Position of the batter in the team’s batting lineup (1-9) Example: “3” |
batter_plate_appearance_number | string | Sequential number of the batter’s plate appearance in the current game Example: “2” |
inning | string | Current inning number Example: “3” |
inning_side | string | Which half of the inning is currently being played Enum: “top”, “bottom” |
line | string | Betting line or spread for the market Example: “1.5” |
pitch_number | string | Number of the current pitch in the at-bat Example: “2” |
pitcher_name | string | Full name of the current pitcher Example: “Clayton Kershaw” |
plate_appearance_position | string | Current position of the player in the batting order queue Enum: “at_bat”, “on_deck”, “in_the_hole” |
team | string | Team associated with the market Enum: “HOME”, “AWAY” |
Match State Details Object
The match_state object contains sport-specific information about the current game state and statistics. This object varies by sport and includes relevant fields for each specific sport type.
| Field | Type | Description |
|---|---|---|
current_possession | string | Team currently in possession of the ball Enum: “home”, “away” |
| Field | Type | Description |
|---|---|---|
inning | string | Current inning number Example: “3” |
inning_side | string | Which half of the inning is currently being played Enum: “top”, “bottom” |
away_score | string | Current score for the away team Example: “2” |
home_score | string | Current score for the home team Example: “1” |
outs | string | Number of outs in the current half-inning Enum: “0”, “1”, “2” |
balls | string | Number of balls in the current at-bat Enum: “0”, “1”, “2”, “3” |
strikes | string | Number of strikes in the current at-bat Enum: “0”, “1”, “2” |
Entity Object
| Field | Type | Required | Description |
|---|---|---|---|
type | string | ✅ | Type of the entity. Enum: PLAYER, TEAM |
id | integer | ✅ | Kero ID of the entity (player or team) |
full_name | string | ❌ | Entity full name |
short_name | string | ❌ | Shortened name of the entity |
common_name | string | ❌ | Commonly used name of the entity |
jersey_number | string | ❌ | Player’s jersey number |
JSON examples:
{ "type": "MARKET", "sub_type": "TEMPLATE", "object": { "id": "f668332f-cc84-46a1-9a91-fdd8e5a46bb6", "event_id": "7d11a558-5fa1-4c8b-91b6-9b1fce11a36d", "event": { "alternate_game_ids": { "betradar": "55311849" } }, "market_state": "PUBLISHED", "answers_odds": { "answer_a": { "is_restricted": false, "prob": 0.41, "odds": { "american": "+122", "european": "2.22", "fractional": "61/50" } }, "answer_b": { "is_restricted": true, "prob": 0.59, "odds": { "american": "-100", "european": "1.87", "fractional": "61/50" } } }, "game_id": "55311849", "key_market": "BASEBALL_A_12_7", "is_core": true, "market_context": { "batter_name": "", "batter_order_position": "0", "batter_plate_appearance_number": "0", "inning": "1", "inning_side": "bottom", "line": "3.5", "pitch_number": "1", "pitcher_name": "Matt Krook", "plate_appearance_position": "", "team": "AWAY" }, "match_state": { "away_score": "10", "balls": "0", "home_score": "5", "inning": "9", "inning_side": "top", "outs": "1", "strikes": "0" }, "title_variable": "{\"batter\": \"Matt Lugo\", \"target_value\": \"5th\"}", "context_note_variable": "{\"player_name\": \"M. Krook\", \"target_value\": \"4.2\"}", "constraint_variable": "{\"batter\": \"M. Lugo\", \"target_value1\": \"0\", \"target_value2\": \"4\"}", "context_note_variable_type": "", "title_variable_type": "", "constraint_variable_type": "0", "answers_variables": { "answer_a": "{\"line\":\"3.5\"}", "answer_b": "{\"line\":\"3.5\"}" }, "variables_entities": { "batter": { "type": "PLAYER", "id": 1, "full_name": "Matt Lugo" }, "player_name": { "type": "PLAYER", "id": 2, "short_name": "M. Krook" } }, "answers_restricted": { "answer_a": false, "answer_b": true } }, "action": "PUBLISH", "timestamp": 1747890599809}{ "type": "MARKET", "sub_type": "TEMPLATE", "object": { "id": "0954fc76-3dab-4d1b-b87d-2932a085dfb1", "event_id": "08814556-61f4-4557-89e8-71082beaafe8", "event": { "alternate_game_ids": { "betradar": "59796334" } }, "market_state": "PUBLISHED", "answers_odds": { "answer_a": { "is_restricted": true, "prob": 0.37, "odds": { "american": "+200", "european": "3.00", "fractional": "3/1" } }, "answer_b": { "is_restricted": false, "prob": 0.13, "odds": { "american": "+400", "european": "5.00", "fractional": "4/1" } }, "answer_c": { "is_restricted": false, "prob": 0.29, "odds": { "american": "+202", "european": "3.03", "fractional": "203/100" } }, "answer_d": { "is_restricted": false, "prob": 0.24, "odds": { "american": "+257", "european": "3.57", "fractional": "257/100" } } }, "game_id": "59796334", "key_market": "BASKETBALL_A_7_37_4", "is_core": true, "title_variable": "{\"start_resolve_cl\":\"2:52\",\"target_period\":\"(OT1)\",\"team\":\"Knicks\"}", "context_note_variable": "{\"target_value1\":\"36\",\"target_value2\":\"11\",\"team_abr\":\"NYK\"}", "constraint_variable": "", "context_note_variable_type": "", "title_variable_type": "", "constraint_variable_type": "", "answers_variables": { "answer_a": "{}", "answer_b": "{}", "answer_c": "{}", "answer_d": "{}" }, "variables_entities": { "team": { "type": "TEAM", "id": 1, "side": "HOME", "short_name": "NYK", "common_name": "Knicks", }, "team_abr": { "type": "TEAM", "id": 1, "side": "HOME", "short_name": "NYK", "common_name": "Knicks" } }, "answers_restricted": { "answer_a": true, "answer_b": false, "answer_c": false, "answer_d": false } }, "action": "UPDATE_MARKET_ODDS", "timestamp": 1747883067372}{ "type": "MARKET", "sub_type": "TEMPLATE", "object": { "id": "3c7e47be-0a53-4f76-a38f-e190c5def42d", "event_id": "f3a220ab-fed5-4ad7-bffa-90c70fdc70e3", "event": { "alternate_game_ids": { "betradar": "58803499", "opta": "3whht8s9eu469juin68xxxjis" } }, "market_state": "SUSPENDED", "answers_odds": { "answer_a": { "is_restricted": false, "prob": 0.54, "odds": { "american": "-138", "european": "1.72", "fractional": "18/25" } }, "answer_b": { "is_restricted": false, "prob": 0.46, "odds": { "american": "-100", "european": "2.00", "fractional": "1/1" } } }, "game_id": "3whht8s9eu469juin68xxxjis", "key_market": "SOCCER_P_0_21", "is_core": false, "title_variable": "", "context_note_variable": "", "constraint_variable": "", "context_note_variable_type": "", "title_variable_type": "", "constraint_variable_type": "", "answers_variables": { "answer_a": "{\"h_abr\":\"ATH\"}", "answer_b": "{\"v_abr\":\"LAM\"}" }, "variables_entities": { "h_abr": { "type": "TEAM", "id": 1, "side": "HOME", "short_name": "ATH" }, "v_abr": { "type": "TEAM", "id": 2, "side": "AWAY", "short_name": "LAM" } }, "answers_restricted": { "answer_a": false, "answer_b": false } }, "action": "SUSPEND", "timestamp": 1747906864936}{ "type": "MARKET", "sub_type": "TEMPLATE", "object": { "id": "715012cf-ebd7-41e3-87d2-e580d852b006", "event_id": "7d11a558-5fa1-4c8b-91b6-9b1fce11a36d", "event": { "alternate_game_ids": { "betradar": "55311849" } }, "market_state": "PUBLISHED", "answers_odds": { "answer_a": { "is_restricted": false, "prob": 0.12, "odds": { "american": "+426", "european": "5.26", "fractional": "213/50" } }, "answer_b": { "is_restricted": false, "prob": 0.16, "odds": { "american": "+334", "european": "4.35", "fractional": "67/20" } }, "answer_c": { "is_restricted": false, "prob": 0.16, "odds": { "american": "+334", "european": "4.35", "fractional": "67/20" } }, "answer_d": { "is_restricted": false, "prob": 0.17, "odds": { "american": "+317", "european": "4.17", "fractional": "317/100" } }, "answer_e": { "is_restricted": false, "prob": 0.17, "odds": { "american": "+317", "european": "4.17", "fractional": "317/100" } }, "answer_f": { "is_restricted": false, "prob": 0.13, "odds": { "american": "+400", "european": "5.00", "fractional": "4/1" } }, "answer_g": { "is_restricted": false, "prob": 0.1, "odds": { "american": "+488", "european": "5.88", "fractional": "122/25" } } }, "game_id": "55311849", "key_market": "BASEBALL_A_12_7_7", "is_core": true, "market_context": { "batter_name": "Seth Brown", "batter_order_position": "8", "batter_plate_appearance_number": "6th", "inning": "9", "inning_side": "bottom", "line": "0", "pitch_number": "1", "pitcher_name": "Connor Brogdon", "plate_appearance_position": "at_bat", "team": "HOME" }, "match_state": { "away_score": "10", "balls": "1", "home_score": "5", "inning": "9", "inning_side": "bottom", "outs": "1", "strikes": "0" }, "title_variable": "{\"batter\": \"Seth Brown\", \"target_value\": \"6th\"}", "context_note_variable": "{\"player_name\": \"R. Zeferjahn\", \"target_value\": \"4.3\"}", "constraint_variable": "{\"batter\": \"S. Brown\", \"target_value1\": \"1\", \"target_value2\": \"5\"}", "context_note_variable_type": "", "title_variable_type": "", "constraint_variable_type": "0", "answers_variables": { "answer_a": "{}", "answer_b": "{}", "answer_c": "{}", "answer_d": "{}", "answer_e": "{}", "answer_f": "{}", "answer_g": "{}" }, "variables_entities": { "batter": { "type": "PLAYER", "id": 1, "full_name": "Seth Brown", "short_name": "S. Brown" }, "player_name": { "type": "PLAYER", "id": 2, "short_name": "R. Zeferjahn" } }, "answers_restricted": { "answer_a": false, "answer_b": false, "answer_c": false, "answer_d": false, "answer_e": false, "answer_f": false, "answer_g": false } }, "action": "ACTIVATE", "timestamp": 1747891145638}{ "type": "MARKET", "sub_type": "TEMPLATE", "object": { "id": "7dec2ae9-0e8f-48da-9819-7a5b1b124658", "event_id": "1ddc5450-7d32-4015-875c-4f5141f702f0", "event": { "alternate_game_ids": { "betradar": "58267293", "opta": "1rncpj8trvlcnr74nvzstnehg" } }, "market_state": "TIMED_OUT", "answers_odds": { "answer_a": { "is_restricted": false, "prob": 0.28, "odds": { "american": "+213", "european": "3.13", "fractional": "213/100" } }, "answer_b": { "is_restricted": false, "prob": 0.72, "odds": { "american": "-312", "european": "1.32", "fractional": "8/25" } } }, "game_id": "1rncpj8trvlcnr74nvzstnehg", "key_market": "SOCCER_A_12_20", "is_core": true, "title_variable": "{\"start_resolve_cl\": \"84:00\"}", "context_note_variable": "{\"team\": \"TOT\", \"team1\": \"MUN\", \"target_value\": \"1\", \"target_value1\": \"8\"}", "constraint_variable": "", "context_note_variable_type": "1", "title_variable_type": "", "constraint_variable_type": "", "answers_variables": { "answer_a": "{\"h_abr\":\"TOT\"}", "answer_b": "{\"v_abr\":\"MUN\"}" }, "variables_entities": { "h_abr": { "type": "TEAM", "id": 1, "side": "HOME", "short_name": "TOT" }, "v_abr": { "type": "TEAM", "id": 2, "side": "AWAY", "short_name": "MUN" }, "team": { "type": "TEAM", "id": 1, "side": "HOME", "short_name": "TOT" }, "team1": { "type": "TEAM", "id": 2, "side": "AWAY", "short_name": "MUN" } }, "answers_restricted": { "answer_a": false, "answer_b": false } }, "action": "UNPUBLISH", "timestamp": 1747861308850}{ "type": "MARKET", "sub_type": "TEMPLATE", "object": { "id": "78e76baf-aa28-4867-8b95-498cc6a13993", "event_id": "7d11a558-5fa1-4c8b-91b6-9b1fce11a36d", "event": { "alternate_game_ids": { "betradar": "55311849" } }, "resolve_condition": "answer_c", "market_state": "RESOLVED", "answers_odds": { "answer_a": { "is_restricted": false, "prob": 0.44, "odds": { "american": "+108", "european": "2.08", "fractional": "27/25" } }, "answer_b": { "is_restricted": false, "prob": 0.38, "odds": { "american": "+138", "european": "2.38", "fractional": "69/50" } }, "answer_c": { "is_restricted": false, "prob": 0.18, "odds": { "american": "+300", "european": "4.00", "fractional": "3/1" } } }, "game_id": "55311849", "key_market": "BASEBALL_A_12_20_3", "is_core": true, "market_context": { "batter_name": "Maxwell Schuemann", "batter_order_position": "9", "batter_plate_appearance_number": "5th", "inning": "9", "inning_side": "bottom", "line": "0", "pitch_number": "8", "pitcher_name": "Connor Brogdon", "plate_appearance_position": "at_bat", "team": "AWAY" }, "match_state": { "away_score": "10", "balls": "3", "home_score": "5", "inning": "9", "inning_side": "bottom", "outs": "2", "strikes": "2" }, "title_variable": "", "context_note_variable": "{\"player_name\": \"C. Brogdon\", \"target_value\": \"66.2\"}", "constraint_variable": "{\"batter\": \"M. Schuemann\", \"target_value\": \"8th\", \"target_value1\": \"5th\"}", "context_note_variable_type": "", "title_variable_type": "", "constraint_variable_type": "", "answers_variables": { "answer_a": "{}", "answer_b": "{}", "answer_c": "{}" }, "variables_entities": { "batter": { "type": "PLAYER", "id": 1, "short_name": "M. Schuemann" }, "player_name": { "type": "PLAYER", "id": 2, "short_name": "C. Brogdon" } }, "answers_restricted": { "answer_a": false, "answer_b": false, "answer_c": false } }, "action": "RESOLVE", "timestamp": 1747891335220}{ "type": "MARKET", "sub_type": "TEMPLATE", "object": { "id": "e636224c-c4ae-40c3-b189-4fdba53c614f", "event_id": "38f770f6-ff4d-4776-8f83-16643c48e215", "event": { "alternate_game_ids": { "betradar": "55310633" } }, "resolve_condition": "answer_b", "market_state": "RESOLVED", "answers_odds": { "answer_a": { "is_restricted": false, "prob": 0.07, "odds": { "american": "+567", "european": "6.67", "fractional": "567/100" } }, "answer_b": { "is_restricted": false, "prob": 0.11, "odds": { "american": "+455", "european": "5.56", "fractional": "114/25" } }, "answer_c": { "is_restricted": false, "prob": 0.15, "odds": { "american": "+355", "european": "4.55", "fractional": "71/20" } }, "answer_d": { "is_restricted": false, "prob": 0.18, "odds": { "american": "+300", "european": "4.00", "fractional": "3/1" } }, "answer_e": { "is_restricted": false, "prob": 0.2, "odds": { "american": "+317", "european": "4.17", "fractional": "317/100" } }, "answer_f": { "is_restricted": false, "prob": 0.15, "odds": { "american": "+355", "european": "4.55", "fractional": "71/20" } }, "answer_g": { "is_restricted": false, "prob": 0.13, "odds": { "american": "+400", "european": "5.00", "fractional": "4/1" } } }, "game_id": "55310633", "key_market": "BASEBALL_A_12_7_7", "is_core": true, "title_variable": "{\"batter\": \"Kyle Schwarber\", \"target_value\": \"6th\"}", "context_note_variable": "{\"player_name\": \"S. Alexander\", \"target_value\": \"4.0\"}", "constraint_variable": "{\"batter\": \"K. Schwarber\", \"target_value1\": \"1\", \"target_value2\": \"5\"}", "context_note_variable_type": "", "title_variable_type": "", "constraint_variable_type": "0", "answers_variables": { "answer_a": "{}", "answer_b": "{}", "answer_c": "{}", "answer_d": "{}", "answer_e": "{}", "answer_f": "{}", "answer_g": "{}" }, "variables_entities": { "batter": { "type": "PLAYER", "id": 1, "full_name": "Kyle Schwarber", "short_name": "K. Schwarber" }, "player_name": { "type": "PLAYER", "id": 2, "full_name": "S. Alexander" } }, "answers_restricted": { "answer_a": false, "answer_b": false, "answer_c": false, "answer_d": false, "answer_e": false, "answer_f": false, "answer_g": false } }, "action": "REVERSE", "timestamp": 1747730860990}{ "type": "MARKET", "sub_type": "TEMPLATE", "object": { "id": "b10d1774-584e-4789-9c08-e75c02bfab56", "event_id": "08814556-61f4-4557-89e8-71082beaafe8", "event": { "alternate_game_ids": { "betradar": "59796334" } }, "market_state": "DRAFT", "answers_odds": { "answer_a": { "is_restricted": false, "prob": 0.81, "odds": { "american": "-454", "european": "1.22", "fractional": "11/50" } }, "answer_b": { "is_restricted": false, "prob": 0.19, "odds": { "american": "+285", "european": "3.85", "fractional": "57/20" } } }, "game_id": "59796334", "key_market": "BASKETBALL_A_1_107", "is_core": false, "title_variable": "{\"player_name\": \"(#32) Karl-Anthony Towns\", \"target_value\": \"10\", \"target_period\": \"(OT1)\", \"start_resolve_cl\": \"3:10\"}", "context_note_variable": "{\"player_name\": \"Towns\", \"target_value1\": \"7\", \"target_value2\": \"4\"}", "constraint_variable": "", "context_note_variable_type": "", "title_variable_type": "", "constraint_variable_type": "", "variables_entities": { "player_name": { "type": "PLAYER", "id": 1, "short_name": "Towns", "full_name": "Karl-Anthony Towns", "jersey_number": "32" } }, "answers_restricted": { "answer_a": false, "answer_b": false } }, "action": "CANCEL", "timestamp": 1747883808522}| Field | Type | Required | Description |
|---|---|---|---|
type | string | ✅ | Type of message Enum: "MARKET" |
sub_type | string | ✅ | Optional message subtype Enum: "PROPS" |
action | string | ✅ | Action Enum: "MARKET_PRICE" |
timestamp | integer | ✅ | UNIX timestamp in milliseconds |
object | PropsMarket | ✅ | Conditional on type and sub_type, see below |
Props Market Object
| Field | Type | Required | Description |
|---|---|---|---|
event_id | string | ✅ | Kero UUID of the event |
event_status | string | ✅ | Status of the event."Fixture", "Pre-Match", "1st Half", "2nd Half", "Full Time", "Abandoned" See Event Status |
resulted_postmatch | boolean | ✅ | When true, settlement is only supplied after Full Time (15 min delay). See Post-Match Settlement |
id | string | ✅ | Kero UUID of the market |
market_type | string | ✅ | Type of the props market. See Soccer Market Types |
state | string | ✅ | Market state. Enum: "Open", "Closed". See Market State |
deleted | boolean | ✅ | Whether the market has been deleted (postponed >48h or cancelled entirely) |
suspended | boolean | ✅ | Whether the market is suspended. When true, all selections are also suspended |
selections | array | ✅ | Array of player selections with pricing and status information. See Selection Object |
Selection Object
| Field | Type | Required | Description |
|---|---|---|---|
selection_id | integer | ✅ | Unique identifier for the selection |
deleted | boolean | ✅ | Whether the selection has been deleted. See Selection Deletion |
numerator | integer | ✅ | Numerator of the fractional odds (marginated price). See Pricing |
denominator | integer | ✅ | Denominator of the fractional odds (marginated price). See Pricing |
raw_price | float | ✅ | True unmarginated decimal odds (without vig). See Pricing |
suspended | boolean | ✅ | Whether the selection is suspended. See Selection Suspension |
settlement | string | ✅ | Settlement status. See Settlement |
field_status | string/null | ✅ | Player’s field status. See Field Status |
likely_starter | boolean | ✅ | Whether player is expected to be in starting XI. See Likely Starter |
expected_minutes | integer | ✅ | Expected playing time in minutes. See Pricing Components |
player_expectancy | float | ✅ | Expected total of the metric for this player. See Pricing Components |
player_percentage | float | ✅ | Player’s assessed share of the metric (0.0 to 1.0). See Pricing Components |
current_metric_value | integer/null | ✅ | Current real-time value of the metric during live matches. See Current Metric Value |
entities | []Entity | ✅ | Array of entities (PLAYER, TEAM) related to the selection |
Entity Object
| Field | Type | Required | Description |
|---|---|---|---|
type | string | ✅ | Type of the entity. Enum: PLAYER, TEAM |
id | integer | ✅ | Kero ID of the entity (player or team) |
name | string | ✅ | Entity full name |
JSON examples:
{ "type": "MARKET", "sub_type": "PROPS", "action": "MARKET_PRICE", "object": { "event_id": "d9e608f0-1894-4ed6-877b-0385f17a34f3", "event_status": "Fixture", "resulted_postmatch": false, "id": "d413b448-5702-403d-8703-1dba77b64ebd", "market_type": "anytimePlayerToScore", "state": "Open", "deleted": false, "suspended": false, "selections": [ { "selection_id": 569976667, "deleted": false, "numerator": 3, "denominator": 4, "raw_price": 1.922, "suspended": false, "settlement": "not settled", "field_status": null, "likely_starter": true, "expected_minutes": 90, "player_expectancy": 0.7344, "player_percentage": 0.36, "current_metric_value": null, "entities": [ { "type": "PLAYER", "id": 20400, "name": "Mbappe, Kylian" }, { "type": "TEAM", "id": 14, "name": "Real Madrid" } ] }, { "selection_id": 569976666, "deleted": false, "numerator": 11, "denominator": 5, "raw_price": 3.635, "suspended": false, "settlement": "not settled", "field_status": null, "likely_starter": true, "expected_minutes": 90, "player_expectancy": 0.3218, "player_percentage": 0.195, "current_metric_value": null, "entities": [ { "type": "PLAYER", "id": 20169, "name": "Lamine Yamal" }, { "type": "TEAM", "id": 7, "name": "FC Barcelona" } ] } ] }, "timestamp": 1761824380557}| Field | Type | Required | Description |
|---|---|---|---|
type | string | ✅ | Type of message Enum: "EVENT" |
sub_type | string | ✅ | Optional message subtype Enum: "EVENT" |
action | string | ✅ | Action to do with the object Enum: "CREATE", "DELETE", "CLOSE" |
timestamp | integer | ✅ | UNIX timestamp in milliseconds |
object | Event | ✅ | Payload conditional on type and sub_type, see below |
Event Object
| Field | Type | Required | Description |
|---|---|---|---|
id | string | ✅ | Unique identifier of the event (Kero UUID) |
name | string | ✅ | Full event name |
short_name | string | ✅ | Short display version of the event name |
game_id | string | ✅ | Game ID from the source system |
sport | string | ✅ | Sport type (Enum: SOCCER, BASKETBALL, BASEBALL, FOOTBALL) |
source | string | ✅ | Data provider source (Enum: betradar, sportradar, nba_cdn, genius, statsapi_nhl, opta) |
team_home_position | string | ✅ | Side of the home team (LEFT or RIGHT) |
team_a | Team | ✅ | Home team data (see below) |
team_b | Team | ✅ | Away team data (see below) |
started_at | integer | ✅ | Game start time as UNIX timestamp (seconds) |
league | League | ✅ | League info (see below) |
alternate_game_ids | object | ❌ | Map of provider-specific game IDs ( key = provider name(Enum: betradar, sportradar, nba_cdn, genius, statsapi_nhl, opta),value = provider id) |
League Object
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | ✅ | Kero ID for the league |
name | string | ✅ | Full name of the league (tournament) |
source_league_id | string | ✅ | Primary league ID from the external data source (related to the provider in the source field) |
location | string | ✅ | Country or region where the league is based |
source_name | string | ❌ | Data provider source (Enum: betradar, sportradar, nba_cdn, genius, statsapi_nhl, opta) |
sources | []LeagueSource | ❌ | A list of league sources |
League Source Object
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | ✅ | Kero ID for the league source |
source | string | ✅ | Data provider source (Enum: betradar, sportradar, nba_cdn, genius, statsapi_nhl, opta) |
source_season_id | string | ✅ | Season ID from the external data source |
source_league_id | string | ✅ | League ID from the external data source |
source_league_name | string | ✅ | League name from the external data source |
Team Object
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | ✅ | Kero team ID |
name | string | ✅ | Full name of the team |
short_name | string | ✅ | abbreviated name of the team |
common_name | string | ✅ | team name preferable for mapping |
image | string | ❌ | Public URL of the team’s logo or image |
source | TeamSource | ❌ | Primary source info (e.g., from betradar) |
sources | []TeamSource | ✅ | List of all source mappings for the team |
Team Source Object
| Field | Type | Required | Description |
|---|---|---|---|
source | string | ✅ | Name of the data provider (Enum: betradar, sportradar, nba_cdn, genius, statsapi_nhl, opta) |
source_team_id | string | ✅ | Team ID within the external data provider |
source_team_name | string | ❌ | Team name within the external data provider |
JSON examples:
{ "type": "EVENT", "sub_type": "EVENT", "object": { "id": "a2cc09b0-89a0-4084-9f51-b597b205bfca", "name": "HATAYSPOR VS FENERBAHÇE 26.05.2025", "short_name": "HAT V FB", "game_id": "28lozs8y9gicrbumgx9lgpwr8", "sport": "SOCCER", "source": "opta", "team_home_position": "LEFT", "team_a": { "id": 971, "name": "Hatayspor Antakya", "short_name": "HAT", "common_name": "Hatayspor Antakya", "image": "https://storage.googleapis.com/kero-cdn.rushsports.io/team_images/35_Super_Lig/Hatayspor.png", "source": { "source": "opta", "source_team_id": "efy1nhpn5l6hc27znhsptegba", "source_team_name": "Hatayspor" }, "sources": [ { "source": "betradar", "source_team_id": "14287013" }, { "source": "sportradar", "source_team_id": "sr:competitor:3091" }, { "source": "opta", "source_team_id": "efy1nhpn5l6hc27znhsptegba", "source_team_name": "Hatayspor" } ] }, "team_b": { "id": 213, "name": "Fenerbahce Istanbul", "short_name": "FEN", "common_name": "Fenerbahce Istanbul", "image": "https://storage.googleapis.com/kero-cdn.rushsports.io/team_images/9_UEFA_Champions_League/Fenerbahce.png", "source": { "source": "opta", "source_team_id": "8lroq0cbhdxj8124qtxwrhvmm", "source_team_name": "Fenerbahçe" }, "sources": [ { "source": "betradar", "source_team_id": "5930" }, { "source": "sportradar", "source_team_id": "sr:competitor:3052" }, { "source": "opta", "source_team_id": "8lroq0cbhdxj8124qtxwrhvmm", "source_team_name": "Fenerbahçe" } ] }, "started_at": 1748278800, "league": { "id": 35, "name": "Super Lig", "source_league_id": "482ofyysbdbeoxauk19yg7tdt", "location": "Turkiye" }, "alternate_game_ids": { "betradar": "51472457", "opta": "28lozs8y9gicrbumgx9lgpwr8" } }, "action": "CREATE", "timestamp": 1747866975910}{ "type": "EVENT", "sub_type": "EVENT", "object": { "id": "297044d4-4409-4081-95d9-ce5043cb2ebf", "name": "ARIZONA DIAMONDBACKS @ LOS ANGELES DODGERS", "short_name": "AZ @ LAD", "game_id": "55310817", "sport": "BASEBALL", "source": "betradar", "team_home_position": "RIGHT", "team_a": { "id": 184, "name": "Arizona Diamondbacks", "short_name": "AZ", "common_name": "Diamondbacks", "image": "https://storage.googleapis.com/kero-cdn.rushsports.io/team_images/Baseball/MLB/ari.png", "source": { "source": "betradar", "source_team_id": "24464" }, "sources": [ { "source": "betradar", "source_team_id": "24464" }, { "source": "sportradar", "source_team_id": "sr:competitor:3640" } ] }, "team_b": { "id": 186, "name": "Los Angeles Dodgers", "short_name": "LAD", "common_name": "Dodgers", "image": "https://storage.googleapis.com/kero-cdn.rushsports.io/team_images/Baseball/MLB/lad.png", "source": { "source": "betradar", "source_team_id": "24450" }, "sources": [ { "source": "betradar", "source_team_id": "24450" }, { "source": "sportradar", "source_team_id": "sr:competitor:3638" } ] }, "started_at": 1747879800, "league": { "id": 8, "name": "MLB", "source_league_id": "25", "location": "USA" }, "alternate_game_ids": { "betradar": "55310817" } }, "action": "DELETE", "timestamp": 1747857222508}{ "type": "EVENT", "sub_type": "EVENT", "object": { "id": "08814556-61f4-4557-89e8-71082beaafe8", "name": "INDIANA PACERS @ NEW YORK KNICKS", "short_name": "IND @ NYK", "game_id": "59796334", "sport": "BASKETBALL", "source": "betradar", "team_home_position": "RIGHT", "team_a": { "id": 97, "name": "Indiana Pacers", "common_name": "Pacers", "short_name": "IND", "image": "https://storage.googleapis.com/kero-cdn.rushsports.io/team_images/Basketball/NBA/ind.png", "source": { "source": "betradar", "source_team_id": "19400" }, "sources": [ { "source": "betradar", "source_team_id": "19400" }, { "source": "sportradar", "source_team_id": "sr:competitor:3419" } ] }, "team_b": { "id": 101, "name": "New York Knicks", "short_name": "NYK", "common_name": "Knicks", "image": "https://storage.googleapis.com/kero-cdn.rushsports.io/team_images/Basketball/NBA/ny.png", "source": { "source": "betradar", "source_team_id": "19442" }, "sources": [ { "source": "betradar", "source_team_id": "19442" }, { "source": "sportradar", "source_team_id": "sr:competitor:3421" } ] }, "started_at": 1747872000, "league": { "id": 6, "name": "NBA", "source_league_id": "177", "location": "USA" }, "alternate_game_ids": { "betradar": "59796334" } }, "action": "CLOSE", "timestamp": 1747883686033}| Field | Type | Required | Description |
|---|---|---|---|
type | string | ✅ | Type of message Enum: "PARLAY" |
sub_type | string | ✅ | Optional message subtype Enum: "PARLAY" |
action | string | ✅ | Action to do with the object Enum: "PUBLISH", "UPDATE_MARKET_ODDS", "SUSPEND", "ACTIVATE","UNPUBLISH", "RESOLVE", "REVERSE", "CANCEL" |
timestamp | integer | ✅ | UNIX timestamp in milliseconds |
object | Parlay | ✅ | Payload conditional on type and sub_type, see below |
Parlay Object
| Field | Type | Required | Description |
|---|---|---|---|
id | string | ✅ | Unique Kero UUID of this parlay object |
title | string | ✅ | Title of the parlay |
key | string | ✅ | Parlay type key |
state | string | ✅ | Parlay state Enum: "PUBLISHED","SUSPENDED","TIMED_OUT","RESOLVED","DRAFT" |
is_won | boolean | ❌ | Indicates if the parlay has been won (only available when state is RESOLVED) |
legs | array[ParlayLegDetails] | ✅ | Array of parlay legs |
event | Event | ✅ | Embedded minimal event object |
odds | ParlayOddsDetails | ✅ | Parlay odds details |
Event Object
| Field | Type | Required | Description |
|---|---|---|---|
id | string | ✅ | Unique Kero UUID |
Parlay Odds Object
| Field | Type | Required | Description |
|---|---|---|---|
true_prob | float | ✅ | Cumulated true probability of the parlay’s markets |
discount_prob | float | ✅ | Suggested probability for the parlay |
odds | Odds | ✅ | Odds object representing the parlay odds |
Odds Object
| Field | Type | Required | Description |
|---|---|---|---|
american | string | ✅ | American odds representation |
european | string | ✅ | European (Decimal) odds representation |
fractional | string | ✅ | Fractional odds representation |
Parlay Leg Object
| Field | Type | Required | Description |
|---|---|---|---|
id | string | ✅ | Unique Kero UUID of this parlay leg object |
parlay_id | string | ✅ | Kero UUID of the parent parlay |
chosen_option | string | ✅ | The answer key chosen for this leg (answer_a,answer_b,answer_c, etc.) |
market | Market | ✅ | Embedded market object for this leg |
Market Object
| Field | Type | Required | Description |
|---|---|---|---|
id | string | ✅ | Unique Kero UUID of this market object |
event_id | string | ✅ | Kero UUID of the event |
event | Event | ✅ | Embedded minimal event object |
market_state | string | ✅ | Market state Enum: "PUBLISHED","SUSPENDED","TIMED_OUT","RESOLVED","DRAFT" |
game_id | string | ✅ | External source game ID |
key_market | string | ✅ | Unique key for the market type |
is_core | boolean | ✅ | Whether this is a core market |
title_variable | string (JSON) | ❌ | Dynamic values for title rendering (can be string or map) |
context_note_variable | string (JSON) | ❌ | Dynamic values for context rendering (can be string or map) |
constraint_variable | string (JSON) | ❌ | Dynamic values for constraint rendering (can be string or map) |
context_note_variable_type | string | ❌ | Type of the context_note_variable(if context_note_variable field has a value of a map,then context_note_variable_type is a key in this map) |
title_variable_type | string | ❌ | Format type for title_variable(if title_variable field has a value of a map,then title_variable_type is a key in this map) |
constraint_variable_type | string | ❌ | Format type for constraint_variable(if constraint_variable field has a value of a map,then constraint_variable_type is a key in this map) |
answers_variables | map[string]string (JSON) | ❌ | Dynamic values for answers renderingkey is: answer_a,answer_b,answer_c,etc…value is JSON string |
answers_odds | map[string]AnswersOddsMap | ✅ | Map of odds per answerkey is: answer_a,answer_b,answer_c,etc…value is an object of answers odds |
market_context | MarketContextDetails | ❌ | Statistics metadata related to the current action (can be different depending on SPORT) |
match_state | MatchStateDetails | ❌ | Statistics metadata related to the current game moment (can be different depending on SPORT) |
resolve_condition | string | ❌ | Correct answer for current market (answer_a,answer_b,answer_c, etc.). Shows only on RESOLVE or REVERSE |
variables_entities | map[string]Entity | ❌ | Dynamic metadata related to provided variableskey is a name of a variable from any _variable fieldvalue is an entity object related to it |
answers_restricted | map[string]boolean | ✅ | States which market answers keys are restricted to bet (when value is TRUE: means the answer key is suspended). Such answer key will have a probability set but with a flag (See AnswersOddsMap) |
status_reason | string | ❌ | Reason for the current market state. (See Status reasons) |
Event Object
| Field | Type | Required | Description |
|---|---|---|---|
alternate_game_ids | object | ❌ | Map of provider-specific game IDs ( key = provider name(Enum: betradar, sportradar, nba_cdn, genius, statsapi_nhl, opta),value = provider id) |
Answers Odds Map Object
| Field | Type | Required | Description |
|---|---|---|---|
answer_a | AnswerOdds | ❌ | Odds and prob for answer A |
answer_b | AnswerOdds | ❌ | Odds and prob for answer B |
answer_c | AnswerOdds | ❌ | Odds and prob for answer C |
| … | … | ❌ | Odds and prob for answer … |
answer_z | AnswerOdds | ❌ | Odds and prob for answer Z |
Answers Odds Object
| Field | Type | Required | Description |
|---|---|---|---|
is_restricted | boolean | ✅ | Whether this answer is restricted to bet (TRUE means restricted) |
prob | float | ✅ | Probability for the answer |
odds | Odds | ✅ | Kero Odds in all formats |
Odds Object
| Field | Type | Required | Description |
|---|---|---|---|
american | string | ✅ | American odds representation |
european | string | ✅ | European (Decimal) odds representation |
fractional | string | ✅ | Fractional odds representation |
Market Context Details Object
The marketContextDetails object contains sport-specific contextual information that provides additional details about the current game state and market conditions. This object varies by sport and includes relevant fields for each specific sport type.
| Field | Type | Description |
|---|---|---|
display_ddy | string | Display information for down, distance, and yards (DDY format) Example: “2nd & 8” |
distance | string | Yards needed for a first down Example: “8” |
down | string | Current down number (1-4) Example: “2” |
match_drive_number | string | Sequential number of drives in the entire game Example: “5” |
play_number | string | Sequential number of plays in the current drive Example: “3” |
team_drive_number | string | Sequential number of drives for the specific team Example: “3” |
team | string | Team associated with the market Enum: “home”, “away” |
player1_full_name | string | Full name of the player involved in the market Note: Field name varies based on market type (player1_full_name, player2_full_name, etc.) |
| Field | Type | Description |
|---|---|---|
batter_name | string | Full name of the current batter (player at bat) Example: “Mike Trout” |
batter_order_position | string | Position of the batter in the team’s batting lineup (1-9) Example: “3” |
batter_plate_appearance_number | string | Sequential number of the batter’s plate appearance in the current game Example: “2” |
inning | string | Current inning number Example: “3” |
inning_side | string | Which half of the inning is currently being played Enum: “top”, “bottom” |
line | string | Betting line or spread for the market Example: “1.5” |
pitch_number | string | Number of the current pitch in the at-bat Example: “2” |
pitcher_name | string | Full name of the current pitcher Example: “Clayton Kershaw” |
plate_appearance_position | string | Current position of the player in the batting order queue Enum: “at_bat”, “on_deck”, “in_the_hole” |
team | string | Team associated with the market Enum: “HOME”, “AWAY” |
Match State Details Object
The match_state object contains sport-specific information about the current game state and statistics. This object varies by sport and includes relevant fields for each specific sport type.
| Field | Type | Description |
|---|---|---|
current_possession | string | Team currently in possession of the ball Enum: “home”, “away” |
| Field | Type | Description |
|---|---|---|
inning | string | Current inning number Example: “3” |
inning_side | string | Which half of the inning is currently being played Enum: “top”, “bottom” |
away_score | string | Current score for the away team Example: “2” |
home_score | string | Current score for the home team Example: “1” |
outs | string | Number of outs in the current half-inning Enum: “0”, “1”, “2” |
balls | string | Number of balls in the current at-bat Enum: “0”, “1”, “2”, “3” |
strikes | string | Number of strikes in the current at-bat Enum: “0”, “1”, “2” |
Entity Object
| Field | Type | Required | Description |
|---|---|---|---|
type | string | ✅ | Type of the entity. Enum: PLAYER, TEAM |
id | integer | ✅ | Kero ID of the entity (player or team) |
full_name | string | ❌ | Entity full name |
short_name | string | ❌ | Shortened name of the entity |
common_name | string | ❌ | Commonly used name of the entity |
jersey_number | string | ❌ | Player’s jersey number |