> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bayse.markets/llms.txt
> Use this file to discover all available pages before exploring further.

# Sports markets (Soccer)

> Understanding sports market types, prop markets, and how they're linked

## Overview

Sports markets on Bayse for soccer games come in ten types, all linked through the `sportGameSlug` field.

| Value                 | Description                       | Event type | `propTeam`                                 |
| --------------------- | --------------------------------- | ---------- | ------------------------------------------ |
| `TEAM_H2H_3WAY`       | Match winner (home / draw / away) | combined   | Home/away markets; `null` for draw         |
| `BOTH_TEAMS_TO_SCORE` | Did both teams score?             | single     | `null`                                     |
| `FIRST_TEAM_TO_SCORE` | Which team scored first?          | combined   | Home/away markets; `null` for "Neither"    |
| `GOAL_SPREAD`         | Team wins by X+ goals             | grouped    | Populated (the team the spread applies to) |
| `TOTAL_GOALS`         | Total goals by both teams         | grouped    | `null`                                     |
| `TOTAL_GOALS_HOME`    | Total goals by home team          | grouped    | Populated (home team)                      |
| `TOTAL_GOALS_AWAY`    | Total goals by away team          | grouped    | Populated (away team)                      |
| `TOTAL_CORNERS`       | Total corners, full match         | grouped    | `null`                                     |
| `FIRST_HALF_CORNERS`  | Total corners, 1st half           | grouped    | `null`                                     |
| `SECOND_HALF_CORNERS` | Total corners, 2nd half           | grouped    | `null`                                     |

All event types for a single match share the same **`sportGameSlug`**, making it easy to discover related markets:

```bash theme={null}
GET /v1/pm/events?sportGameSlug=bm-game-20260524-mci-avl
# Returns all event types for this match
```

***

## Market types

<AccordionGroup>
  <Accordion title="TEAM_H2H_3WAY — Match winner">
    **Combined event** — only one market resolves YES.

    Three mutually exclusive markets:

    * **Home Win** — The home team wins the match
    * **Away Win** — The away team wins the match
    * **Draw** — The match ends in a draw

    `propTeam` is populated for the home and away markets; `null` for the draw market. No `propLine` or `propDirection`.

    ```json theme={null}
    {
      "id": "event-123",
      "title": "Manchester City vs Aston Villa",
      "sportMarketType": "TEAM_H2H_3WAY",
      "sportGameSlug": "bm-game-20260524-mci-avl",
      "type": "combined",
      "markets": [
        {
          "id": "market-1",
          "title": "Manchester City to Win",
          "outcome1Price": 0.63,
          "propLine": null,
          "propDirection": null,
          "propTeam": { "id": "team-1", "name": "Manchester City FC", "slug": "manchester-city-fc", "league": "England - Premier League", "sport": "SOCCER" }
        },
        {
          "id": "market-2",
          "title": "Draw",
          "outcome1Price": 0.25,
          "propLine": null,
          "propDirection": null,
          "propTeam": null
        },
        {
          "id": "market-3",
          "title": "Aston Villa to Win",
          "outcome1Price": 0.12,
          "propLine": null,
          "propDirection": null,
          "propTeam": { "id": "team-2", "name": "Aston Villa FC", "slug": "aston-villa-fc", "league": "England - Premier League", "sport": "SOCCER" }
        }
      ]
    }
    ```
  </Accordion>

  <Accordion title="BOTH_TEAMS_TO_SCORE — Did both teams score?">
    **Single market event** — one binary market.

    * Resolves **YES** if both teams score at least one goal
    * Resolves **NO** if either team fails to score
    * Covers the first 90 minutes of regular play plus stoppage time

    No `propLine`, `propDirection`, or `propTeam`.

    ```json theme={null}
    {
      "id": "event-124",
      "title": "Manchester City vs Aston Villa — Both Teams to Score",
      "sportMarketType": "BOTH_TEAMS_TO_SCORE",
      "sportGameSlug": "bm-game-20260524-mci-avl",
      "type": "single",
      "markets": [
        {
          "id": "market-10",
          "title": "Both Teams to Score",
          "outcome1Price": 0.65,
          "outcome2Price": 0.35,
          "propLine": null,
          "propDirection": null,
          "propTeam": null
        }
      ]
    }
    ```
  </Accordion>

  <Accordion title="FIRST_TEAM_TO_SCORE — Which team scored first?">
    **Combined event** — only one market resolves YES.

    Three mutually exclusive markets:

    * Home team scores first
    * Away team scores first
    * **Neither** — no goals scored (game ends 0-0)

    `propTeam` is populated for the home and away markets; `null` for "Neither". No `propLine` or `propDirection`.

    ```json theme={null}
    {
      "id": "event-125",
      "title": "Manchester City vs Aston Villa — First Team to Score",
      "sportMarketType": "FIRST_TEAM_TO_SCORE",
      "sportGameSlug": "bm-game-20260524-mci-avl",
      "type": "combined",
      "markets": [
        {
          "id": "market-11",
          "title": "Manchester City",
          "outcome1Price": 0.58,
          "propLine": null,
          "propDirection": null,
          "propTeam": { "id": "team-1", "name": "Manchester City FC", "slug": "manchester-city-fc", "league": "England - Premier League", "sport": "SOCCER" }
        },
        {
          "id": "market-12",
          "title": "Aston Villa",
          "outcome1Price": 0.38,
          "propLine": null,
          "propDirection": null,
          "propTeam": { "id": "team-2", "name": "Aston Villa FC", "slug": "aston-villa-fc", "league": "England - Premier League", "sport": "SOCCER" }
        },
        {
          "id": "market-13",
          "title": "Neither",
          "outcome1Price": 0.04,
          "propLine": null,
          "propDirection": null,
          "propTeam": null
        }
      ]
    }
    ```
  </Accordion>

  <Accordion title="GOAL_SPREAD — Team wins by X+ goals">
    **Grouped event** — markets resolve independently.

    Each market represents a team winning by more than a specific goal margin. Multiple markets can resolve YES.

    * `propLine` — The goal margin threshold (e.g., `1.5`, `2.5`)
    * `propDirection` — `"OVER"`
    * `propTeam` — The team this spread applies to

    ```json theme={null}
    {
      "id": "event-456",
      "title": "Manchester City vs Aston Villa - Goal Spread",
      "sportMarketType": "GOAL_SPREAD",
      "sportGameSlug": "bm-game-20260524-mci-avl",
      "type": "grouped",
      "markets": [
        {
          "id": "market-201",
          "title": "Manchester City wins by over 1.5 Goals",
          "propLine": 1.5,
          "propDirection": "OVER",
          "propTeam": { "id": "team-1", "name": "Manchester City FC", "slug": "manchester-city-fc", "league": "England - Premier League", "sport": "SOCCER" },
          "outcome1Price": 0.58
        },
        {
          "id": "market-202",
          "title": "Manchester City wins by over 2.5 Goals",
          "propLine": 2.5,
          "propDirection": "OVER",
          "propTeam": { "id": "team-1", "name": "Manchester City FC", "slug": "manchester-city-fc", "league": "England - Premier League", "sport": "SOCCER" },
          "outcome1Price": 0.35
        },
        {
          "id": "market-203",
          "title": "Aston Villa wins by over 1.5 Goals",
          "propLine": 1.5,
          "propDirection": "OVER",
          "propTeam": { "id": "team-2", "name": "Aston Villa FC", "slug": "aston-villa-fc", "league": "England - Premier League", "sport": "SOCCER" },
          "outcome1Price": 0.15
        }
      ]
    }
    ```
  </Accordion>

  <Accordion title="TOTAL_GOALS — Total goals by both teams">
    **Grouped event** — markets resolve independently.

    Each market is an over/under on the total goals scored by both teams combined. Covers the first 90 minutes of regular play plus stoppage time.

    * `propLine` — The goal total threshold (e.g., `2.5`, `3.5`)
    * `propDirection` — `"OVER"`
    * `propTeam` — `null`

    ```json theme={null}
    {
      "id": "event-789",
      "title": "Manchester City vs Aston Villa — Total Goals",
      "sportMarketType": "TOTAL_GOALS",
      "sportGameSlug": "bm-game-20260524-mci-avl",
      "type": "grouped",
      "markets": [
        {
          "id": "market-301",
          "title": "Over 1.5 goals",
          "propLine": 1.5,
          "propDirection": "OVER",
          "propTeam": null,
          "outcome1Price": 0.72
        },
        {
          "id": "market-302",
          "title": "Over 2.5 goals",
          "propLine": 2.5,
          "propDirection": "OVER",
          "propTeam": null,
          "outcome1Price": 0.58
        },
        {
          "id": "market-303",
          "title": "Over 3.5 goals",
          "propLine": 3.5,
          "propDirection": "OVER",
          "propTeam": null,
          "outcome1Price": 0.35
        }
      ]
    }
    ```
  </Accordion>

  <Accordion title="TOTAL_GOALS_HOME / TOTAL_GOALS_AWAY — Team total goals">
    **Grouped events** — markets resolve independently.

    * `TOTAL_GOALS_HOME` tracks goals scored by the home team only
    * `TOTAL_GOALS_AWAY` tracks goals scored by the away team only

    Each market has a `propLine` threshold and `propTeam` set to the relevant team. Structure is otherwise identical to `TOTAL_GOALS`.

    ```json theme={null}
    {
      "id": "event-790",
      "title": "Manchester City vs Aston Villa — Manchester City Total Goals",
      "sportMarketType": "TOTAL_GOALS_HOME",
      "sportGameSlug": "bm-game-20260524-mci-avl",
      "type": "grouped",
      "markets": [
        {
          "id": "market-401",
          "title": "1 or more",
          "propLine": 0.5,
          "propDirection": "OVER",
          "propTeam": { "id": "team-1", "name": "Manchester City FC", "slug": "manchester-city-fc", "league": "England - Premier League", "sport": "SOCCER" },
          "outcome1Price": 0.80
        },
        {
          "id": "market-402",
          "title": "2 or more",
          "propLine": 1.5,
          "propDirection": "OVER",
          "propTeam": { "id": "team-1", "name": "Manchester City FC", "slug": "manchester-city-fc", "league": "England - Premier League", "sport": "SOCCER" },
          "outcome1Price": 0.55
        }
      ]
    }
    ```
  </Accordion>

  <Accordion title="TOTAL_CORNERS — Total corners, full match">
    **Grouped event** — markets resolve independently.

    Each market is an over/under on the total corners awarded to both teams across the full match (first half + second half, including stoppage time).

    * `propLine` — The corner total threshold (e.g., `7.5`, `9.5`)
    * `propDirection` — `"OVER"`
    * `propTeam` — `null`

    ```json theme={null}
    {
      "id": "event-850",
      "title": "Manchester City vs Aston Villa — Total Corners",
      "sportMarketType": "TOTAL_CORNERS",
      "sportGameSlug": "bm-game-20260524-mci-avl",
      "type": "grouped",
      "markets": [
        {
          "id": "market-501",
          "title": "8 or more",
          "propLine": 7.5,
          "propDirection": "OVER",
          "propTeam": null,
          "outcome1Price": 0.68
        },
        {
          "id": "market-502",
          "title": "10 or more",
          "propLine": 9.5,
          "propDirection": "OVER",
          "propTeam": null,
          "outcome1Price": 0.45
        }
      ]
    }
    ```
  </Accordion>

  <Accordion title="FIRST_HALF_CORNERS / SECOND_HALF_CORNERS — Half-specific corners">
    **Grouped events** — markets resolve independently.

    * `FIRST_HALF_CORNERS` — corners in the first 45 minutes plus stoppage time
    * `SECOND_HALF_CORNERS` — corners in the second 45 minutes plus stoppage time

    Structure is identical to `TOTAL_CORNERS` but scoped to the relevant half. `propTeam` is always `null`.

    ```json theme={null}
    {
      "id": "event-851",
      "title": "Manchester City vs Aston Villa — 1st Half Corners",
      "sportMarketType": "FIRST_HALF_CORNERS",
      "sportGameSlug": "bm-game-20260524-mci-avl",
      "type": "grouped",
      "markets": [
        {
          "id": "market-601",
          "title": "4 or more",
          "propLine": 3.5,
          "propDirection": "OVER",
          "propTeam": null,
          "outcome1Price": 0.55
        },
        {
          "id": "market-602",
          "title": "6 or more",
          "propLine": 5.5,
          "propDirection": "OVER",
          "propTeam": null,
          "outcome1Price": 0.28
        }
      ]
    }
    ```
  </Accordion>
</AccordionGroup>

***

## Market-level prop fields

Present on markets within goal and corner prop events:

| Field           | Type           | Example      | Notes                                                      |
| --------------- | -------------- | ------------ | ---------------------------------------------------------- |
| `propLine`      | number \| null | `2.5`, `9.5` | The threshold value                                        |
| `propDirection` | string \| null | `"OVER"`     | Direction relative to threshold                            |
| `propTeam`      | object \| null | See below    | Team the market applies to; `null` for match-level markets |

### propTeam object

```json theme={null}
{
  "id": "uuid-string",
  "name": "Manchester City FC",
  "slug": "manchester-city-fc",
  "league": "England - Premier League",
  "sport": "SOCCER"
}
```
