---
title: "Virtual Stadium"
canonical_url: "https://apidocs.sportradar.com/resources/virtual-stadium/docs/web/widgets/virtualStadium/shared/selection-data-structures"
markdown_url: "https://apidocs.sportradar.com/resources/virtual-stadium/docs/web/widgets/virtualStadium/shared/selection-data-structures.md"
last_updated: "2026-09-16T12:32:15Z"
---

# Virtual Stadium

## Data Structures

These structures describe the outcome data returned when a user selects a Flash Bet or Bet Insights outcome in Virtual Stadium. The odds fields are snapshots of what was displayed at click time — re-validate availability and re-price against your platform before adding to the bet slip. See [Handling Selections and Odds](https://apidocs.sportradar.com/resources/virtual-stadium/docs/widgets/tutorials/handling-selections-and-odds.md) for the full integration flow.

When **`forceExternalSelections`** is enabled and external ids are available, payload ids may be bookmaker (external) identifiers and `type` may be `'external'`. Flash Bet sets **`externalEvent.externalId`** from channel **`relatedCompetitions[].clientId`**. See [Flash Bet — External selection IDs](https://apidocs.sportradar.com/resources/virtual-stadium/docs/web/widgets/virtualStadium/features/flashBet.md#external-selection-mapping-forceexternalselections).

### ExternalOutcome Object

The `ExternalOutcome` object contains the data returned when a user selects an outcome in Flash Bet or Bet Insights (via legacy `FlashBetOutcome` / `BetInsightsOutcome` actions).

#### ExternalOutcome Properties

**`externalEvent`** `Event` *required*

Event information including teams, date, and venue. See [Event object](#event-object) for details.

**`externalOutcome`** `Outcome` *required*

The selected outcome data. See [Outcome object](#outcome-object) for details.

**`externalMarket`** `Market` *required*

The market containing the outcome. See [Market object](#market-object) for details.

**`type`** `string` *required*

Selection identifier type: **`'uf'`** or **`'external'`**. Not the `onAction` type string.

***ExternalOutcome Example (Flash Bet with channel clientId):***

```json
{
  "externalEvent": {
    "id": "sr:match:71895968",
    "srEventId": "sr:match:71895968",
    "externalId": "thisIsClientId"
  },
  "externalOutcome": {
    "id": "4",
    "name": "Player A",
    "odds": "6.00",
    "oddsDecimal": 6,
    "status": {
      "isActive": true
    }
  },
  "externalMarket": {
    "id": "202",
    "status": {
      "isActive": true
    },
    "specifier": {
      "value": "setnr=2",
      "displayedValue": "2"
    },
    "name": "2nd set - winner",
    "outcomes": [
      {
        "id": "4",
        "name": "Player A",
        "odds": "6.00",
        "oddsDecimal": 6,
        "status": {
          "isActive": true
        }
      },
      {
        "id": "5",
        "name": "Player B",
        "odds": "1.08",
        "oddsDecimal": 1.08,
        "status": {
          "isActive": true
        }
      }
    ]
  },
  "type": "uf"
}
```

***

### Event Object

Represents a single sporting event (e.g., match, race, or stage).

#### Event Properties

**`id`** `string` *required*

Unique identifier for the event.

**`srEventId`** `string | number` *optional*

Sportradar event identifier.

**`externalId`** `string | number | null` *optional*

Your bookmaker event identifier. For Flash Bet, populated from **`relatedCompetitions[].clientId`** in channel info when configured.

***Event Example:***

```json
{
  "id": "sr:match:12345",
  "srEventId": "sr:match:12345",
  "externalId": null
}
```

***

### Market Object

The `Market` object represents a betting market within individual bets.

#### Market Properties

**`id`** `string | number` *required*

Unique identifier for the market.

**`status`** `object` *optional*

Current status of the market. The available statuses are: `active`, `deactivated` `suspended`, `settled`  or `canceled`.

**`name`** `string` *required*

Display name of the market (e.g., "Match Winner", "Total Goals").

**`visualTypeId`** `string | number` *optional*

The visual type identifier for the market.

**`specifier`** `object` *optional*

Market specifier configuration with value and displayedValue properties.

**`outcomes`** `Outcome[]` *required*

Array of possible outcomes for this market. See [Outcome object](#outcome-object) for details.

**`srMarket`** `object` *optional*

Sportradar market information.

**`odds`** `OddsObject` *optional*

Odds information for the market.

***Market Example:***

```json
{
  "id": "202",
  "status": {
    "status": "active"
  },
  "specifier": {
    "value": "setnr=2",
    "displayedValue": "2"
  },
  "name": "2nd set - winner",
  "outcomes": [
    {
      "id": "4",
      "name": "Player A",
      "odds": "6.00",
      "oddsDecimal": 6,
      "status": {
        "isActive": true
      }
    },
    {
      "id": "5",
      "name": "Player B",
      "odds": "1.08",
      "oddsDecimal": 1.08,
      "status": {
        "isActive": true
      }
    }
  ]
}
```

***

### Outcome Object

The `Outcome` object represents a possible result or selection within a market.

#### Outcome Properties

**`id`** `string | number` *required*

Unique identifier for the outcome.

**`name`** `string` *required*

Display name of the outcome (e.g., "Team A", "Draw", "Under 2.5").

**`odds`** `string | number` *optional*

Odds for this outcome.

**`oddsDecimal`** `number` *optional*

Decimal representation of odds.

**`status`** `object` *optional*

Current status of the outcome.

***Outcome Example:***

```json
{
  "id": "4",
  "name": "Player A",
  "odds": "6.00",
  "oddsDecimal": 6,
  "status": {
    "isActive": true
  }
}
```
