fanduel_sgp_price
Price a FanDuel same game parlay: submit two or more selections from one event and receive the correlation-adjusted combined odds. Read the isSGM entry to identify the parlay price.
Instructions
PRICE A SAME GAME PARLAY you choose — give it two or more selections from one FanDuel event and get the correlation-adjusted combined price. Read the entry with isSGM: true; the SINGLEs alongside it are the individual leg prices, not the parlay.
Returns: {respCode: 'SUCCESS', betCombinations:[{betType, isSGM, features, winAvgOdds:{trueOdds:{decimalOdds:{decimalOdds}}, americanDisplayOdds}, legCombinations:[…]}], betFailures:[…]} — VERIFIED live 2026-08-27 against NBA Boston Celtics @ Detroit Pistons (event 35928218).
READ THE isSGM: true ENTRY — IT IS THE ONLY ONE THAT IS A SAME GAME PARLAY. The response prices EVERY combination it can make from your legs, so a two-leg request comes back with two SINGLEs and one DOUBLE. The SINGLEs are the individual leg prices, not the parlay; taking the first betCombination gives you a single bet.
THE PRICE IS NOT THE PRODUCT OF THE LEGS. Verified: 2.02 and 1.87 as singles, and the SGP DOUBLE prices 3.4128 against a naive 3.7765 — a 9.6% correlation charge.
USE winAvgOdds.trueOdds.decimalOdds.decimalOdds, NOT averageOdds. The latter is a DISPLAY rounding: the same bet reads 3.41 there and 3.41275716 in trueOdds. Rounded odds compared against another book's exact ones manufacture edge that is not there.
betFailures: INVALID_COMBINATION IS USUALLY NOT ABOUT YOUR PARLAY. It says the legs cannot form an ORDINARY multi because they are from the same game — which is the whole point of an SGP. It appears alongside a perfectly good isSGM entry, so never treat its presence as failure; check for the isSGM entry instead.
NO isSGM ENTRY MEANS FANDUEL WILL NOT COMBINE THOSE LEGS. Seen live on legs whose markets were sgmMarket: true in fanduel_sb_call(event_page), so that flag is necessary and not sufficient. A leg whose runner is suspended reports RUNNER_SUSPENDED instead.
THE UPSTREAM RETURNS A betReference PLACEMENT TOKEN ON EVERY COMBINATION. It is PROJECTED AWAY here and never reaches you — this tool prices and cannot place. The stake ceilings, bonus-wallet and promotion fields are dropped with it.
Example: Price a two-leg same game parlay {"betLegs": [{"legType": "SIMPLE_SELECTION", "betRunners": [{"runner": {"marketId": "734.180521459", "selectionId": 60427}}]}, {"legType": "SIMPLE_SELECTION", "betRunners": [{"runner": {"marketId": "734.180522215", "selectionId": 7017823}}]}]}
Auth: none needed.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| betLegs | Yes | The legs: [{"legType": "SIMPLE_SELECTION", "betRunners": [{"runner": {"marketId": "734.180521459", "selectionId": 60427}}]}, …]. NOTE THE DOUBLE NESTING — `betRunners` holds objects with a `runner` key, and writing `runners` or a bare runner object binds to NOTHING: the call still returns 200 with legFailures INVALID_BET_LEG and an empty `betRunners`, so it fails silently rather than erroring. Both ids come from fanduel_sb_call(operation="event_page"): `marketId` from attachments.markets, `selectionId` from that markets `runners[]`. All legs must be from ONE event for an SGP. Two or more legs; one leg just returns that legs own price. | |
| web_key | No | FanDuels static PUBLIC web key. Leave it alone — but do not remove it either: WITHOUT `_ak` the call still returns 200 and prices the SINGLES while silently omitting the same-game combination entirely, which is the one thing you asked for. | FhMFpcPWXMeyZxOx |