Same Game Parlay

Overview

The LSports BetBuilder API enables operators to offer Same Game Parlay (SGP) functionality — allowing bettors to combine multiple selections from a single fixture into one bet with a correlation-aware combined price.

Unlike naive parlay pricing that simply multiplies individual odds, the BetBuilder engine accounts for statistical dependencies between selections (e.g., "Home Win" and "Over 2.5 Goals" are correlated events), producing a fair margined price that reflects joint probabilities.

Integration Workflow

The API consists of three endpoints designed to be used together:

1. Discover coverage — Call /v1/betbuilder/leagues to retrieve the supported leagues per sport and their format configuration (available periods, extra time support, etc.). This tells you which fixtures are eligible for Bet Builder.

2. Resolve market dependencies — For each selection the end user wants to include, call /v1/betbuilder/markets to determine which market data the pricing engine requires. Markets often have dependencies - for example, pricing a "Player Total Shots" selection may require you to also provide "Shots on Target" and "Assists" data in the same request. This endpoint tells you exactly what to supply.

3. Build the combined price — Call /v1/betbuilder with the fixture's market data (as determined in step 2), the user's selections, and participant/player information. The API returns a single combined decimal odds value along with metadata indicating which selections are required vs. redundant.

Key Principle

The operator is responsible for supplying the underlying market odds data to the pricing engine. The BetBuilder does not source odds - it derives the combined price from the data you provide. The richer and more complete the market data you supply (more lines, more periods), the more accurate the combined pricing will be.

Refer to the full API specification below for request/response schemas, supported market keys, period definitions, and worked examples across all three sports.

Derive combined bet price

post

Calculates a margined combined price for one or more selections on a fixture.

The markets object provides the probabilistic model data the pricing engine needs to derive prices.

Market key reference by sport

Key
Sport
Used for

goals

Football

All standard markets (1X2, totals, handicaps, goalscorer)

shots

Football

Player total shots

shotsOnTarget

Football

Player shots on target

assists

Football

Player assists

passes

Football

Player passes

tackles

Football

Player tackles

cards

Football

Player cards

fouls

Football

Player fouls

corners

Football

Corner kick markets

points

Basketball

All standard markets + player points

assists

Basketball

Player assists

rebounds

Basketball

Player rebounds

steals

Basketball

Player steals

blocks

Basketball

Player blocks

points{value=3}

Basketball

Player 3-pointers made

points

American Football

All standard markets (moneyline, totals, spread)

yards

American Football

All player/team yards markets

touchdowns

American Football

All player/team touchdown markets

Period keys

Sport
Period key
Meaning

Football

RT

Regulation time (full match)

Football

H1

First half

Football

H2

Second half

Basketball / AMFO

*

Full game (incl. overtime)

Basketball / AMFO

H1

First half

Basketball / AMFO

Q1Q4

Individual quarters


Market key structure

Each entry in markets is a market key → period key → odds data. Example shape:

Football — goals

  • Periods: RT, H1, H2

  • Sub-fields: europeanHandicaps, asianHandicaps, asianTotals, nthPlayers, correctScore, europeanFirstTos

  • nthPlayers must include all players from both teams under keys "*" (anytime), "1" (first scorer), "-1" (last scorer)

Football — shots, shotsOnTarget, assists, passes, tackles, cards, fouls

  • Periods: RT

  • Sub-fields: asianPlayerTotals (keyed by player_{id})

Football — corners

  • Periods: RT, H1

  • Sub-fields: asianTotals

Basketball — points

  • Periods: *, H1, Q1Q4

  • Sub-fields: asianHandicaps, asianTotals, asianPlayerTotals

Basketball — assists, rebounds, steals, blocks, points{value=3}

  • Periods: *

  • Sub-fields: asianPlayerTotals (keyed by player_{id})

  • All player-stat keys must be sent together in the same request

American Football — points

  • Periods: *, H1, Q1Q4

  • Sub-fields: asianHandicaps, asianTotals

American Football — yards

  • Periods: *

  • Sub-fields: asianPlayerPasses (passing yards), asianPlayerRushes (rushing yards), asianPlayerReceives (receiving yards), asianPlayerRushReceives (combined rush + receive)

American Football — touchdowns

  • Periods: *

  • Sub-fields: asianPlayerTotals (total TDs), asianPlayerPasses (passing TDs)

Body
sportIdinteger · enumRequired

LSports sport ID

Example: 6046Possible values:
leagueIdinteger · nullableOptional

LSports league/tournament ID. Required for Basketball and American Football to select the correct pricing model format.

Known values

League ID
NBA 64
WNBA 761
NCAA Basketball 4045
Euroleague 33249
NFL 75
NCAA Football 32505
Example: 64
fixtureIdinteger · nullableOptional

LSports fixture ID. Each request must use a unique value so the engine treats it as an independent event. Reusing the same ID across requests can cause state caching issues on the engine side.

Example: 100001
eventIdstring · nullableOptional

Optional external event reference ID.

viewIdstring · nullableOptional

Optional view/session reference ID.

Responses
chevron-right
200

Combined bet price successfully derived

application/json
correlationIdstring · nullableOptional

Internal correlation ID for tracing.

Example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
pricenumber · doubleOptional

Combined margined decimal odds for all selections.

Example: 3.45
requiredSelectionsinteger[] · nullableOptional

Indices of selections that are required for the bet to be valid.

Example: [0,1]
post
/v1/betbuilder

Get supported markets for a sport

post

Returns the list of LSports markets supported by BetBuilder for a given sport, together with any dependent markets required to price them.

For example, the shots market (ID 1397) depends on shotsOnTarget and assists being provided in the same request for the pricing model to calibrate correctly.

Body
sportIdinteger · enumRequired

LSports sport ID

Example: 6046Possible values:
marketIdinteger · nullableOptional

Optional filter — return data for a single market only.

Example: 1397
Responses
chevron-right
200

List of supported markets with dependencies

application/json
post
/v1/betbuilder/markets
200

List of supported markets with dependencies

Get supported leagues

post

Returns the leagues/tournaments supported by BetBuilder for a given sport, along with their format configuration (league mapping, available periods, whether extra time or playoffs are supported).

The leagueId in requests determines which league format is applied. Basketball and American Football require an explicit leagueId; Football accepts any.

Body
sportIdinteger · enumRequired

LSports sport ID

Example: 48242Possible values:
leagueIdinteger · nullableOptional

Optional filter — return data for a single league only.

Example: 64
Responses
chevron-right
200

List of supported leagues with format configuration

application/json
post
/v1/betbuilder/leagues
200

List of supported leagues with format configuration

Last updated

Was this helpful?