# Odds Data Type - oddID
URL: https://sockodds.com/docs/data-types/odds/

# Odds Data Type - oddID [#odds-data-type---oddid]

An `oddID` is a unique identifier for a specific betting option: a specific side/outcome within a specific market.

## oddID format [#oddid-format]

```
{statID}-{statEntityID}-{periodID}-{betTypeID}-{sideID}
```

| Component | Description | Examples |
| --- | --- | --- |
| [statID](https://sockodds.com/docs/data-types/stats/) | The statistic being wagered on | `points`, `disposals`, `tries` |
| [statEntityID](https://sockodds.com/docs/data-types/stat-entity/) | Who the stat applies to | `home`, `away`, `all`, or a playerID |
| [periodID](https://sockodds.com/docs/data-types/periods/) | The time period covered | `game`, `1h`, `1q` |
| [betTypeID](https://sockodds.com/docs/data-types/bet-types/) | The type of bet | `ml`, `sp`, `ou` |
| [sideID](https://sockodds.com/docs/data-types/bet-types/) | Which side of the bet | `home`, `away`, `over`, `under` |

## Example oddIDs [#example-oddids]

| oddID | Description |
| --- | --- |
| `points-home-game-ml-home` | Head to head on the home team, full game |
| `points-away-game-sp-away` | Line on the away team, full game |
| `points-all-game-ou-over` | Over on total points, full game |
| `points-home-1h-ml-home` | Head to head on the home team, 1st half |
| `disposals-LACHIE_NEALE_1_AFL-game-ou-over` | Over on Lachie Neale's disposals |
| `anytimeTryScorer-PLAYER_ID-game-yn-yes` | Anytime try scorer, every player (query form) |

## Accessing odds [#accessing-odds]

Each event from `/events` has an `odds` object keyed by oddID:

```json
{
  "eventID": "…",
  "odds": {
    "points-home-game-ml-home": {
      "oddID": "points-home-game-ml-home", "statID": "points", "statEntityID": "home", "periodID": "game", "betTypeID": "ml", "sideID": "home",
      "opposingOddID": "points-away-game-ml-away", "marketName": "Head to Head — Brisbane Lions",
      "fairOdds": "-115", "fairOddsAvailable": true, "bookOdds": "-108", "bookOddsAvailable": true,
      "bookSpread": null, "bookOverUnder": null, "fairSpread": null, "fairOverUnder": null,
      "started": false, "ended": false, "cancelled": false, "scoringSupported": true,
      "byBookmaker": {
        "sportsbet": { "bookmakerID": "sportsbet", "odds": "-108", "decimal": 1.93, "available": true, "lastUpdatedAt": "2026-09-06T08:27:48.000Z", "eventName": "Brisbane - Adelaide" },
        "tab":       { "bookmakerID": "tab", "odds": "-110", "decimal": 1.91, "available": true, "lastUpdatedAt": "2026-09-06T08:27:31.000Z" }
      }
    },
    "points-all-game-ou-over": {
      "oddID": "points-all-game-ou-over", "statID": "points", "statEntityID": "all", "periodID": "game", "betTypeID": "ou", "sideID": "over",
      "fairOdds": "-108", "fairOverUnder": "165.5", "bookOdds": "-110", "bookOverUnder": "165.5",
      "byBookmaker": { "sportsbet": { "odds": "-110", "decimal": 1.91, "overUnder": "165.5", "available": true } }
    }
  }
}
```

## Key odds fields [#key-odds-fields]

| Field | Description |
| --- | --- |
| `fairOdds` | Consensus odds without juice (vig removed), from exchange/sharp sources; Base and above |
| `bookOdds` | Consensus odds across bookmakers (includes juice) |
| `fairSpread` / `bookSpread` | The line for spread bets |
| `fairOverUnder` / `bookOverUnder` | The line for O/U bets |
| `fairOddsAvailable` / `bookOddsAvailable` | Whether each could be computed / is open at at least one book |
| `byBookmaker` | Odds broken down by individual bookmaker, each with `decimal` |
| `started` / `ended` / `cancelled` | Whether the bet period has started, ended or been cancelled |
| `scoringSupported` | Whether the source can grade this market from results |
| `altLines` | Alternate lines keyed by line (with `includeAltLines=true`) |

### Open/close odds by bookmaker [#openclose-odds-by-bookmaker]

SportsGameOdds returns `openOdds`, `closeOdds`, `openSpread`, `closeSpread`, `openOverUnder` and `closeOverUnder` with `includeOpenCloseOdds=true`. SockOdds accepts the parameter for compatibility but does not snapshot opening and closing prices yet, so those fields are absent; use `lastUpdatedAt` and your own snapshots.

## Filtering by oddID [#filtering-by-oddid]

```
/events?oddID=points-home-game-ml-home,points-all-game-ou-over&includeOpposingOdds=true
```

Use `includeOpposingOdds=true` to automatically include the opposite side of each requested oddID. See [Supported Markets](https://sockodds.com/docs/data-types/markets/) for the complete list of oddIDs by league and bookmaker.

> Need help?[FAQ](https://sockodds.com/docs/faq/) · [Email](mailto:api@sockodds.com) · [Contact](https://sockodds.com/contact-us/)
