---
title: "Same-Game Parlay Odds"
method: GET
path: "/fixtures/odds/sgp"
tags: ["parlays"]
---

# Same-Game Parlay Odds

`GET /fixtures/odds/sgp`

## Request

- Base URL: `https://v5.oddspapi.io/en`
- URL: `https://v5.oddspapi.io/en/fixtures/odds/sgp`
- Auth: one of:
  - API key in query parameter `apiKey`
  - API key in header `X-API-Key`

Price a correlated same-game parlay (SGP) from selected `oddsIds`.

All `oddsIds` must belong to **one** fixture. The legs are priced by the bookmaker itself, so `price` reflects the correlation between them; `singlesPrice` is the naive product and the gap is the correlation margin. Several bookmakers may be requested at once and are returned side by side.

Returns ONE fixture view with an `sgp` section added.

Max 20 legs per request.

## Query parameters

- `oddsIds` string, required

## Response `200`

One FixtureSgpResponse for the fixture the legs belong to.

- FixtureSgpResponse
  - `fixtureId` string, required: Fixture identifier: `{prefix}{sportId}{tournamentId}{nativeId}` — see Core Concepts → ID structure.
  - `reissuedFixtureId` string, nullable, required: The fixture that replaced this one, when a cancelled fixture has been re-listed under a new id. `null` is the normal value: it is only ever populated on a cancelled fixture (`status.statusId` `3`) whose replacement already exists in the feed, so permanent cancellations stay `null`, and a fixture can go from `null` to an id after you first saw it cancelled. One hop: if the replacement was itself cancelled, follow its own `reissuedFixtureId`.
  - `previousFixtureId` string, nullable, required: The inverse of `reissuedFixtureId`: the cancelled fixture this one replaced. Unlike the forward pointer this sits on a normal scheduled or live fixture, so a fixture carries its own history even if you never saw the cancelled one. `null` is the normal value. One hop and one predecessor at most — follow it repeatedly to walk back to the start of a chain, where a fixture postponed twice gives `A → B → C` and `B` carries both `previousFixtureId: A` and `reissuedFixtureId: C`. Cleared again if a postponement is reverted.
  - `status` Status, required
    - `live` boolean, required: Convenience flag — true only while in play (`statusId` 1).
    - `statusId` integer, required: Lifecycle status: `0` pregame, `1` live, `2` finished, `3` cancelled. Moves forward only — always branch on this ID.
    - `statusName` string, required: Translated display label for the status. For logic, branch on `statusId`, never on this string.
  - `sport` SportRef, required
    - `sportId` integer, required: Numeric sport identifier.
    - `sportName` string, required: Sport display name, translated per the request language prefix.
  - `tournament` TournamentRef, required
    - `tournamentId` integer, required: Numeric tournament identifier.
    - `tournamentName` string, required: Tournament display name, translated per the request language prefix.
    - `categoryName` string, nullable: Category (usually country/region) display name, translated.
  - `season` SeasonRef, required
    - `seasonId` integer, nullable: Numeric season identifier, when known.
    - `seasonName` string, nullable: Season display name, translated.
    - `seasonRound` integer, nullable: Round number within the season, when applicable.
  - `venue` VenueRef, required
    - `venueId` integer, nullable: Numeric venue identifier, when known.
    - `venueName` string, nullable: Venue display name, translated.
    - `venueLocation` string, nullable: Venue location (city), translated.
  - `startTime` integer, required: Epoch seconds (UTC).
  - `trueStartTime` string, nullable: Actual start time (ISO 8601), once known — may differ from the scheduled `startTime`.
  - `trueEndTime` string, nullable: Actual end time (ISO 8601), once known.
  - `participants` ParticipantsRef, required
    - `participant1Id` integer, required: Identifier of participant 1 (home / first-listed side).
    - `participant1RotNr` integer, nullable: Rotation number of participant 1 (US-book convention), when available.
    - `participant1Name` string, nullable: Full name of participant 1, translated.
    - `participant1ShortName` string, nullable: Short name of participant 1.
    - `participant1Abbr` string, nullable: Abbreviation of participant 1.
    - `participant2Id` integer, required: Identifier of participant 2 (away / second-listed side).
    - `participant2RotNr` integer, nullable: Rotation number of participant 2 (US-book convention), when available.
    - `participant2Name` string, nullable: Full name of participant 2, translated.
    - `participant2ShortName` string, nullable: Short name of participant 2.
    - `participant2Abbr` string, nullable: Abbreviation of participant 2.
  - `scores` object, required: Score rows keyed by period (`result`, `p1`, …).
  - `clock` Clock, required
    - `currentPeriod` string, nullable: Period key currently being played (see the period vocabulary in Enumerations).
    - `currentTime` string, nullable: Elapsed match time, `mm:ss`.
    - `remainingTime` string, nullable: Remaining match time, `mm:ss` (count-down sports).
    - `remainingTimeInPeriod` string, nullable: Remaining time in the current period, `mm:ss`.
    - `stopped` boolean, nullable: True while the match clock is stopped.
  - `expectedPeriods` integer, nullable: Number of regular periods expected for this fixture — use it (with `periodLength`) to interpret period keys per sport/league.
  - `periodLength` integer, nullable: Length of a regular period in minutes.
  - `externalProviders` ExternalProviders, required
  - `bookmakers` object, required: bookmakerSlug -> BookmakerFixtureMeta, for the requested bookmakers only.
  - `odds` OddsByBookmaker, required
  - `missingOddsIds` string[]: Requested oddsIds of this fixture that could not be found (unknown bookmaker, unknown or expired oddsId). Present only when at least one leg is missing.
  - `sgp` SgpByBookmaker, required: bookmakerSlug -> (parlayId -> SgpEntry). `parlayId` is built exactly as on `/fixtures/odds/parlay`, so the two are directly comparable. A bookmaker is omitted — leaving `{}` — when its legs were not all found, or when they were but its own pricing service could not quote the parlay (in which case there is no `missingOddsIds`).

## Other responses

- `400`: API error
- `401`: API error
- `403`: API error
- `404`: API error
- `422`: Validation Error (framework-level)
- `429`: API error
- `501`: API error
- `502`: API error

## Changes

- **2026-11-03** `9ca3a6a3c1e8`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/oddspapi/apis/odds-api-v5/changes/fixtures/odds/sgp/get.md)

---

[API](https://skmtc.dev/oddspapi/apis/odds-api-v5.md) - [All operations](https://skmtc.dev/oddspapi/apis/odds-api-v5/llms.txt) - [OpenAPI document](https://skmtc.dev/oddspapi/apis/odds-api-v5/revisions/9ca3a6a3c1e8?raw)
