unibet_sgm_price
Price a same-game multi or bet builder by supplying two or more outcome IDs from one Unibet/Kambi event, and receive the correlation-adjusted price plus eligible outcomes.
Instructions
PRICE A SAME GAME MULTI you choose — give it two or more outcome ids from one Unibet/Kambi event and get the correlation-adjusted Bet Builder price, plus the list of outcomes eligible to join it. Prices combinations Unibet has not pre-built (for those, see unibet_kambi_call operation='event_prepack').
Returns: {eventId, selectedOutcomeIds:[…], selectedOdds:{decimal: 3400, american, fractional}, combinableOutcomeIds:[…]} — VERIFIED live 2026-08-27 against AFL Western Bulldogs v Collingwood (event 1028856020), unauthenticated.
ODDS ARE IN THOUSANDTHS. decimal: 3400 MEANS 3.40, not 3400. Kambi does this everywhere — the odds and line on every outcome in the betoffer feed are scaled the same way (1920 = 1.92, line 1500 = +1.5) — and a price reported 1000x too large is the loudest wrong answer available. Divide by 1000.
THE PRICE IS NOT THE PRODUCT OF THE LEGS. Bulldogs head-to-head (1.92) with Over 170.5 (1.88) prices 3.40, against a naive 3.6096.
1001.0 IS A CEILING, NOT A PRICE. Long multis stop moving at decimal: 1001000 — six, eight, ten, twelve and fourteen legs all returned exactly that on the verified event while the naive product kept climbing. Treat 1001.0 as capped, never as a quote and never as an edge.
selectedOutcomeIds IS THE ECHO, AND IT IS WHY THIS IS THE SAFE ONE. Unibet is the only book of the five that says exactly what it priced. Duplicate ids are deduplicated SILENTLY, so compare this list against what you sent before reporting anything.
A SINGLE LEG RETURNS NO PRICE AT ALL — selectedOdds is simply ABSENT rather than an error, and the same happens when duplicates collapse to one leg. A missing key here means not priced, not zero.
combinableOutcomeIds IS ELIGIBILITY, NOT COMPATIBILITY. It lists what can EVER appear in a bet builder on this event — 940 of the event's 1137 outcomes on the verified fixture — and does NOT drop what clashes with your current picks: both the opposite head-to-head side and the line the head-to-head already implies stayed listed, and both then failed with a 400. Its real use is separating a leg that is INELIGIBLE from one that merely CONFLICTS, which the error message does not do.
REFUSALS ARE REAL HTTP STATUS CODES WITH A TYPED BODY — the only book of the five that uses them properly, so no error signal is needed here. Four seen live, and they mean different things: 400 'Combination is not supported by the selected strategy' for legs that clash or imply one another; 400 'Invalid outcomes' with an invalidOutcomes list naming ids that are not BET-BUILDER ELIGIBLE (an ordinary outcome from the betoffer feed can be rejected this way — check it against combinableOutcomeIds first); 409 'Impossible outcome selection', with invalidOutcomes EMPTY, when the combination cannot happen at all (Bulldogs to win with Collingwood by 1-39); and 400 'Unknown event'. The empty list on the 409 is not a bug to route around — the impossibility is in the COMBINATION, so no single id is at fault.
The upstream body also repeats the event's ENTIRE bet-offer book — 626 offers, 647 KB of a 610 KB response — which unibet_kambi_call(operation='event_betoffer') already returns. It is projected away here.
Example: Price Bulldogs to win with over 170.5 points {"eventId": 1028856020, "outcomeIds": "4306981996,4309057043"}
Auth: works without a key; UNIBET_ACCESS_TOKEN unlocks more if set.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Locale. Leave as the default. | en_AU |
| market | No | Market. Leave as AU — Bet Builder availability and pricing are per market. | AU |
| eventId | Yes | Kambi event id, e.g. 1028856020 — from unibet_kambi_call(operation="sport_matches") or any Kambi event feed. Required — part of the URL path. | |
| channel_id | No | Kambi channel. Leave as 1 (web). | 1 |
| outcomeIds | Yes | The legs, as outcome ids joined by COMMAS in one string: "4306981996,4309057043". Ids come from unibet_kambi_call(operation="event_betoffer") — `betOffers[].outcomes[].id` — and all must belong to THIS event. Give two or more: a single id returns the combinable list with NO price. Order does not matter and is not preserved in the echo. Required — part of the URL path. |