Unabated APIGuideReference

Odds

Retrieve a listing of current odds data for the specific league and market type.

URL Parameters

Parameter

Type

Description

league

String

The league for which to retrieve data.

Short name format (e.g. mlb, nfl, etc.)

marketType

String

Type of market (see below)

Market Types

  • straight - Standard game markets (moneyline, spread, totals)

  • futures - Season-long betting markets (championships, awards)

  • props - Proposition bets (player props, team props, game props)

Response Structure

The Unabated API returns odds data in a hierarchical JSON structure organized by league, period type, and game state. This structure provides comprehensive betting market information including event details, team information, and market source lines.

Objet keys throughout this structure are for navigational purposes only, and can be directly keyed into via the marketLineKey property of our websocket payloads.

These keys are not meant to be parsed for data consumption.

If you are looking for a unique key for a particular market line, you want to be using the marketLineId which is guaranteed to be unique for the given market and market source.

{
  "odds": {
    "{leagueCode}": {
      "leagueId": integer,
      "periodTypes": {
        "{periodTypeName}": {
          "periodTypeId": integer,
          "{gameState}": {
            "{marketKey}": { /* Market Group Object */ }
          }
        }
      }
    }
  },
  "lastUpdated": timestamp
}

Root Fields

Field

Type

Description

odds

Object

Contains all odds data organized by league

lastUpdated

Integer

Unix timestamp of when the data was last updated

League Structure

Each league is identified by its short code (e.g., "nba", "nfl", "mlb") and contains:

Field

Type

Description

leagueId

Integer

Unique identifier for the league

periodTypes

Object

Period types available for this league

Period Types Structure

Period types are organized by name (e.g., "game", "firstHalf") and contain:

Field

Type

Description

periodTypeId

Integer

Unique identifier for the period type

{gameState}

Object

Game state containers (pregame, live)

Game States

  • pregame - Markets for games that haven't started

  • live - Markets for games currently in progress

Market Key

Market keys follow this standardized format:

eid{eventId}:bt{betTypeId}:bst{betSubType}:pt{periodTypeId}:pid{personId}:tid{teamId}:sid{sideIndex}:{gameState}

Examples:

  • eid940356:bt72:bst0:pt1:pregame - Pregame full game market for event 940356

  • eid940356:bt104:bst1:pt2:live - Live first half market for event 940356

Market Key Components

Component

Description

Example

eid

Event ID

eid940356

bt

Bet Type ID

bt72

bst

Bet Sub Type (0 if none)

bst0

pt

Period Type ID

pt1

gameState

pregame or live

pregame

pid

Person Id (0 if none)

pid41840

tid

Team Id (0 if none)

tid4883

Market Group Object

Each market group contains comprehensive information about a specific betting market:

Core Market Fields

Field

Type

Description

eventId

Integer

Unique identifier for the event

isLive

Boolean

Whether the market is currently live

eventStart

String

Event start time in ISO 8601 format (UTC)

eventEnd

String

Event end time in ISO 8601 format (UTC)

statusId

Integer

Current event status (see Event Status reference)

betTypeId

Integer

Type of bet (see Bet Types reference)

betSubType

String

Additional bet type context if applicable

gameClock

String

Current game clock display

overtimeNumber

Integer

Number of overtime periods (0 if none)

eventName

String

Full display name of the event

playerPosition

String

Player position for player props (empty for non-player markets)

tournamentName

String

Tournament name if applicable

Event Teams Structure

The eventTeams object contains team information organized by side index:

"eventTeams": {
  "0": {
    "teamId": 75,
    "rotationNumber": 501,
    "sideIndex": 0,
    "score": 0
  },
  "1": {
    "teamId": 84,
    "rotationNumber": 502,
    "sideIndex": 1,
    "score": 0
  }
}
Event Team Fields

Field

Type

Description

teamId

Integer

Unique identifier for the team

rotationNumber

Integer

Sportsbook rotation number

sideIndex

Integer

0 = Away/Over, 1 = Home/Under

score

Integer

Current score (0 for pregame)

Sides Structure

The sides object contains market lines organized by side keys:

Side Key Format

Side keys follow this pattern:

si{sideIndex}:tid{teamId}

Examples:

  • si0:tid75 - Away team (side 0) with team ID 75

  • si1:tid84 - Home team (side 1) with team ID 84

For player props, the format includes player ID:

si{sideIndex}:pid{playerId}

Side Object Structure

Each side contains market participant information and market source lines:

"si0:tid75": {
  "sideIndex": 0,
  "sideName": "",
  "teamId": 75,
  "personId": null,
  "marketSourceLines": {
    "{marketSourceId}": { /* Market Source Line Object */ }
  }
}
Side Fields

Field

Type

Description

sideIndex

Integer

0 = Away/Over, 1 = Home/Under

sideName

String

Custom side name (empty if standard)

teamId

Integer|null

Team ID for team-based markets

personId

Integer|null

Player ID for player-based markets

marketSourceLines

Object

Market lines from different sources

Market Source Lines

Market source lines contain odds data from specific books or sources:

Market Source Line Object

"91": {
  "marketId": 43907422,
  "marketLineId": 3181318560,
  "marketSourceId": 91,
  "points": 230.5,
  "price": -110,
  "sourcePrice": -110,
  "sourceFormat": 1,
  "statusId": 1,
  "sequenceNumber": 1749141120194,
  "edge": -0.0642,
  "bestAltPrice": -110,
  "bestAltPoints": 230.5,
  "bestAltEdge": -0.0842,
  "disabled": false,
  "marketLineKey": "",
  "modifiedOn": "2025-06-05T16:32:07.592989Z",
  "alternateLines": [ /* Array of alternate line objects */ ]
}
Market Source Line Fields

Field

Type

Description

marketId

Integer

Unique market identifier

marketLineId

Integer

Unique market line identifier

marketSourceId

Integer

Source/sportsbook identifier

points

Number|null

Point spread or total (null for moneyline)

price

Integer

Price in American odds format

sourcePrice

Number

Original price from the source

sourceFormat

Integer

Price format (1=American, 2=Decimal)

statusId

Integer

Status of the market line (see Market Line Status reference)

sequenceNumber

Integer

Update sequence for ordering

edge

Number

Calculated edge value

bestAltPrice

Integer

Best available alternate price

bestAltPoints

Number

Points for best alternate price

bestAltEdge

Number

Edge for best alternate price

disabled

Boolean

Whether the line is disabled

marketLineKey

String

Additional line identifier

modifiedOn

String

Last modification time (ISO 8601)

Alternate Lines

Alternate lines provide additional betting options with different points/prices:

"alternateLines": [
  {
    "marketId": 43907422,
    "marketLineId": 3181318560,
    "marketSourceId": 91,
    "alternateNumber": 1,
    "points": 231.5,
    "price": -120,
    "sourcePrice": -120,
    "statusId": 1,
    "sequenceNumber": 1749141120194,
    "edge": -0.0842,
    "modifiedOn": "2025-06-05T16:32:07.592989Z"
  }
]
Alternate Line Fields

Field

Type

Description

alternateNumber

Integer

Sequence number for the alternate

points

Number

Alternate point value

price

Integer

Price for alternate line

edge

Number

Calculated edge for alternate

(other fields)

Various

Same as main market source line

Data Navigation Examples

Accessing a Specific Market Line

To access odds for a specific sportsbook on a particular side:

const nbaOdds = response.odds.nba;
const gameMarkets = nbaOdds.periodTypes.game.pregame;
const market = gameMarkets['eid940356:bt72:bst0:pt1:pregame'];
const awaySide = market.sides['si0:tid75'];
const draftkingsLine = awaySide.marketSourceLines['91'];

Iterating Through All Markets

// Iterate through leagues
for (const [leagueCode, leagueData] of Object.entries(response.odds)) {
  // Iterate through period types
  for (const [periodName, periodData] of Object.entries(leagueData.periodTypes)) {
    // Iterate through game states (pregame/live)
    for (const [gameState, markets] of Object.entries(periodData)) {
      if (gameState === 'periodTypeId') continue; // Skip metadata
      
      // Iterate through markets
      for (const [marketKey, marketData] of Object.entries(markets)) {
        // Process market data
        console.log(`Market: ${marketKey}`);
        console.log(`Event: ${marketData.eventName}`);
      }
    }
  }
}