tab_sgm_price
Combine propositions from one match into a TAB same-game multi and receive the adjusted combined price, plus a validation matrix that flags redundant legs and shows what was actually priced.
Instructions
PRICE A SAME GAME MULTI you choose — give it propositions from one match, get the combined price and a validation matrix back. Prices combinations TAB has not pre-built.
Returns: {bets:[{status:'ok', legs:[{odds:{decimal:'15.00'}, propositions:[…], redundantPropositions:[{propositionId, status:'redundant'|'valid'}]}]}]} — VERIFIED live 2026-08-28 against AFL Wst Bulldogs v Collingwood: H2H Bulldogs (1.95) + Naughton first goal (11.00) priced 15.00.
THE PRICE IS NOT THE PRODUCT OF THE LEGS. 1.95 x 11.00 is 21.45; TAB returns 15.00, because it applies a correlation adjustment — which is the whole reason to ask rather than multiply. Here it priced DOWN (a Bulldogs win makes a Bulldogs player scoring first likelier); other combinations price up.
REDUNDANT LEGS ARE COLLAPSED, NOT REFUSED. Pick two propositions that imply one another (both sides of a line, say) and TAB drops one, marks it redundant, and prices what is left — so a two-leg request can come back as a one-leg price. ALWAYS check redundantPropositions before reporting: the odds you got may not be the bet you asked for.
Only markets with sameGame: true in tab_match_markets can be combined (52 of 109 on the verified match).
Example: Price a two-leg AFL same game multi {"jurisdiction": "NSW", "bets": [{"type": "FIXED_ODDS", "legs": [{"type": "SAME_GAME_MULTI", "propositions": [{"type": "WIN", "propositionId": 1016}, {"type": "WIN", "propositionId": 8529}]}]}]}
Auth: works without a key; TAB_CLIENT_ID or TAB_CLIENT_SECRET or TAB_REFRESH_TOKEN unlocks more if set.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| bets | Yes | The bet envelope: [{type: 'FIXED_ODDS', legs: [{type: 'SAME_GAME_MULTI', propositions: [{type: 'WIN', propositionId: 1016}, …]}]}]. `propositionId` comes from tab_match_markets — `markets[].propositions[].id`, as an INTEGER. At least two propositions, all from the SAME match. | |
| channel | No | Leave as `web`. | web |
| jurisdiction | Yes | Your state: NSW, VIC, ACT, QLD, SA, NT or TAS. Prices and market availability differ by jurisdiction, so this is not cosmetic. | |
| returnValidationMatrix | No | Keep true: it returns which propositions actually combine, which is the difference between a refusal you understand and one you do not. |