Skip to main content
This page documents the strongly-typed fields on the instrument that should be used to identify a sports market. Do not parse the instrument symbol or slug — symbol formats are not part of the public contract and may change. Always identify markets using the fields below.

Section 1: Common Identifying Fields

The following fields appear on every sports instrument. Together they uniquely describe the sport, league, event, period, market type, and handicap of a contract.

Field Reference

FieldLocationTypeDescription
event_start_timemetadataTimestamp (UTC)Scheduled start time of the underlying event. Updated in place when a game is rescheduled.
event_subcategorymetadataEnumThe sport. Values: BASKETBALL, FOOTBALL, BASEBALL, SOCCER, etc.
outcome_typemetadataEnumThe market structure. Still present on every instrument, but do not use it for market mapping — use market_sport_type instead. See the enum list below.
market_sport_typemetadataEnumThe fully-qualified market type, including sport, participant scope, and game period. Always populated on every sports instrument, including full-game spreads, totals, and outright winners. See the enum list below.
outcome_strikemetadataString (numeric)The handicap or threshold for the market. Unsigned magnitude — the side the contract pays out on is encoded by long_participant_id. For a Cleveland +3.5 spread, this is "3.5". For an over/under total of 4.5, this is "4.5". Empty/"0.0" for moneylines.
long_participant_idmetadataStringGlobally unique ID of the side the contract pays out on (e.g. mlb-cle). Only populated on individual game markets (moneylines, spreads, totals, props) — do not rely on it for futures.

outcome_type Enum

The market structure of a sports instrument.
ValueMeaning
moneylineWin/lose market (no handicap).
spreadsPoint/goal/run handicap market.
totalsOver/under combined-score market.
propsPlayer or team prop.
futuresSeason-long or event-long futures market.
drawable_outcomeExclusive group market that admits a draw (e.g. 3-way soccer outcome).

market_sport_type Enum

The fully-qualified market type, including sport, participant scope, and game period. This field is populated on every sports instrument — full-game spreads, totals, and outright winners included — so you can treat it as the single source of truth for any market. You no longer need to check outcome_type to map a market; market_sport_type alone is sufficient.
ValueSportScopePeriodType
baseball_player_home_runsBaseballPlayerFull gameHome runs prop
baseball_player_strikeoutsBaseballPlayerFull gameStrikeouts prop
baseball_player_hitsBaseballPlayerFull gameHits prop
baseball_player_total_basesBaseballPlayerFull gameTotal bases prop
baseball_player_hits_runs_rbisBaseballPlayerFull gameHits + runs + RBIs prop
baseball_player_outsBaseballPlayerFull gamePitcher outs prop
baseball_player_earned_runs_allowedBaseballPlayerFull gameEarned runs allowed prop
baseball_player_hits_allowedBaseballPlayerFull gameHits allowed prop
baseball_player_walks_allowedBaseballPlayerFull gameWalks allowed prop
baseball_team_first_inning_runBaseballTeam1st inningRun scored
baseball_game_extra_inningsBaseballGameFull gameExtra innings yes/no
baseball_team_first_five_winnerBaseballTeamFirst 5 inningsProp
baseball_team_first_five_spreadBaseballTeamFirst 5 inningsSpread
baseball_team_first_five_totalBaseballTeamFirst 5 inningsTotal
baseball_team_full_game_winnerBaseballTeamFull gameMoneyline
baseball_team_full_game_spreadBaseballTeamFull gameSpread
baseball_team_full_game_totalBaseballTeamFull gameTotal
basketball_player_pointsBasketballPlayerFull gamePoints prop
basketball_player_assistsBasketballPlayerFull gameAssists prop
basketball_player_reboundsBasketballPlayerFull gameRebounds prop
basketball_player_threesBasketballPlayerFull gameThree-pointers prop
basketball_player_stealsBasketballPlayerFull gameSteals prop
basketball_player_blocksBasketballPlayerFull gameBlocks prop
basketball_player_double_doubleBasketballPlayerFull gameDouble-double yes/no
basketball_player_triple_doubleBasketballPlayerFull gameTriple-double yes/no
basketball_team_first_half_winnerBasketballTeamFirst halfProp
basketball_team_first_half_spreadBasketballTeamFirst halfSpread
basketball_team_first_half_totalBasketballTeamFirst halfTotal
basketball_team_second_half_winnerBasketballTeamSecond halfProp
basketball_team_second_half_spreadBasketballTeamSecond halfSpread
basketball_team_second_half_totalBasketballTeamSecond halfTotal
basketball_team_first_quarter_spreadBasketballTeam1st quarterSpread
basketball_team_first_quarter_totalBasketballTeam1st quarterTotal
basketball_team_second_quarter_spreadBasketballTeam2nd quarterSpread
basketball_team_second_quarter_totalBasketballTeam2nd quarterTotal
basketball_team_third_quarter_spreadBasketballTeam3rd quarterSpread
basketball_team_third_quarter_totalBasketballTeam3rd quarterTotal
basketball_team_fourth_quarter_spreadBasketballTeam4th quarterSpread
basketball_team_fourth_quarter_totalBasketballTeam4th quarterTotal
basketball_game_overtimeBasketballGameFull gameOvertime yes/no
basketball_team_full_game_winnerBasketballTeamFull gameMoneyline
basketball_team_full_game_spreadBasketballTeamFull gameSpread
basketball_team_full_game_totalBasketballTeamFull gameTotal
football_team_full_game_winnerFootballTeamFull gameMoneyline
football_team_full_game_spreadFootballTeamFull gameSpread
football_team_full_game_totalFootballTeamFull gameTotal
soccer_team_full_time_winnerSoccerTeamFull timeMoneyline (3-way)
soccer_team_full_game_spreadSoccerTeamFull gameSpread
soccer_team_full_game_totalSoccerGameFull gameTotal goals across both teams (combined)
soccer_game_bttsSoccerGameFull gameBoth teams to score
soccer_game_first_team_to_scoreSoccerGameFull gameFirst team to score
soccer_game_next_team_to_scoreSoccerGameFull gameNext team to score
soccer_game_goal_in_intervalSoccerGameIntervalGoal in interval
soccer_game_exact_scoreSoccerGameFull gameExact score
soccer_game_to_advanceSoccerTeamTie/matchTo advance
soccer_team_first_half_winnerSoccerTeamFirst halfProp
soccer_team_first_half_spreadSoccerTeamFirst halfSpread
soccer_team_first_half_totalSoccerGameFirst halfTotal goals across both teams (combined)
soccer_game_first_half_bttsSoccerGameFirst halfBoth teams to score, first-half goals only
soccer_game_first_half_first_team_to_scoreSoccerGameFirst halfFirst team to score, first-half goals only
soccer_game_total_cornersSoccerGameFull gameTotal corners across both teams (combined)
soccer_team_second_half_winnerSoccerTeamSecond halfProp
soccer_team_second_half_spreadSoccerTeamSecond halfSpread
soccer_team_second_half_totalSoccerGameSecond halfTotal goals across both teams (combined)
soccer_game_second_half_bttsSoccerGameSecond halfBoth teams to score, second-half goals only
soccer_game_second_half_first_team_to_scoreSoccerGameSecond halfFirst team to score, second-half goals only
soccer_team_total_goalsSoccerTeamFull gameTotal goals for a single team
soccer_team_total_goals_first_halfSoccerTeamFirst halfTotal goals for a single team
soccer_game_total_goals_odd_evenSoccerGameFull gameTotal goals odd/even
soccer_game_first_half_exact_scoreSoccerGameFirst halfExact score
soccer_player_goalsSoccerPlayerFull gameGoals prop
soccer_player_assistsSoccerPlayerFull gameAssists prop
soccer_player_shotsSoccerPlayerFull gameShots prop
soccer_player_shots_on_targetSoccerPlayerFull gameShots on target prop
soccer_player_goalkeeper_savesSoccerPlayerFull gameGoalkeeper saves prop
soccer_player_goals_plus_assistsSoccerPlayerFull gameGoals + assists prop
soccer_team_total_cornersSoccerTeamFull gameTotal corners for a single team
soccer_game_corners_odd_evenSoccerGameFull gameCorners odd/even
soccer_game_goes_to_extra_timeSoccerGameFull timeWill the match go to extra time (knockout)
soccer_team_extra_time_spreadSoccerTeamExtra timeSpread — extra-time goals only
soccer_game_extra_time_totalSoccerGameExtra timeTotal goals across both teams, extra time only
soccer_game_extra_time_bttsSoccerGameExtra timeBoth teams to score in extra time
soccer_game_extra_time_first_team_to_scoreSoccerGameExtra timeFirst team to score in extra time
hockey_team_full_game_winnerHockeyTeamFull gameMoneyline
hockey_team_full_game_spreadHockeyTeamFull gameSpread (puck line)
hockey_team_full_game_totalHockeyTeamFull gameTotal
hockey_game_overtimeHockeyGameFull gameOvertime yes/no
hockey_game_double_overtimeHockeyGameFull gameDouble overtime yes/no
hockey_player_goalsHockeyPlayerFull gameGoals prop
hockey_player_assistsHockeyPlayerFull gameAssists prop
hockey_player_pointsHockeyPlayerFull gamePoints prop
tennis_match_winnerTennisPlayerMatchMoneyline
tennis_match_games_spreadTennisPlayerMatchGames spread
tennis_match_sets_spreadTennisPlayerMatchSets spread
tennis_match_total_gamesTennisMatchMatchTotal games
tennis_match_total_setsTennisMatchMatchTotal sets
tennis_match_exact_scoreTennisMatchMatchExact set score
tennis_set_1_winnerTennisPlayerSet 1Prop
tennis_set_2_winnerTennisPlayerSet 2Prop
tennis_set_3_winnerTennisPlayerSet 3Prop
cricket_match_winnerCricketTeamMatchMoneyline
ufc_fight_winnerUFCFighterFightMoneyline
ufc_method_of_victoryUFCFighterFightMethod of victory
ufc_go_the_distanceUFCGameFightGo the distance yes/no
ufc_round_of_victoryUFCFighterFightRound of victory
ufc_round_of_finishUFCFightFightRound of finish
ufc_method_of_finishUFCFightFightMethod of finish
esports_match_winnerEsportsTeamMatchMoneyline
esports_map_winner_1EsportsTeamMap 1Prop
esports_map_winner_2EsportsTeamMap 2Prop
esports_map_winner_3EsportsTeamMap 3Prop
esports_map_winner_4EsportsTeamMap 4Prop
esports_game_winner_1EsportsTeamGame 1Prop
esports_game_winner_2EsportsTeamGame 2Prop
esports_game_winner_3EsportsTeamGame 3Prop
esports_game_winner_4EsportsTeamGame 4Prop
The market_sport_type enum is the source of truth for sport, period, and prop variants, and is now guaranteed to be present on every instrument. When in doubt about which value applies to a market you’re seeing, use this field rather than parsing the symbol.

Section 2: Identifying Markets

Use this table as a recipe book for identifying a specific market type from instrument metadata. Match on market_sport_type alone — it fully identifies any market (structure and period), so you no longer need to check outcome_type.
To identify…market_sport_type
Full-game moneyline<sport>_team_full_game_winner (soccer uses soccer_team_full_time_winner, a 3-way market)
Full-game spread<sport>_team_full_game_spread
Full-game total<sport>_team_full_game_total
MLB first-5-innings moneylinebaseball_team_first_five_winner
MLB first-5-innings spreadbaseball_team_first_five_spread
MLB first-5-innings totalbaseball_team_first_five_total
MLB first-inning runbaseball_team_first_inning_run
MLB player home runs propbaseball_player_home_runs
MLB player strikeouts propbaseball_player_strikeouts
NBA first-half moneylinebasketball_team_first_half_winner
NBA first-half spreadbasketball_team_first_half_spread
NBA first-half totalbasketball_team_first_half_total
NBA player points propbasketball_player_points
NBA player assists propbasketball_player_assists

Worked Example: Cleveland/Detroit Over 4.5 Total

A full-game total on the May 21 Cleveland Guardians vs Detroit Tigers MLB game:
{
  "symbol": "tsc-mlb-cle-det-2026-05-21-4pt5",
  "metadata": {
    "event_id": "mlb-cle-det-2026-05-21",
    "event_start_time": "2026-05-21 17:10:00+00",
    "event_subcategory": "BASEBALL",
    "outcome_type": "totals",
    "market_sport_type": "baseball_team_full_game_total",
    "outcome_strike": "4.5",
    "long_participant_id": "mlb-cle",
    "long_participant_name": "Cleveland Guardians",
    "short_participant_id": "mlb-det"
  }
}
To safely interpret this contract:
  1. market_sport_type = "baseball_team_full_game_total" → full-game total. (outcome_type is also present but you don’t need it.)
  2. event_subcategory = "BASEBALL" → MLB game.
  3. outcome_strike = "4.5" → over/under line is 4.5 combined runs.
  4. The contract resolves “Over” if the combined score is 4.5 or more, otherwise “Under”.

Worked Example: Cleveland +3.5 Spread

A full-game run-line spread on the May 20 Cleveland Guardians vs Detroit Tigers MLB game:
{
  "symbol": "asc-mlb-cle-det-2026-05-20-pos-3pt5",
  "metadata": {
    "event_id": "mlb-cle-det-2026-05-20",
    "event_start_time": "2026-05-20 22:40:00+00",
    "event_subcategory": "BASEBALL",
    "outcome_type": "spreads",
    "market_sport_type": "baseball_team_full_game_spread",
    "outcome_strike": "3.5",
    "long_participant_id": "mlb-cle",
    "long_participant_name": "Cleveland Guardians",
    "short_participant_id": "mlb-det"
  }
}
To safely interpret this contract:
  1. market_sport_type = "baseball_team_full_game_spread" → full-game spread. (outcome_type is also present but you don’t need it.)
  2. long_participant_id = "mlb-cle" → the contract pays out on Cleveland.
  3. outcome_strike = "3.5" → handicap magnitude is 3.5 runs.
  4. The contract resolves to Cleveland if Cleveland wins, or loses by fewer than 3.5 runs.

Best Practices

  • Never parse the symbol or slug to determine market type, period, or handicap. Symbol formats are not part of the public contract.
  • Map on market_sport_type alone. It is guaranteed on every instrument — full-game, sub-period, and prop alike — and fully identifies the market. outcome_type is still present on the instrument, but do not rely on it for mapping (it is subject to change); the sole exception is futures, which carry no market_sport_type and are identified by outcome_type = "futures".
  • Treat outcome_strike as a string in client code and convert to your numeric type. The value is unsigned — the spread direction is determined by long_participant_id.
  • Cache and version your enum mappings. New market_sport_type values are announced in the changelog and rolled out in preprod before production. Subscribe to the RSS feed to be notified before new enums appear in production.
  • Subscribe to instrument updates via the streaming APIs to catch new instruments as they are listed.