Skip to Content

Extended bet details

By default a perform-transaction request identifies a bet only by context.betId. When extended bet details are enabled, the request also carries a context.extras.bet object describing more info about the bet — its type and total odds, and for every item the event, the market and the outcome the player picked, together with their results.

Enabling extras

context.extras is disabled by default and enabled per brand. Ask your GR8 Tech AM/PM to switch it on for your brand.

Nothing changes in your endpoint contract when it is enabled: extras is an additional optional field inside context, and context is already declared with additionalProperties: true. Wallets that ignore unknown context fields keep working unchanged.

When extras are sent

When enabled, extras is added to bet-related transactions — the ones that already carry context.betId.

The object is the same shape throughout the bet lifecycle, with two things that depend on the stage:

FieldBehaviour
bet.acceptTimeSent only on settle-related transactions.
bet.result, sourceOutcomes[].resultUnknown while the bet is still open; the settled result once the bet has been settled.
Warning

Transactions are not performed during placing open bets.

Example

Settle transaction with extended bet details
{ "id": "8b41f0c2-5d7a-4f19-9c3e-2a6d84b1e770_1740486677645468_1", "currency": "EUR", "platform": "sport", "type": "deposit", "createdAt": "2025-02-25T12:31:17Z", "initiatedAt": "2025-02-25T12:31:17Z", "context": { "channel": "DESKTOP_AIR_PM", "product": "sportsbook", "reason": "settle", "betId": "8b41f0c2-5d7a-4f19-9c3e-2a6d84b1e770", "betAmount": 2, "extras": { "bet": { "betType": "Express", "betOdd": 5.8, "acceptTime": "2025-02-25T12:31:15Z", "result": "Win", "items": [ { "itemIndex": 0, "eventStage": "Prematch", "acceptedOdd": 2.9, "event": { "id": "12770432", "eventName": "Bologna - AC Milan", "sportTypeKey": "F", "sportName": "Football", "categoryId": "417acc9050e04117aff67d43981ed5b2", "categoryName": "Italy", "tournamentId": "6d80f3f3fa35431b80d50f516e4ce075", "tournamentName": "Serie A", "startTime": "2025-02-25T19:45:00Z", "competitorType": "Team", "competitors": [ { "id": "339901", "competitorName": "Bologna" }, { "id": "339919", "competitorName": "AC Milan" } ] }, "sourceOutcomes": [ { "sourceOutcomeIndex": 0, "selectionKey": "[2,[],[0],1,0,[]]", "acceptedOdd": 2.9, "result": "Win", "marketName": "Full-time result", "outcomeName": "Bologna" } ] }, { "itemIndex": 1, "eventStage": "Live", "acceptedOdd": 2.0, "event": { "id": "12793846", "eventName": "Inter - Juventus", "sportTypeKey": "F", "sportName": "Football", "categoryId": "417acc9050e04117aff67d43981ed5b2", "categoryName": "Italy", "tournamentId": "6d80f3f3fa35431b80d50f516e4ce075", "tournamentName": "Serie A", "startTime": "2025-02-25T17:00:00Z", "competitorType": "Team", "competitors": [ { "id": "348084", "competitorName": "Inter" }, { "id": "351979", "competitorName": "Juventus" } ] }, "sourceOutcomes": [ { "sourceOutcomeIndex": 0, "selectionKey": "[2,[],[0],1,0,[]]", "acceptedOdd": 2.0, "result": "Win", "marketName": "Full-time result", "outcomeName": "Inter" } ] } ] } } }, "amountBreakdown": { "cash": "11.6", "locked": "0", "bonus": "0", "retract": "0", "tax": { "cash": "0", "locked": "0", "bonus": "0", "retract": "0" } } }

Everything outside context.extras is the ordinary transaction envelope — see perform-transaction for those fields, and Transaction Examples for the other transaction types.

Field reference

extras.bet

FieldTypeRequiredDescription
betTypestringYesOrdinar (single), Express (accumulator) or System
betOddnumberYesTotal odds of the bet — for an express, the product of all item odds
itemsarrayYesThe bet’s items — one per event the player picked. See bet.items[]
resultstringYesResult of the bet as a whole. See Results
acceptTimestringNoBet acceptance time, ISO 8601 in UTC. Sent only on settle-related transactions

bet.items[]

One entry per event in the bet. An Ordinar bet has exactly one item; Express and System bets have several.

An item normally holds a single outcome. If its sourceOutcomes array holds more than one, the item is a bet builder — several outcomes from the same event combined into one selection.

FieldTypeRequiredDescription
itemIndexintegerYesZero-based position of the item within the bet
eventStagestringYesPrematch or Live — the stage at which the item was accepted
acceptedOddnumberYesOdds accepted for this item
eventobjectYesThe event the item is placed on. See items[].event
sourceOutcomesarrayYesOutcomes picked within the item — more than one means a bet builder. See items[].sourceOutcomes[]

items[].event

FieldTypeRequiredDescription
idstringYesEvent identifier
eventNamestringYesEvent name, e.g. Bologna - AC Milan
sportTypeKeystringYesShort sport code — F, TT, H, …
sportNamestringYesSport name, e.g. Football
categoryIdstringYesCategory (country or region) identifier
categoryNamestringYesCategory name, e.g. Italy
tournamentIdstringYesTournament identifier
tournamentNamestringYesTournament name, e.g. Serie A
startTimestringYesEvent start time, ISO 8601 in UTC
competitorTypestringYesKind of competitor, e.g. Team
competitorsarrayYesObjects with id and competitorName, both required

items[].sourceOutcomes[]

FieldTypeRequiredDescription
sourceOutcomeIndexintegerYesZero-based position of the outcome within the item
selectionKeystringYesOpaque outcome identifier used for bet acceptance. Treat it as a string — do not parse it
acceptedOddnumberYesOdds accepted for this outcome
resultstringYesResult of this outcome. See Results
marketNamestringYesMarket name, e.g. Full-time result
outcomeNamestringYesOutcome name, e.g. Bologna

Bet builder

A bet builder combines several outcomes from one event into a single selection, priced as one. In extras it appears as an item whose sourceOutcomes array has more than one entry:

Bet builder item (event omitted)
{ "itemIndex": 0, "eventStage": "Prematch", "acceptedOdd": 5.24, "sourceOutcomes": [ { "sourceOutcomeIndex": 0, "selectionKey": "[2,[],[0],1,0,[]]", "acceptedOdd": 1.73, "result": "Win", "marketName": "Full-time result", "outcomeName": "Bologna" }, { "sourceOutcomeIndex": 1, "selectionKey": "[5,[1.5],[0],1,4,[]]", "acceptedOdd": 2.03, "result": "Win", "marketName": "Total goals", "outcomeName": "Over (1.5)" }, { "sourceOutcomeIndex": 2, "selectionKey": "[8,[],[0],1,0,[]]", "acceptedOdd": 1.65, "result": "Lose", "marketName": "Both teams to score", "outcomeName": "Yes" } ] }

Two things to keep in mind:

  • betType does not tell you. A bet builder is a property of an item, not of the bet, so an Ordinar bet with a single item can still be a bet builder. sourceOutcomes.length > 1 is the only reliable check.
  • The item’s acceptedOdd is not the product of its outcome odds. Bet builder outcomes are correlated and priced together, so the combined odds are calculated rather than multiplied — 5.24 above, where multiplying would give 5.79.

Results

bet.result is the result of the bet as a whole; sourceOutcomes[].result is the result of a single outcome inside it.

ValueMeaning
UnknownNot settled yet
WinWon
LoseLost
ReturnVoided — the stake is returned in full
Return025Asian markets, half loss — half the stake is voided, half loses
Return075Asian markets, half win — half the stake is voided, half wins
TechnicalReturnTechnically voided — the stake is returned in full, as for Return
CashoutThe bet was cashed out before its outcomes were settled. Applies to the bet as a whole
DeadHeatDead heat — a place was shared between several competitors and the odds are reduced accordingly. Single bets only

JSON Schema

context.extras JSON Schema

{ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "description": "The extras object inside the context of a perform-transaction request", "properties": { "bet": { "type": "object", "required": ["betType", "betOdd", "items", "result"], "properties": { "betType": { "type": "string", "enum": ["Ordinar", "Express", "System"] }, "betOdd": { "type": "number" }, "acceptTime": { "type": "string", "format": "date-time", "description": "Bet acceptance time. An ISO 8601 timestamp in UTC, e.g. 2025-02-25T12:31:15Z (this field is present only for settle-related transactions)" }, "items": { "type": "array", "items": { "type": "object", "required": ["itemIndex", "eventStage", "acceptedOdd", "event", "sourceOutcomes"], "properties": { "itemIndex": { "type": "integer" }, "eventStage": { "type": "string", "enum": ["Prematch", "Live"] }, "acceptedOdd": { "type": "number" }, "event": { "type": "object", "required": [ "id", "eventName", "sportTypeKey", "sportName", "categoryId", "categoryName", "tournamentId", "tournamentName", "startTime", "competitorType", "competitors" ], "properties": { "id": { "type": "string" }, "eventName": { "type": "string" }, "sportTypeKey": { "type": "string", "description": "The short 'sportName' ('F', 'TT', 'H'...)" }, "sportName": { "type": "string" }, "categoryId": { "type": "string" }, "categoryName": { "type": "string" }, "tournamentId": { "type": "string" }, "tournamentName": { "type": "string" }, "startTime": { "type": "string", "format": "date-time", "description": "An ISO 8601 timestamp in UTC, e.g. 2025-02-25T12:31:17Z" }, "competitorType": { "type": "string" }, "competitors": { "type": "array", "items": { "type": "object", "required": ["id", "competitorName"], "properties": { "id": { "type": "string" }, "competitorName": { "type": "string" } } } } } }, "sourceOutcomes": { "type": "array", "items": { "type": "object", "required": [ "sourceOutcomeIndex", "selectionKey", "acceptedOdd", "result", "marketName", "outcomeName" ], "properties": { "sourceOutcomeIndex": { "type": "integer" }, "selectionKey": { "type": "string" }, "acceptedOdd": { "type": "number" }, "result": { "type": "string" }, "marketName": { "type": "string" }, "outcomeName": { "type": "string" } } } } } } }, "result": { "type": "string", "enum": [ "Unknown", "Win", "Lose", "Return", "Return025", "Return075", "TechnicalReturn", "Cashout", "DeadHeat" ] } } } } }