Markets

This reference guide explains the mapping and logic behind Market IDs and Label IDs within the SSTrader API.

SSTrader Markets Reference

This guide explains market_id and label_id mappings used in the SSTrader API.
Every bet selection is identified by a market_id (what type of market) and a label_id (which outcome within that market).


How Label IDs Work

Label IDs are NOT sequential outcome indices. Each market has its own fixed label_id mapping.
Common mistakes to avoid:

  • In Under/Over markets: label_id 1 = Under, label_id 2 = Over (not the reverse)
  • In 3-Way markets: label_id 0 = Draw (not label_id 3), label_id 1 = Home, label_id 2 = Away
  • In Correct Score markets: label_id encodes the score itself (see below)

Quick Lookup Table

market_idMarket Namelabel_id → Outcome
13Way Result (1x2)0=Draw, 1=Home, 2=Away
2Asian Handicap1=Home, 2=Away
3Goal Line (Asian)1=Under, 2=Over
4Match Goals (European)1=Under, 2=Over
5Corners — Asian Handicap1=Home, 2=Away
6Asian Total Corners1=Under, 2=Over
7Correct ScoreEncoded score (remove leading 1: remaining = HomeGoals+AwayGoals)
111st Half 3Way Result0=Draw, 1=Home, 2=Away
121st Half Asian Handicap1=Home, 2=Away
131st Half Goal Line (Asian)1=Under, 2=Over
141st Half Match Goals (European)1=Under, 2=Over
161st Half Asian Total Corners1=Under, 2=Over
171st Half Correct ScoreEncoded score (same as Market 7)
22Next Goal0=No Goal, 1=Home, 2=Away
50Draw No Bet1=Home, 2=Away
51HT/FTCompound: digits = HT result + FT result
52Odd/Even1=Odd, 2=Even
53BTTS1=Yes, 2=No
541st Half BTTS1=Yes, 2=No
552nd Half BTTS1=Yes, 2=No
56Team CornersCompound: 1st digit=team (1=Home,2=Away), 2nd=outcome (1=Under,2=Over)
57Team Total GoalsCompound: 1st digit=team (1=Home,2=Away), 2nd=outcome (1=Under,2=Over)
58Double Chance10=Home/Draw, 2=Draw/Away, 12=Home/Away
59Clean SheetCompound: 1st digit=team (1=Home,2=Away), 2nd=outcome (1=Yes,2=No)
60To Qualify1=Home, 2=Away
203Asian Total Cards1=Under, 2=Over
300Player to be booked1=Yes
3011st Player Booked1=Yes
302Player to be Sent Off1=Yes
303Match Goalscorers0=Anytime, 1=First, 2=Last
304Team Goalscorers1=First, 2=Last
305Multi Scorers2=Over
306Player to Assist1=Yes
307Player Shots On Target2=Over
308Player Shots2=Over
309Player Fouls Committed2=Over
312Goalkeeper Saves2=Over
313Score or Assist1=Yes

Golden Substitute Lookup Table

Golden Substitute markets are the player markets 300–313 with substitute
protection switched on. They use exactly the same logic and label_id mapping as their base
market — only the market_id differs: Golden Substitute market_id = base market_id + 50.
Example: Match Goalscorers 303 → Golden Substitute Match Goalscorers 353.
See Golden Substitute below for how these markets settle.

market_idBase market_idMarket Namelabel_id → Outcome
350300Player to be booked (Golden Sub)1=Yes
3513011st Player Booked (Golden Sub)1=Yes
352302Player to be Sent Off (Golden Sub)1=Yes
353303Match Goalscorers (Golden Sub)0=Anytime, 1=First, 2=Last
354304Team Goalscorers (Golden Sub)1=First, 2=Last
355305Multi Scorers (Golden Sub)2=Over
356306Player to Assist (Golden Sub)1=Yes
357307Player Shots On Target (Golden Sub)2=Over
358308Player Shots (Golden Sub)2=Over
359309Player Fouls Committed (Golden Sub)2=Over
362312Goalkeeper Saves (Golden Sub)2=Over
363313Score or Assist (Golden Sub)1=Yes

Golden Substitute

Golden Substitute keeps a player bet alive when the player is substituted: instead of the bet
being voided, it transfers to the substitute who comes on, and settles on what the two players
achieved together.

Overview

On an ordinary player market (300–313), a player who leaves the pitch takes the bet with them —
the bet is voided. On a Golden Substitute market (350–363) the bet stays in play: it is re-linked
to the substitute who replaces the player, and settles on the two players' combined performance.

  • Applies to player markets only.
  • Eligible markets arrive already marked as Golden Substitute, under their own market_id
    (base + 50). The set is not chosen per fixture or per market by hand.
  • A Golden Substitute market is a separate market from its base market — the player, line and
    label_id are read exactly as on the base market; only the settlement rule on substitution differs.

How it works

  1. Eligible player markets come through already marked as Golden Substitute, as market_id
    base + 50.
  2. If no substitution happens, the bet settles normally on that player's own performance —
    Golden Substitute changes nothing, and the market behaves exactly like its base market.
  3. If the player is substituted mid-match, the bet is re-linked to the designated substitute, and
    what both players do counts towards the outcome.
  4. Combined outcome: the substitute picks up where the original player left off, and the
    market is judged on what the two of them did together rather than on either player alone. On
    a Player to Score market (353, label_id 0), the bet wins if either the original player
    or the substitute scores.
  5. In a bet builder or combination bet, each leg is its own market, so a combination can mix
    Golden Substitute legs (35x) and ordinary legs (30x).

Worked example

A fixture carries a Match Goalscorers market on the starting striker, offered as Golden
Substitute: market_id 353, label_id 0 (Anytime) — the same label_id as Anytime on market 303.

  1. The selection is placed on market 353, label_id 0 for the striker.
  2. Mid-match the striker is substituted. The bet is not voided — it transfers to the
    substitute who comes on.
  3. The bet wins if either the striker (before coming off) or the substitute (after coming on)
    scores.

Contrast — had the striker played the full match, the bet would settle on the striker's own
performance, exactly like market 303, label_id 0. The substitution rule only matters when a
substitution actually happens.


Market Definitions

Market 1 — 3Way Result (1x2)

Standard home/draw/away market for full-time result.

label_idOutcome
1Home Win
2Away Win
0Draw ⚠️ (not 3)

Market 2 — Asian Handicap

label_idOutcome
1Home
2Away

Market 3 — Goal Line (Asian Total Goals)

label_idOutcome
1Under ⚠️ (not 2)
2Over

Market 4 — Match Goals (European Total Goals)

label_idOutcome
1Under
2Over

Market 5 — Corners Asian Handicap

label_idOutcome
1Home
2Away

Market 6 — Asian Total Corners

label_idOutcome
1Under
2Over

Market 7 — Correct Score

Label IDs encode the scoreline directly using the pattern: 1 + home goals digit + away goals digit.

label_idScore
1000:0
1010:1
1101:0
1111:1
1202:0
1212:1
1222:2
1303:0
1424:2
...(pattern continues)

Parsing rule: Remove the leading 1. The remaining digits are home_goals + away_goals.
Example: label_id 142 → remove 1 → 42 → Home 4, Away 2 → score 4:2


Market 11 — 1st Half 3Way Result

Same label mapping as Market 1, but for the first half only.

label_idOutcome
1Home Win
2Away Win
0Draw

Market 12 — 1st Half Asian Handicap

label_idOutcome
1Home
2Away

Market 13 — 1st Half Goal Line (Asian Total Goals)

label_idOutcome
1Under
2Over

Market 14 — 1st Half Match Goals (European Total Goals)

label_idOutcome
1Under
2Over

Market 16 — 1st Half Asian Total Corners

label_idOutcome
1Under
2Over

Market 17 — 1st Half Correct Score

Same encoding as Market 7, but for first-half scores only.

label_idScore
1000:0
1111:1
1101:0
...(same pattern: remove leading 1)

Market 22 — Next Goal (n-Goal)

Which team scores the Nth goal. The specific goal number (1st, 2nd, etc.) is in the line property of the Odd object.

label_idOutcome
1Home scores next
2Away scores next
0No more goals (neither team)

Market 50 — Draw No Bet

label_idOutcome
1Home
2Away

Market 51 — Half-Time / Full-Time (HT/FT)

Label IDs encode the HT result and FT result combined: HT_result + FT_result, where 1 = Home, 2 = Away, 0 = Draw (represented as 0/X).

label_idHT ResultFT Result
111HomeHome
100DrawDraw
122AwayAway
112HomeAway
121AwayHome
110HomeDraw
...(all 9 combinations)

Market 52 — Odd/Even (Total Goals)

label_idOutcome
1Odd
2Even

Market 53 — Both Teams To Score (BTTS)

label_idOutcome
1Yes
2No

Market 54 — 1st Half BTTS

label_idOutcome
1Yes
2No

Market 55 — 2nd Half BTTS

label_idOutcome
1Yes
2No

Market 56 — Team Corners

Compound label_id: first digit = team (1 = Home, 2 = Away), second digit = outcome (1 = Under, 2 = Over).

label_idTeamOutcome
11HomeUnder
12HomeOver
21AwayUnder
22AwayOver

Market 57 — Team Total Goals

Same compound structure as Market 56.

label_idTeamOutcome
11HomeUnder
12HomeOver
21AwayUnder
22AwayOver

Market 58 — Double Chance

label_idOutcome
10Home or Draw
2Draw or Away
12Home or Away

Market 59 — Clean Sheet

Compound label_id: first digit = team (1 = Home, 2 = Away), second digit = outcome (1 = Yes, 2 = No).

label_idTeamClean Sheet?
11HomeYes
12HomeNo
21AwayYes
22AwayNo

Market 60 - To Qualify

label_idOutcome
1Home
2Away

Market 203 — Asian Total Cards

label_idOutcome
1Under
2Over

Market 300 - Player to be booked

Which named player receives a booking in the match. The specific player is identified elsewhere in the Odd object; label_id encodes when they are booked.

label_idOutcome
1Yes

Market 301 - 1st Player Booked

Which named player is the first to receive a booking in the match. The specific player is identified elsewhere in the Odd object; label_id encodes when they are booked.

label_idOutcome
1Yes

Market 302 - Player to be Sent Off

Which named player is sent off in the match. The specific player is identified elsewhere in the Odd object; label_id encodes when they are sent off.

label_idOutcome
1Yes

Market 303 — Match Goalscorers

Which named player scores in the match. The specific player is identified elsewhere in the Odd
object; label_id encodes when they score.

label_idOutcome
0Anytime
1First
2Last

Market 304 - Team Goalscorers

Which named player scores for a specific team. The specific player is identified elsewhere in the Odd object; label_id encodes when they score.

label_idOutcome
1First
2Last

Market 305 - Multi Scorers

Which named player scores multiple goals in the match. The specific player is identified elsewhere in the Odd object; label_id encodes when they score. Odd line property indicates the number of goals.

label_idOutcome
2Over

Market 306 - Player to Assist

Which named player provides an assist in the match. The specific player is identified elsewhere in the Odd object; label_id encodes when they assist.

label_idOutcome
2Yes

Market 307 - Player Shots On Target

Which named player has a shot on target in the match. The specific player is identified elsewhere in the Odd object; label_id encodes when they have a shot on target. Odd line property indicates the number of shots on target.

label_idOutcome
2Over

Market 308 - Player Shots

Which named player has a shot in the match. The specific player is identified elsewhere in the Odd object; label_id encodes when they have a shot. Odd line property indicates the number of shots.

label_idOutcome
2Over

Market 309 - Player Fouls Committed

Which named player commits fouls in the match. The specific player is identified elsewhere in the Odd object; label_id encodes when they commit fouls. Odd line property indicates the number of fouls.

label_idOutcome
2Over

Market 312 - Goalkeeper Saves

How many saves a named goalkeeper makes in the match. The specific player is identified elsewhere in the Odd object; the Odd line property indicates the number of saves.

label_idOutcome
2Over

Market 313 - Score or Assist

Which named player scores or provides an assist in the match. The specific player is identified elsewhere in the Odd object; label_id encodes when they score or assist.

label_idOutcome
1Yes

Key Rules for LLMs

  1. Under = label_id 1, Over = label_id 2 — in all total/line markets (3, 4, 6, 13, 16, 203).
  2. Draw = label_id 0 — in all 3-way markets (1, 11). It is NOT label_id 3.
  3. Correct Score encoding — label_id always starts with 1. Strip it, then read remaining digits as home+away goals (e.g., 142 → 4:2).
  4. Compound label_ids — in markets 56, 57, 59: first digit is team (1=Home, 2=Away), second digit is outcome.
  5. Next Goal line property — for market 22, the goal number (1st, 2nd, etc.) is in the line field of the Odd object, not the label_id.
  6. Golden Substitute = base market_id + 50 — markets 350–363 reuse the label_id mapping of 300–313 (subtract 50 to find the definition). If the player is substituted, the bet settles on the original player and the substitute combined instead of being voided.

Did this page help you?