Markets
Get Market Templates
Section titled “Get Market Templates”This endpoint will allow you to get every active market template, along with all translation maps. This is a required endpoint for the market mapping process. The maps are cached and refreshed once a day.
Parameters:
Section titled “Parameters:”| Field | Type | Description |
|---|---|---|
token | header | authentication token provided from /auth route |
Response:
Section titled “Response:”| Field | Type | Description |
|---|---|---|
de | TranslationMap | Key is the language code according to ISO-639/1 |
en | TranslationMap | … |
| … | … | … |
el | TranslationMap | … |
Translation Map
| Field | Type | Description |
|---|---|---|
BASEBALL_A_0_10 | Translation | Key is the key_market (Unique key for the market type) |
| … | … | … |
Translation Object
| Field | Type | Description |
|---|---|---|
Title | string | Main question with dynamic variables (e.g., {team_name}, {target_inning}) |
ContextNote | string | Additional context or stat-based note, templated |
Constraint | string | Constraints or conditions |
Answers | map[string]string | Map of answer keys to values E.g.: answer_a: Br, answer_b: Da |
{ "bs": { "BASEBALL_A_0_10": { "Title": "Hoće li se {team_name} vratiti i preuzeti vodstvo u {target_inning} inningu? 🔥", "ContextNote": "{team_name} {target_value} trči po izmjeni ove sezone", "Constraint": "Redoslijed udaranja: {team_name} ({target_value1}-{target_value2}-{target_value3})", "Answers": { "answer_a": "Br", "answer_b": "Da" } }, "BASEBALL_A_0_11": { "Title": "{team_name} vodi sa {target_value}! Hoće li povećati vodstvo u {target_inning} inningu? 🔥", "ContextNote": "{team_name} {target_value} trči po izmjeni ove sezone", "Constraint": "Redoslijed udaranja: {team_name} ({target_value1}-{target_value2}-{target_value3})", "Answers": { "answer_a": "Br", "answer_b": "Da" } }, "BASEBALL_A_0_12": { "Title": "Dno devetog! Posljednja prilika za {team_name}!... Hoće li se vratiti i pobijediti? 🔥", "ContextNote": "{team_name} {target_value} trči po izmjeni ove sezone", "Constraint": "Redoslijed udaranja: {team_name} ({target_value1}-{target_value2}-{target_value3})", "Answers": { "answer_a": "Br", "answer_b": "Da" } } }}| Field | Type | Required | Description |
|---|---|---|---|
code | integer | ❌ | error integer code |
status | string | ✅ | status of the response |
msg | string | ❌ | some description of the error |
data | object | ❌ | any additional data for the error response |
{ "code": 1, "status": "INVALID SOURCE HOST", "msg": "any message here", "data": "additional data for error response"}List Markets for Specific Event
Section titled “List Markets for Specific Event”This route is not intended to act as a general fallback to your RMQ feed. Instead, it serves specifically to correct or adjust market statuses that may have been missed during a prolonged RMQ disconnection—especially in cases where RabbitMQ’s queue limit (e.g., 10,000 messages with a drop-head policy) causes older messages to be discarded.
When RMQ has been disconnected long enough that you risk losing availability or settlement updates, you can poll this endpoint (every 1 minute) until the RMQ connection is restored. The response provides all active market IDs for each live event along with their current states. This ensures that any markets you previously published or received through RMQ will still reflect accurate states even if RMQ dropped some messages while offline.
For example, if you published a market like “Which team shoots first after minute 14:00” and RMQ dropped the RESOLVE message due to queue overflow, this endpoint allows you to retrieve this missing state update.
This route must not be used to publish or introduce new markets.
Parameters:
Section titled “Parameters:”| Field | Type | Required | Description |
|---|---|---|---|
token | header | ✅ | authentication token provided from /auth route |
id | path | ✅ | event Kero UUID (or “all” to search across all non-finished events for this partner) |
key_market | query | ❌ | Comma-separated list of market keys to filter by (e.g., “SOCCER_A_1,SOCCER_A_2”) |
market_state | query | ❌ | Filter markets by state: “PUBLISHED”, “SUSPENDED”, “TIMED_OUT”, “RESOLVED”, “DRAFT” (optional) |
page | query | ✅ | Page number for pagination (starts from 1) |
size | query | ✅ | Number of items per page (max 50 allowed) |
Validation Rules:
Section titled “Validation Rules:”- If
market_stateis set to “PUBLISHED”, thenkey_marketparameter must be provided, otherwise returns 400 Bad Request - When
idis set to “all”, the endpoint searches across all events whereended_atis not null for the authenticated partner
Response:
Section titled “Response:”| Type | Description |
|---|---|
| Pageable | markets page information |
Pageable Object
| Field | Type | Required | Description |
|---|---|---|---|
page | integer | ✅ | Current page number (starting from 1) |
size | integer | ✅ | Number of items per page (max 50 items allowed) |
content | []Market | ✅ | List of market objects for the current page |
last_page | boolean | ✅ | Indicates if this is the last page of results |
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 |
{ "page": 1, "size": 2, "last_page": false, "content": [ { "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": { "player_name": { "type": "PLAYER", "id": 1, "short_name": "C. Brogdon" }, "batter": { "type": "PLAYER", "id": 2, "short_name": "M. Schuemann" } }, "answers_restricted": { "answer_a": false, "answer_b": false, "answer_c": false } }, { "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": false, "prob": 0.34, "odds": { "american": "+163", "european": "2.63", "fractional": "163/100" } }, "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, "short_name": "NYK", "common_name": "Knicks" }, "team_abr": { "type": "TEAM", "id": 1, "short_name": "NYK", "common_name": "Knicks" } }, "answers_restricted": { "answer_a": false, "answer_b": false, "answer_c": false, "answer_d": false, } }]}| Field | Type | Required | Description |
|---|---|---|---|
code | integer | ❌ | error integer code |
status | string | ✅ | status of the response |
msg | string | ❌ | some description of the error |
data | object | ❌ | any additional data for the error response |
{ "code": 400, "status": "BAD REQUEST", "msg": "key_market parameter is required when market_state is PUBLISHED", "data": null}| Field | Type | Required | Description |
|---|---|---|---|
code | integer | ❌ | error integer code |
status | string | ✅ | status of the response |
msg | string | ❌ | some description of the error |
data | object | ❌ | any additional data for the error response |
{ "code": 1, "status": "INVALID SOURCE HOST", "msg": "any message here", "data": "additional data for error response"}Same Game Parlays Pricing Info
Section titled “Same Game Parlays Pricing Info”This route returns the pricing information for Same Game Parlays (SGP) in the passed events. It is used to determine the odds and probabilities for SGP markets and their outcomes. It is important to note that this route does not return the markets themselves, but rather the pricing information that can be used to calculate the odds and probabilities for SGP markets.
Query Parameters:
Section titled “Query Parameters:”| Field | Type | Required | Description |
|---|---|---|---|
event_ids | string | ✅ | Comma-separated list of Kero event UUIDs for which to retrieve SGP pricing information. |
market_ids | string | ❌ | Comma-separated list of Kero market UUIDs with indices corresponding to the event IDs for which to retrieve SGP pricing information. If not provided, all markets for the specified events will be returned. |
outcome_ids | string | ❌ | Comma-separated list of outcome ids with indices corresponding to the event IDs for which to retrieve SGP pricing information. If not provided, all outcomes for the specified markets will be returned. |
outcome_values | string | ❌ | Comma-separated list of outcome float values (see OutcomeObject) with indices corresponding to the event IDs for which to retrieve SGP pricing information. If not provided, all outcomes for the specified markets will be returned. |
Response:
Section titled “Response:”| Field | Type | Required | Description |
|---|---|---|---|
pb | float | ✅ | Probability of the parlay (-1.0 if cannot be priced) |
status | string | ✅ | Status of the parlay pricing. Enum: see SGP Statuses |
details | string | ❌ | Details of reason parlay was rejected (or empty if accepted) |
details_enum | string | ❌ | Enum version of the details (if applicable). Enum: see SGP Details |
event_legs | map[string]EventLeg | ❌ | Map of event IDs to their respective lists of event legs |
Event Legs Object
| Field | Type | Required | Description |
|---|---|---|---|
legs | []Leg | ✅ | An array of leg objects representing the individual legs of the event. Each leg contains details about the specific market, its outcomes, and probabilities. |
Leg Object
| Field | Type | Required | Description |
|---|---|---|---|
market_id | string | ✅ | The unique Kero UUID for the market associated with this leg. |
outcome_id | integer | ✅ | The unique ID of the outcome within the market. |
value | float | ✅ | Outcome value of the leg. |
true_pb | float | ✅ | Unmargined leg price. |
pb | float | ✅ | Leg price with margin applied. |
{ "pb": 0.045548717510820534, "status": "ACCEPTED", "details": "", "event_legs": { "5365fd56-4265-4710-bc34-15e4d278de24": { "legs": [ { "market_id": "5921954b-7dcf-48b9-8991-f1baa42f6c2d", "outcome_id": 8383, "value": 0, "true_pb": 0.1873955204992931, "pb": 0.2173955204992931 }, { "market_id": "9f3273b8-278e-4e6c-8288-479423cbe2b4", "outcome_id": 25, "value": 200.5, "true_pb": 0.14163413632810418, "pb": 0.17163413632810418 } ] } }}| Field | Type | Required | Description |
|---|---|---|---|
code | integer | ❌ | error integer code |
status | string | ✅ | status of the response |
msg | string | ❌ | some description of the error |
data | object | ❌ | any additional data for the error response |
{ "code": 1, "status": "INVALID SOURCE HOST", "msg": "any message here", "data": "additional data for error response"}