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

# List positions

> Your positions: one per market you have traded, each with its current market, what you hold and what it has earned. A **position** is your net holding in one market. It is `open` while you hold contracts and `closed` once you hold none; a market you re-enter after closing reuses the same position. Only positions with at least one executed order are listed.

Closed positions come first, most recently closed first, then positions that have never closed, newest first. Filter with `status=open` for what you hold now, or `status=closed` for what you have already realized. `offset` and `limit` are echoed only when you send them, and `total` counts every match across pages.

Profit and loss comes in two parts. `realized_pnl` is locked in by contracts you sold or that settled, after fees. Unrealized profit or loss is what the contracts you still hold would earn at today's price: compare `cost_plus_fees` with the value of `quantity` contracts at the market's current price, or use [Get portfolio summary](/predictions/reference/positions/get-portfolio-summary) for the whole portfolio at once. Read dollar amounts from the dollar fields rather than recomputing price times quantity.

When a position's market settles, its payout is recorded as a settlement transaction; for the settlement record, see [List transactions](/predictions/reference/activity/list-transactions).



## OpenAPI

````yaml /predictions/openapi.json get /positions
openapi: 3.1.0
info:
  title: Splash Predictions API
  version: 1.0.0
  description: >-
    Splash prediction markets: leagues, games, game lines, futures and player
    props, and the signed routes to place orders, read your orders, positions
    and transactions, and read your account's fee settings and cash balance. The
    market endpoints need no authentication; the order, position, account and
    balance endpoints are [signed with an API key](/predictions/authentication).
servers:
  - url: https://api.splashsports.com/predictions-service/api
    description: Production
security: []
tags:
  - name: Discover
    description: The home feed.
  - name: Sub-categories
    description: Leagues, their availability and their tabs.
  - name: Markets
    description: Market group listings and single groups.
  - name: Events
    description: One game's markets, shaped for the game page.
  - name: Orders
    description: Place orders and read them. Signed requests.
  - name: Positions
    description: Read your positions. Signed requests.
  - name: Activity
    description: 'Your transaction history: fills and settlement payouts. Signed requests.'
  - name: Account
    description: Your fee settings, maximum trade and cash balance. Signed requests.
paths:
  /positions:
    get:
      tags:
        - Positions
      summary: List positions
      description: >-
        Your positions: one per market you have traded, each with its current
        market, what you hold and what it has earned. A **position** is your net
        holding in one market. It is `open` while you hold contracts and
        `closed` once you hold none; a market you re-enter after closing reuses
        the same position. Only positions with at least one executed order are
        listed.


        Closed positions come first, most recently closed first, then positions
        that have never closed, newest first. Filter with `status=open` for what
        you hold now, or `status=closed` for what you have already realized.
        `offset` and `limit` are echoed only when you send them, and `total`
        counts every match across pages.


        Profit and loss comes in two parts. `realized_pnl` is locked in by
        contracts you sold or that settled, after fees. Unrealized profit or
        loss is what the contracts you still hold would earn at today's price:
        compare `cost_plus_fees` with the value of `quantity` contracts at the
        market's current price, or use [Get portfolio
        summary](/predictions/reference/positions/get-portfolio-summary) for the
        whole portfolio at once. Read dollar amounts from the dollar fields
        rather than recomputing price times quantity.


        When a position's market settles, its payout is recorded as a settlement
        transaction; for the settlement record, see [List
        transactions](/predictions/reference/activity/list-transactions).
      operationId: listPositions
      parameters:
        - name: status
          in: query
          schema:
            type: string
            enum:
              - open
              - closed
          description: >-
            `open` or `closed`. Omit to get both. See [Position
            statuses](/predictions/enums#position-statuses-status-on-a-position).
          example: open
        - name: limit
          in: query
          schema:
            type: integer
            minimum: 1
            maximum: 50
            default: 50
          description: Page size, 1 to 50. Default 50.
          example: 50
        - name: offset
          in: query
          schema:
            type: integer
            minimum: 0
            default: 0
          description: Positions to skip. Default 0.
          example: 0
      responses:
        '200':
          description: A page of your positions.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PositionListResponse'
              examples:
                A closed and an open position:
                  summary: A closed and an open position
                  value:
                    status: success
                    data:
                      - id: pos_6aedec66d4a9e2c7f1b05d38a6e2c9b1
                        market_id: pm_6ae1e3c09e1d4c7a2b5f80e3d6a9c412
                        realized_pnl: 0.58
                        created_at: 1793977446412
                        updated_at: 1794166871236
                        status: closed
                        side: 'yes'
                        price: 0
                        cost: 0
                        quantity: 0
                        order_count: 1
                        market:
                          id: pm_6ae1e3c09e1d4c7a2b5f80e3d6a9c412
                          provider_ticker: aec-nfl-kc-buf-2026-11-08
                          title: Kansas City Chiefs to win the game?
                          sub_category: nfl
                          type: moneyline
                          event_id: 4b1e9c2a-7d3f-4e5a-8b6c-9d0e1f2a3b4c
                          event_start: 1794160800000
                          moneyline_type: two_way
                          team_id: 6680b4e0-5b6c-4bd1-8f6a-0b4f3b7d9a21
                          yes_team_id: 6680b4e0-5b6c-4bd1-8f6a-0b4f3b7d9a21
                          no_team_id: 768c92aa-75ff-4a43-bcc0-f2fe5c1f0a3e
                          price_yes:
                            american: '-144'
                            decimal: 1.69x
                            percentage: 59%
                            price: $0.59
                            numeric_price: 0.59
                          price_no:
                            american: '+138'
                            decimal: 2.38x
                            percentage: 42%
                            price: $0.42
                            numeric_price: 0.42
                          volume: 184532.17
                          liquidity: 9266.25
                          yes_liquidity: 5378.8
                          no_liquidity: 4334.95
                          last_price_yes: 0.585
                          last_price_no: 0.415
                          status: active
                          updated_at: 1793977442118
                          rules: >-
                            This market resolves to "Yes" if the Kansas City
                            Chiefs win their game against the Buffalo Bills
                            scheduled for November 8, 2026. It resolves to "No"
                            if the Buffalo Bills win. If the game ends in a tie,
                            is canceled, or is postponed past November 15, 2026,
                            the market resolves 50-50.
                          market_group_id: pmgm_6ae1e3c0a3f19c0d7e2b4c58e61f9d02
                        cost_plus_fees: 0
                        total_fees: 0.22
                        closed_cost: 5.85
                        closed_cost_plus_fees: 5.97
                        closed_quantity: 10
                        closed_at: 1794166871236
                        closed_price: 0.6
                        total_proceeds: 6.55
                      - id: pos_6aedecf7f6c1b4e9a3d27f50c8e4a1d3
                        market_id: pm_6ae1e3c08d5c2a7e3f9b41e6d2c8a604
                        realized_pnl: 0
                        created_at: 1793977591087
                        updated_at: 1793977591087
                        status: open
                        side: 'no'
                        price: 0.47
                        cost: 9.3
                        quantity: 20
                        order_count: 1
                        market:
                          id: pm_6ae1e3c08d5c2a7e3f9b41e6d2c8a604
                          provider_ticker: tsc-nfl-kc-buf-2026-11-08-47pt5
                          title: 'Chiefs vs. Bills: Total Points O/U 47.5'
                          sub_category: nfl
                          type: total
                          event_id: 4b1e9c2a-7d3f-4e5a-8b6c-9d0e1f2a3b4c
                          event_start: 1794160800000
                          line: 47.5
                          yes_line_display: O 47.5
                          no_line_display: U 47.5
                          price_yes:
                            american: '-117'
                            decimal: 1.85x
                            percentage: 54%
                            price: $0.54
                            numeric_price: 0.54
                          price_no:
                            american: '+113'
                            decimal: 2.13x
                            percentage: 47%
                            price: $0.47
                            numeric_price: 0.47
                          volume: 71455.92
                          liquidity: 4350.3
                          yes_liquidity: 2298.2
                          no_liquidity: 2211.5
                          last_price_yes: 0.535
                          last_price_no: 0.465
                          status: active
                          updated_at: 1793977442118
                          rules: >-
                            This market resolves to "Yes" if the Kansas City
                            Chiefs and Buffalo Bills combine for more than 47.5
                            points in their game on November 8, 2026, overtime
                            included. Otherwise it resolves to "No".
                          market_group_id: pmgm_6ae1e3c0a3f19c0d7e2b4c58e61f9d02
                        cost_plus_fees: 9.49
                        total_fees: 0.19
                        closed_cost: 0
                        closed_cost_plus_fees: 0
                        closed_quantity: 0
                        total_proceeds: 0
                    total: 2
                    included:
                      events:
                        - id: 4b1e9c2a-7d3f-4e5a-8b6c-9d0e1f2a3b4c
                          name: Kansas City Chiefs at Buffalo Bills
                          league: nfl
                          start_date: 1794160800000
                          status: SCHEDULED
                          home:
                            id: 768c92aa-75ff-4a43-bcc0-f2fe5c1f0a3e
                            alias: BUF
                            points: 0
                            record:
                              wins: 6
                              losses: 2
                          away:
                            id: 6680b4e0-5b6c-4bd1-8f6a-0b4f3b7d9a21
                            alias: KC
                            points: 0
                            record:
                              wins: 7
                              losses: 1
                          state:
                            sport: football
                            league: nfl
                            clock: '15:00'
                            quarter: 1
                            phase: pregame
                            weather:
                              condition: Partly Cloudy
                              humidity: 62
                              temp: 41
                              wind_direction: WNW
                              wind_speed: 12
                            weather_icon: cloud
                      teams:
                        - id: 768c92aa-75ff-4a43-bcc0-f2fe5c1f0a3e
                          name: Bills
                          league: nfl
                          alias: BUF
                          market: Buffalo
                          primary_color: '#00338D'
                          secondary_color: '#C60C30'
                          icon_url: >-
                            https://res.cloudinary.com/splashsports/image/upload/v1791500098/static/icons/teams/nfl/buf.png
                          official_logo: false
                        - id: 6680b4e0-5b6c-4bd1-8f6a-0b4f3b7d9a21
                          name: Chiefs
                          league: nfl
                          alias: KC
                          market: Kansas City
                          primary_color: '#E31837'
                          secondary_color: '#FFB81C'
                          icon_url: >-
                            https://res.cloudinary.com/splashsports/image/upload/v1791500102/static/icons/teams/nfl/kc.png
                          official_logo: false
                      entities: []
                      sub_categories:
                        - id: nfl
                          name: NFL
                          icon_url: >-
                            https://res.cloudinary.com/splashsports/image/upload/v1786629706/pro_football.png
                    offset: 0
                    limit: 50
                  description: >-
                    The Chiefs position closed for $0.58; the under is open at
                    20 NO contracts.
        '400':
          $ref: '#/components/responses/TradingBadRequest'
        '401':
          $ref: '#/components/responses/UnauthorizedUserScoped'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
        '503':
          $ref: '#/components/responses/Unavailable'
      security:
        - SplashAccessKey: []
          SplashAccessTimestamp: []
          SplashAccessSignature: []
      x-codeSamples:
        - lang: bash
          label: cURL
          source: >-
            KEY="your-key-id"

            SECRET="your-secret"

            METHOD="GET"

            URLPATH="/predictions-service/api/positions?status=open&limit=50"

            BODY=""


            TS=$(( $(date +%s) * 1000 ))

            SIG=$(printf '%s' "$TS$METHOD$URLPATH$BODY" | openssl dgst -sha256
            -hmac "$SECRET" -binary | base64)


            curl -X "$METHOD" "https://api.splashsports.com$URLPATH" \
              -H "SPLASH-ACCESS-KEY: $KEY" \
              -H "SPLASH-ACCESS-TIMESTAMP: $TS" \
              -H "SPLASH-ACCESS-SIGNATURE: $SIG"
        - lang: python
          label: Python
          source: >-
            import base64, hashlib, hmac, json, time

            import requests


            KEY = "your-key-id"

            SECRET = "your-secret"

            HOST = "https://api.splashsports.com"



            def sign(secret, timestamp, method, path, body):
                message = (timestamp + method + path + body).encode("utf-8")
                digest = hmac.new(secret.encode("utf-8"), message, hashlib.sha256).digest()
                return base64.b64encode(digest).decode("ascii")


            def request(method, path, payload=None):
                body = json.dumps(payload, separators=(",", ":")) if payload is not None else ""
                timestamp = str(int(time.time() * 1000))
                headers = {
                    "Content-Type": "application/json",
                    "SPLASH-ACCESS-KEY": KEY,
                    "SPLASH-ACCESS-TIMESTAMP": timestamp,
                    "SPLASH-ACCESS-SIGNATURE": sign(SECRET, timestamp, method, path, body),
                }
                return requests.request(method, HOST + path, headers=headers, data=body.encode("utf-8"))


            response = request("GET",
            "/predictions-service/api/positions?status=open&limit=50")

            print(response.status_code, response.json())
        - lang: typescript
          label: TypeScript
          source: >-
            import { createHmac } from "node:crypto";


            const KEY = "your-key-id";

            const SECRET = "your-secret";

            const HOST = "https://api.splashsports.com";


            function sign(secret: string, timestamp: string, method: string,
            path: string, body: string): string {
              return createHmac("sha256", secret).update(timestamp + method + path + body, "utf8").digest("base64");
            }


            const method = "GET";

            const path =
            "/predictions-service/api/positions?status=open&limit=50";

            const body = "";

            const timestamp = Date.now().toString();


            const response = await fetch(HOST + path, {
              method,
              headers: {
                "SPLASH-ACCESS-KEY": KEY,
                "SPLASH-ACCESS-TIMESTAMP": timestamp,
                "SPLASH-ACCESS-SIGNATURE": sign(SECRET, timestamp, method, path, body),
              },
            });

            console.log(response.status, await response.json());
        - lang: go
          label: Go
          source: "package main\n\nimport (\n\t\"bytes\"\n\t\"crypto/hmac\"\n\t\"crypto/sha256\"\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"strconv\"\n\t\"time\"\n)\n\nconst (\n\tkey    = \"your-key-id\"\n\tsecret = \"your-secret\"\n\thost   = \"https://api.splashsports.com\"\n)\n\nfunc sign(secret, timestamp, method, path string, body []byte) string {\n\tmac := hmac.New(sha256.New, []byte(secret))\n\tmac.Write([]byte(timestamp + method + path))\n\tmac.Write(body)\n\treturn base64.StdEncoding.EncodeToString(mac.Sum(nil))\n}\n\nfunc main() {\n\tmethod := \"GET\"\n\tpath := \"/predictions-service/api/positions?status=open&limit=50\"\n\n\tvar body []byte // no body: the signature covers the empty string\n\ttimestamp := strconv.FormatInt(time.Now().UnixMilli(), 10)\n\n\treq, err := http.NewRequest(method, host+path, bytes.NewReader(body))\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treq.Header.Set(\"SPLASH-ACCESS-KEY\", key)\n\treq.Header.Set(\"SPLASH-ACCESS-TIMESTAMP\", timestamp)\n\treq.Header.Set(\"SPLASH-ACCESS-SIGNATURE\", sign(secret, timestamp, method, path, body))\n\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer resp.Body.Close()\n\tout, _ := io.ReadAll(resp.Body)\n\tfmt.Println(resp.StatusCode, string(out))\n}"
components:
  schemas:
    PositionListResponse:
      type: object
      title: PositionListResponse
      description: >-
        Positions, newest first. Only positions with at least one executed order
        are returned.
      required:
        - status
        - data
        - total
      properties:
        status:
          type: string
          const: success
          description: Always `success` on a 200.
          example: success
        data:
          type: array
          items:
            $ref: '#/components/schemas/Position'
          description: >-
            Your positions with at least one executed order: closed positions
            first, most recently closed first, then positions that have never
            closed, newest first.
        total:
          type: integer
          description: >-
            Positions matching `status`, across all pages. It can briefly count
            a position whose only order is still pending, which `data` does not
            return.
          example: 2
        included:
          $ref: '#/components/schemas/Included'
          description: >-
            The games, teams, players and leagues the positions' markets
            reference.
        offset:
          type: integer
          description: >-
            The `offset` you sent. Absent when you sent none (the page then
            starts at 0).
          example: 0
        limit:
          type: integer
          description: >-
            The `limit` you sent. Absent when you sent none (the page size is
            then 50).
          example: 50
    Position:
      type: object
      title: Position
      description: >-
        Your holding in one market. Every money field is rounded to cents. Read
        dollar amounts from `cost` and `closed_cost`, not from price times
        quantity: fills land on tenths of a cent.
      required:
        - id
        - market_id
        - realized_pnl
        - created_at
        - updated_at
        - status
        - side
        - price
        - cost
        - quantity
        - order_count
        - market
        - cost_plus_fees
        - total_fees
        - closed_cost
        - closed_cost_plus_fees
        - closed_quantity
        - total_proceeds
      properties:
        id:
          type: string
          description: >-
            The position id (prefix `pos_`). One position per market: a market
            you re-enter after closing reuses it.
          example: pos_6aedec66d4a9e2c7f1b05d38a6e2c9b1
        market_id:
          type: string
          description: The market the position is in.
          example: pm_6ae1e3c09e1d4c7a2b5f80e3d6a9c412
        realized_pnl:
          type: number
          description: >-
            Profit or loss locked in, in dollars after all fees, rounded to
            cents: on contracts sold, proceeds minus cost; once the market
            settles, the payout plus sale proceeds minus every cost and fee.
          example: 0.58
        created_at:
          type: integer
          format: int64
          description: When the position was opened. Epoch milliseconds.
          example: 1793977446412
        updated_at:
          type: integer
          format: int64
          description: When the position last changed. Epoch milliseconds.
          example: 1794166871236
        status:
          $ref: '#/components/schemas/PositionStatus'
          description: >-
            `open` while you hold contracts; `closed` once you hold none. See
            [Position
            statuses](/predictions/enums#position-statuses-status-on-a-position).
          example: closed
        side:
          $ref: '#/components/schemas/OrderSide'
          description: >-
            The side you hold: `yes` or `no`. When nothing is open, the side of
            the first order. See [Order
            sides](/predictions/enums#order-sides-splash_side-and-side).
          example: 'yes'
        price:
          type: number
          description: >-
            Average price paid per open contract including fees, in dollars
            rounded to cents. 0 when nothing is open. Rounded, so it does not
            multiply back out to `cost_plus_fees`; read the dollar fields for
            amounts.
          example: 0.6
        cost:
          type: number
          description: >-
            Cost of the open contracts excluding fees, in dollars rounded to
            cents. 0 when nothing is open.
          example: 5.85
        quantity:
          type: integer
          description: Contracts held now. 0 on a closed position.
          example: 10
        order_count:
          type: integer
          description: >-
            The number of executed buy orders on the position, across every time
            it was opened. Sells are not counted.
          example: 1
        market:
          $ref: '#/components/schemas/Market'
          description: The market as it stands now, with `live_stat` on a player prop.
        cost_plus_fees:
          type: number
          description: '`cost` plus `total_fees`, rounded to cents. 0 when nothing is open.'
          example: 5.97
        total_fees:
          type: number
          description: >-
            Fees on all of the position's executed orders, buys and sells, in
            dollars rounded to cents.
          example: 0.12
        closed_cost:
          type: number
          description: >-
            Cost of the contracts closed out (sold, or settled), excluding fees,
            in dollars rounded to cents.
          example: 5.85
        closed_cost_plus_fees:
          type: number
          description: >-
            `closed_cost` plus the fees paid when those contracts were bought,
            rounded to cents. Fees paid on the sale are not included.
          example: 5.97
        closed_quantity:
          type: integer
          description: Contracts closed out, by sale or settlement.
          example: 10
        closed_at:
          type: integer
          format: int64
          description: >-
            When the position closed. Epoch milliseconds. Absent while it has
            never closed, and cleared when a closed position reopens.
          example: 1794166871236
        closed_price:
          type: number
          description: >-
            Average price per closed contract including the opening fees:
            `closed_cost_plus_fees / closed_quantity`, rounded to cents. Absent
            while nothing has closed.
          example: 0.6
        total_proceeds:
          type: number
          description: >-
            Dollars you received: sale proceeds net of their fees, plus the
            settlement payout once the market settles. Rounded to cents.
          example: 6.55
      example:
        id: pos_6aedec66d4a9e2c7f1b05d38a6e2c9b1
        market_id: pm_6ae1e3c09e1d4c7a2b5f80e3d6a9c412
        realized_pnl: 0
        created_at: 1793977446412
        updated_at: 1793977446412
        status: open
        side: 'yes'
        price: 0.6
        cost: 5.85
        quantity: 10
        order_count: 1
        market:
          id: pm_6ae1e3c09e1d4c7a2b5f80e3d6a9c412
          provider_ticker: aec-nfl-kc-buf-2026-11-08
          title: Kansas City Chiefs to win the game?
          sub_category: nfl
          type: moneyline
          event_id: 4b1e9c2a-7d3f-4e5a-8b6c-9d0e1f2a3b4c
          event_start: 1794160800000
          moneyline_type: two_way
          team_id: 6680b4e0-5b6c-4bd1-8f6a-0b4f3b7d9a21
          yes_team_id: 6680b4e0-5b6c-4bd1-8f6a-0b4f3b7d9a21
          no_team_id: 768c92aa-75ff-4a43-bcc0-f2fe5c1f0a3e
          price_yes:
            american: '-144'
            decimal: 1.69x
            percentage: 59%
            price: $0.59
            numeric_price: 0.59
          price_no:
            american: '+138'
            decimal: 2.38x
            percentage: 42%
            price: $0.42
            numeric_price: 0.42
          volume: 184532.17
          liquidity: 9266.25
          yes_liquidity: 5378.8
          no_liquidity: 4334.95
          last_price_yes: 0.585
          last_price_no: 0.415
          status: active
          updated_at: 1793977442118
          rules: >-
            This market resolves to "Yes" if the Kansas City Chiefs win their
            game against the Buffalo Bills scheduled for November 8, 2026. It
            resolves to "No" if the Buffalo Bills win. If the game ends in a
            tie, is canceled, or is postponed past November 15, 2026, the market
            resolves 50-50.
          market_group_id: pmgm_6ae1e3c0a3f19c0d7e2b4c58e61f9d02
        cost_plus_fees: 5.97
        total_fees: 0.12
        closed_cost: 0
        closed_cost_plus_fees: 0
        closed_quantity: 0
        total_proceeds: 0
    Included:
      type: object
      description: >-
        The resources the primary data references. Resolve `event_id`, `team_id`
        and `entity_id` here.
      required:
        - events
        - teams
        - entities
        - sub_categories
      properties:
        events:
          type: array
          items:
            $ref: '#/components/schemas/Game'
          description: Every game the primary data references.
        teams:
          type: array
          items:
            $ref: '#/components/schemas/Team'
          description: >-
            Every team the primary data references, plus both teams of each
            included game.
        entities:
          type: array
          items:
            $ref: '#/components/schemas/Entity'
          description: >-
            Every player the primary data references. On a `group_by=prop_type`
            response, only the players shown.
        sub_categories:
          type: array
          items:
            $ref: '#/components/schemas/IncludedSubCategory'
          description: >-
            The distinct leagues of the included events, teams and entities,
            ordered by `name`. Identity only: `active` and `filters` come from
            `GET /sub_categories`.
      title: Included
      example:
        events:
          - id: 4b1e9c2a-7d3f-4e5a-8b6c-9d0e1f2a3b4c
            name: Kansas City Chiefs at Buffalo Bills
            league: nfl
            start_date: 1794160800000
            status: SCHEDULED
            home:
              id: 768c92aa-75ff-4a43-bcc0-f2fe5c1f0a3e
              alias: BUF
              points: 0
              record:
                wins: 6
                losses: 2
            away:
              id: 6680b4e0-5b6c-4bd1-8f6a-0b4f3b7d9a21
              alias: KC
              points: 0
              record:
                wins: 7
                losses: 1
            state:
              sport: football
              league: nfl
              clock: '15:00'
              quarter: 1
              phase: pregame
              weather:
                condition: Partly Cloudy
                humidity: 62
                temp: 41
                wind_direction: WNW
                wind_speed: 12
              weather_icon: cloud
        teams:
          - id: 768c92aa-75ff-4a43-bcc0-f2fe5c1f0a3e
            name: Bills
            league: nfl
            alias: BUF
            market: Buffalo
            primary_color: '#00338D'
            secondary_color: '#C60C30'
            icon_url: >-
              https://res.cloudinary.com/splashsports/image/upload/v1791500098/static/icons/teams/nfl/buf.png
            official_logo: false
          - id: 6680b4e0-5b6c-4bd1-8f6a-0b4f3b7d9a21
            name: Chiefs
            league: nfl
            alias: KC
            market: Kansas City
            primary_color: '#E31837'
            secondary_color: '#FFB81C'
            icon_url: >-
              https://res.cloudinary.com/splashsports/image/upload/v1791500102/static/icons/teams/nfl/kc.png
            official_logo: false
        entities:
          - id: 11cad59d-90dd-449c-a839-dddaba4fe16c
            name: Patrick Mahomes
            league: nfl
            current_team_id: 6680b4e0-5b6c-4bd1-8f6a-0b4f3b7d9a21
            player_details:
              league: nfl
              first_name: Patrick
              last_name: Mahomes
              abbreviated_name: P.Mahomes
              status: ACT
              position: QB
              jersey_number: '15'
            icon_url: >-
              https://res.cloudinary.com/splashsports/image/upload/e_tint:100:3a0610:0p:8f0f1f:45p:e31837:72p:eb5a6a:100p/l_static:nfl:jersey_grey_stripe/e_colorize:100,co_rgb:ffb81c/fl_layer_apply/l_static:nfl:jersey_white_stripe/fl_layer_apply/l_text:Saira%20Condensed_820_black:15,co_white/fl_layer_apply,g_center,y_40/c_scale,w_255,dpr_2.0/c_mpad,w_300,h_300,b_transparent,dpr_2.0/e_sharpen:60/v1791500312/static/nfl/jersey.png
        sub_categories:
          - id: nfl
            name: NFL
            icon_url: >-
              https://res.cloudinary.com/splashsports/image/upload/v1786629706/pro_football.png
    TradingError:
      type: object
      title: TradingError
      description: >-
        The error body of the signed order and position routes. Same shape as
        the public `Error`, with the codes those routes can return. Branch on
        `error`; `message` is for people. See
        [Errors](/predictions/trading#errors).
      required:
        - status
        - error
        - message
      properties:
        status:
          type: string
          const: error
          description: Always `error` on an error response.
          example: error
        error:
          type: string
          description: >-
            Machine-readable code; branch on this. A string: the values below
            are the ones these routes return today, and a code not listed here
            should be handled by its HTTP status. See [Trading error
            codes](/predictions/enums#trading-error-codes-error).


            - `BAD_REQUEST` (400): invalid body or query, or an order check
            failed.

            - `NOT_AUTHORIZED` (401): the signature check failed, the request
            had no `SPLASH-ACCESS-KEY` header, or `user_id` was passed to `GET
            /orders`, `GET /orders/{id}`, `GET /positions`, `GET
            /positions/{id}` or `GET /transactions`.

            - `FOBIDDEN` (403): `Not authorized to trade`, the account may not
            trade. `FOBIDDEN` is the literal value the API returns (not
            `FORBIDDEN`); match it exactly.

            - `NOT_FOUND` (404): no such order, position or market on your
            account.

            - `DUPLICATE_REQUEST_ID` (409): another account used this
            `request_id`.

            - `UNSUPPORTED_MEDIA_TYPE` (415): a signed body that is not JSON.

            - `INTERNAL_ERROR` (500): the request could not be handled. On `POST
            /trading/orders` the order was not placed; poll the `request_id`,
            then try again with a new one.

            - `TRADING_API_UNAVAILABLE` (503): the Trading API is not taking
            signed requests; retry later.

            - `EXCHANGE_UNAVAILABLE`, `SERVICE_UNAVAILABLE` (503): the order
            could not be placed right now; retry later with a new `request_id`.
            On `GET /balance`, `SERVICE_UNAVAILABLE` means your balance could
            not be read; retry shortly.


            A `429 Too Many Requests` is the rate limit, not one of these codes;
            see [Rate limits](/predictions/rate-limits). Whether an order's
            `request_id` can be reused after an error: see [Order outcomes and
            retries](/predictions/trading#order-outcomes-and-retries).
          example: FOBIDDEN
        message:
          type: string
          description: >-
            Human-readable detail. For `BAD_REQUEST` and `NOT_AUTHORIZED` it
            names the cause, e.g. `Invalid price` or `Invalid signature`. Do not
            branch on it.
          example: Not authorized to trade
      example:
        status: error
        error: FOBIDDEN
        message: Not authorized to trade
    TooManyRequestsError:
      type: object
      title: TooManyRequestsError
      description: >-
        The body of a `429 Too Many Requests`: more than 10 requests per second
        from your IP address. It is not a `TradingError`; branch on the `429`
        status. See [Rate limits](/predictions/rate-limits).
      required:
        - status
        - error
        - message
      properties:
        status:
          type: string
          const: error
          description: Always `error`.
          example: error
        error:
          type: string
          const: TOO_MANY_REQUESTS
          description: Always `TOO_MANY_REQUESTS` on a rate-limited request.
          example: TOO_MANY_REQUESTS
        message:
          type: string
          description: Human-readable detail. Do not branch on it.
          example: Too many requests, try again later
      example:
        status: error
        error: TOO_MANY_REQUESTS
        message: Too many requests, try again later
    Error:
      type: object
      required:
        - status
        - error
        - message
      properties:
        status:
          type: string
          const: error
          description: Always `error` on an error response.
          example: error
        error:
          type: string
          enum:
            - BAD_REQUEST
            - NOT_FOUND
            - INTERNAL_ERROR
          description: >-
            Machine-readable code; branch on this. `BAD_REQUEST` (400),
            `NOT_FOUND` (404) or `INTERNAL_ERROR` (500). See [Error
            codes](/predictions/enums#error-codes-error).
          example: BAD_REQUEST
        message:
          type: string
          description: >-
            Human-readable detail for logs and people. Wording can change; do
            not branch on it.
          example: Invalid request parameters
      title: Error
      example:
        status: error
        error: BAD_REQUEST
        message: Invalid request parameters
    PositionStatus:
      type: string
      enum:
        - open
        - closed
      title: PositionStatus
      description: >-
        `open` while you hold contracts; `closed` once you hold none. See
        [Position
        statuses](/predictions/enums#position-statuses-status-on-a-position).
      example: open
    OrderSide:
      type: string
      enum:
        - 'yes'
        - 'no'
      title: OrderSide
      description: >-
        Which side of a market's question. See [Order
        sides](/predictions/enums#order-sides-splash_side-and-side).
      example: 'yes'
    Market:
      title: Market
      type: object
      description: >-
        Any market. `type` says which shape it is; each shape has its own page:
        [SpreadMarket](/predictions/types/spread-market),
        [TotalMarket](/predictions/types/total-market),
        [MoneylineMarket](/predictions/types/moneyline-market),
        [FutureTeamChampionMarket](/predictions/types/future-team-champion-market),
        [PlayerPropMarket](/predictions/types/player-prop-market). Fields marked
        with a type are present only on that type.
      required:
        - id
        - provider_ticker
        - title
        - sub_category
        - type
        - price_yes
        - price_no
        - volume
        - liquidity
        - yes_liquidity
        - no_liquidity
        - status
        - updated_at
        - rules
        - market_group_id
        - event_start
        - yes_line_display
        - no_line_display
      properties:
        id:
          type: string
          description: >-
            The market id (prefix `pm_`). This is the instrument you trade, sent
            as `market_id` on `POST /trading/orders`, and the id to follow for
            price updates.
          example: pm_6ae1e3c09e1d4c7a2b5f80e3d6a9c412
        provider_ticker:
          type: string
          description: >-
            The market's ticker on the exchange where it trades, in the
            exchange's own format. It identifies the market on the exchange and
            stays the same for the life of the market, so use it to match this
            market against the exchange's own data; to trade, use `id`. Always
            present.
          example: aec-nfl-kc-buf-2026-11-08
        title:
          type: string
          description: >-
            The exchange provider's title for the market, usually the YES side
            as a question. Display text that can change; never parse it or key
            on it.
          example: Kansas City Chiefs to win the game?
        sub_category:
          $ref: '#/components/schemas/SubCategoryId'
          description: The league. See [Leagues](/predictions/enums#leagues-sub_category).
          example: nfl
        price_yes:
          $ref: '#/components/schemas/MarketPrice'
          description: >-
            What one YES contract costs right now: the best YES ask in the book
            Splash holds, in every display form. A YES contract pays $1 if the
            market resolves YES. `price_yes` and `price_no` are both asks, so
            their `numeric_price` values usually sum to a little more than 1;
            the excess is the spread. Reads 0 when nobody is offering YES, and
            while quotes are suspended during an exchange outage.
        price_no:
          $ref: '#/components/schemas/MarketPrice'
          description: >-
            What one NO contract costs right now: the best NO ask, in every
            display form. A NO contract pays $1 if the market resolves NO. Reads
            0 when nobody is offering NO, and during an exchange outage.
        orderbook:
          $ref: '#/components/schemas/Orderbook'
          description: >-
            Splash's copy of the exchange provider's order book for this market,
            at most ten levels a side. Absent when the book is empty and while
            quotes are suspended during an exchange outage.
        volume:
          type: number
          description: >-
            Dollars traded on the exchange in this market, rounded to cents. It
            refreshes with order book updates rather than on every trade, so it
            can trail the latest trade by a few seconds.
          example: 184532.17
        liquidity:
          type: number
          description: >-
            Dollars resting in the book Splash holds: each bid level's price
            times its quantity, summed over the YES and NO ladders and rounded
            to cents. A floor, since the feed carries at most ten levels a side.
            0 whenever `orderbook` is absent.
          example: 9266.25
        yes_liquidity:
          type: number
          description: >-
            Dollars of YES you could buy right now: the YES ask depth valued at
            the ask prices, rounded to cents. 0 means nobody is offering YES, so
            treat the YES side as closed. It is not a share of `liquidity`;
            buyable depth and resting depth are different measures and do not
            add up.
          example: 5378.8
        no_liquidity:
          type: number
          description: >-
            Dollars of NO you could buy right now: the NO ask depth valued at
            the ask prices, rounded to cents. 0 means nobody is offering NO.
          example: 4334.95
        last_price_yes:
          type: number
          description: >-
            The most recent trade as a YES price per contract, up to 4 decimal
            places. Absent until the market has traded. Refreshes with order
            book updates, like `volume`.
          example: 0.585
        last_price_no:
          type: number
          description: >-
            The same trade as a NO price: `1 - last_price_yes`, up to 4 decimal
            places. Present exactly when `last_price_yes` is.
          example: 0.415
        status:
          $ref: '#/components/schemas/MarketStatus'
          description: >-
            `active` is tradeable. `expired` has stopped trading and has not
            settled. `settled` has resolved and carries `result`. See [Market
            statuses](/predictions/enums#market-statuses-status).
          example: active
        result:
          $ref: '#/components/schemas/MarketResult'
          description: >-
            How the market resolved: `yes`, `no`, or `scalar` (resolved to a
            value rather than a side). Absent until the market settles. See
            [Market results](/predictions/enums#market-results-result).
          example: 'yes'
        updated_at:
          type: integer
          format: int64
          description: >-
            When Splash last refreshed this market, from an order book or status
            update. Epoch milliseconds.
          example: 1793977442118
        rules:
          type: string
          description: >-
            The resolution rules the exchange provider publishes for this
            market, as plain text. They decide `result`.
          example: >-
            This market resolves to "Yes" if the Kansas City Chiefs win their
            game against the Buffalo Bills scheduled for November 8, 2026. It
            resolves to "No" if the Buffalo Bills win. If the game ends in a
            tie, is canceled, or is postponed past November 15, 2026, the market
            resolves 50-50.
        market_group_id:
          type: string
          description: >-
            The market group this market belongs to; `GET
            /prediction_markets/{id}` returns the whole group.
          example: pmgm_6ae1e3c0a3f19c0d7e2b4c58e61f9d02
        type:
          type: string
          enum:
            - spread
            - total
            - moneyline
            - future_team_champion
            - player_prop
          description: >-
            Which shape this market is, and so which fields below are present:
            `spread`, `total`, `moneyline`, `future_team_champion` or
            `player_prop`. See [Market
            types](/predictions/enums#market-types-type-on-a-market).
          example: moneyline
        event_id:
          type: string
          description: >-
            All but `future_team_champion`: the game. Resolve it in
            `included.events`.
          example: 4b1e9c2a-7d3f-4e5a-8b6c-9d0e1f2a3b4c
        event_start:
          type: integer
          format: int64
          description: >-
            Scheduled start of the game, epoch milliseconds. On a future, the
            date the exchange provider gives the title event.
          example: 1794160800000
        line:
          type: number
          description: >-
            Spread, total, and a player prop ladder rung (274.5 for "275+").
            Absent on a moneyline, a future and a pool leg.
          example: 47.5
        yes_line_display:
          type: string
          description: >-
            The YES outcome as display text: `-2.5` (spread), `O 47.5` (total),
            `275+` (prop rung), `Yes` (future, pool leg). Absent on a moneyline.
          example: O 47.5
        no_line_display:
          type: string
          description: >-
            The NO outcome as display text: `+2.5`, `U 47.5`, `Under 275`, `No`.
            Absent on a moneyline.
          example: U 47.5
        team_id:
          type: string
          description: >-
            Spread, moneyline (not a `draw` leg), future and player prop: the
            team the market is about, or the player's team.
          example: 6680b4e0-5b6c-4bd1-8f6a-0b4f3b7d9a21
        yes_team_id:
          type: string
          description: 'Spread, and `two_way` moneyline: the team whose side is YES.'
          example: 6680b4e0-5b6c-4bd1-8f6a-0b4f3b7d9a21
        no_team_id:
          type: string
          description: >-
            Spread, and `two_way` moneyline: the team whose side is NO. Buying
            it is buying NO.
          example: 768c92aa-75ff-4a43-bcc0-f2fe5c1f0a3e
        moneyline_type:
          type: string
          enum:
            - two_way
            - one_way
            - draw
          description: >-
            Moneyline only: `two_way`, `one_way` or `draw`. See [Moneyline
            types](/predictions/enums#moneyline-types-moneyline_type).
          example: two_way
        prop_type:
          $ref: '#/components/schemas/PlayerPropType'
          description: >-
            Player prop only. See [Player prop
            types](/predictions/enums#player-prop-types-prop_type).
          example: passing_yards
        prop_type_display:
          type: string
          description: Player prop only. Heading for `prop_type`, e.g. `Anytime TD`.
          example: Passing Yards
        entity_id:
          type: string
          description: Player prop only. The player; resolve it in `included.entities`.
          example: 11cad59d-90dd-449c-a839-dddaba4fe16c
        live_stat_key:
          type: string
          description: >-
            Player prop only. Present when a live in-game stat streams for this
            prop type; its value is the key to read from the
            `player-activity-{event_id}-{entity_id}` channel payload.
          example: passing_yards
        live_stat:
          type: number
          description: >-
            Player prop only. The current value of `live_stat_key`: 0 until the
            player appears, the final figure once the game is over. Present
            exactly when `live_stat_key` is.
          example: 0
        alternate_lines:
          type: array
          description: >-
            Player prop only. The whole ladder, this market included. Absent
            when there is a single line.
          items:
            $ref: '#/components/schemas/PlayerPropLine'
      example:
        id: pm_6ae1e3c09e1d4c7a2b5f80e3d6a9c412
        provider_ticker: aec-nfl-kc-buf-2026-11-08
        title: Kansas City Chiefs to win the game?
        sub_category: nfl
        type: moneyline
        event_id: 4b1e9c2a-7d3f-4e5a-8b6c-9d0e1f2a3b4c
        event_start: 1794160800000
        moneyline_type: two_way
        team_id: 6680b4e0-5b6c-4bd1-8f6a-0b4f3b7d9a21
        yes_team_id: 6680b4e0-5b6c-4bd1-8f6a-0b4f3b7d9a21
        no_team_id: 768c92aa-75ff-4a43-bcc0-f2fe5c1f0a3e
        price_yes:
          american: '-144'
          decimal: 1.69x
          percentage: 59%
          price: $0.59
          numeric_price: 0.59
        price_no:
          american: '+138'
          decimal: 2.38x
          percentage: 42%
          price: $0.42
          numeric_price: 0.42
        volume: 184532.17
        liquidity: 9266.25
        yes_liquidity: 5378.8
        no_liquidity: 4334.95
        last_price_yes: 0.585
        last_price_no: 0.415
        status: active
        updated_at: 1793977442118
        rules: >-
          This market resolves to "Yes" if the Kansas City Chiefs win their game
          against the Buffalo Bills scheduled for November 8, 2026. It resolves
          to "No" if the Buffalo Bills win. If the game ends in a tie, is
          canceled, or is postponed past November 15, 2026, the market resolves
          50-50.
        market_group_id: pmgm_6ae1e3c0a3f19c0d7e2b4c58e61f9d02
    Game:
      type: object
      description: A game (or a golf tournament) referenced by a market's `event_id`.
      required:
        - id
        - name
        - league
        - start_date
        - status
        - state
      properties:
        id:
          type: string
          description: 'The game id: what a market''s `event_id` refers to.'
          example: 4b1e9c2a-7d3f-4e5a-8b6c-9d0e1f2a3b4c
        name:
          type: string
          description: Display name of the game or tournament.
          example: Kansas City Chiefs at Buffalo Bills
        league:
          $ref: '#/components/schemas/SubCategoryId'
          description: The league. See [Leagues](/predictions/enums#leagues-sub_category).
          example: nfl
        start_date:
          type: integer
          format: int64
          description: Scheduled start, epoch milliseconds.
          example: 1794160800000
        status:
          $ref: '#/components/schemas/GameStatus'
          description: >-
            `SCHEDULED`, `IN_PROGRESS`, `FINISHED`, `FINALIZED` or `CANCELED`.
            See [Game status](/predictions/enums#game-status-status-on-a-game).
          example: SCHEDULED
        home:
          $ref: '#/components/schemas/TeamState'
          description: The home team and its live score. Absent on a golf tournament.
        away:
          $ref: '#/components/schemas/TeamState'
          description: The away team and its live score. Absent on a golf tournament.
        state:
          $ref: '#/components/schemas/GameState'
          description: Live state, shaped by `state.sport`.
      title: Game
      example:
        id: 4b1e9c2a-7d3f-4e5a-8b6c-9d0e1f2a3b4c
        name: Kansas City Chiefs at Buffalo Bills
        league: nfl
        start_date: 1794160800000
        status: SCHEDULED
        home:
          id: 768c92aa-75ff-4a43-bcc0-f2fe5c1f0a3e
          alias: BUF
          points: 0
          record:
            wins: 6
            losses: 2
        away:
          id: 6680b4e0-5b6c-4bd1-8f6a-0b4f3b7d9a21
          alias: KC
          points: 0
          record:
            wins: 7
            losses: 1
        state:
          sport: football
          league: nfl
          clock: '15:00'
          quarter: 1
          phase: pregame
          weather:
            condition: Partly Cloudy
            humidity: 62
            temp: 41
            wind_direction: WNW
            wind_speed: 12
          weather_icon: cloud
    Team:
      type: object
      required:
        - id
        - name
        - league
        - alias
        - market
        - official_logo
      properties:
        id:
          type: string
          description: >-
            The team id, as `team_id`, `yes_team_id` and `no_team_id` refer to
            it.
          example: 6680b4e0-5b6c-4bd1-8f6a-0b4f3b7d9a21
        name:
          type: string
          example: Chiefs
          description: The team name without its city, e.g. `Chiefs`.
        league:
          $ref: '#/components/schemas/SubCategoryId'
          description: The league. See [Leagues](/predictions/enums#leagues-sub_category).
          example: nfl
        alias:
          type: string
          example: KC
          description: Team abbreviation, upper case.
        market:
          type: string
          example: Kansas City
          description: The team's city or region, e.g. `Kansas City`.
        primary_color:
          type: string
          description: >-
            The team's primary color as a hex string. Absent when the game feed
            has none.
          example: '#E31837'
        secondary_color:
          type: string
          description: >-
            The team's secondary color as a hex string. Absent when the game
            feed has none.
          example: '#FFB81C'
        icon_url:
          type: string
          format: uri
          description: >-
            The team's icon on Cloudinary, falling back to the league's default
            icon. The URL is version-pinned, so it is safe to cache
            indefinitely. Absent when neither icon exists.
          example: >-
            https://res.cloudinary.com/splashsports/image/upload/v1791500102/static/icons/teams/nfl/kc.png
        official_logo:
          type: boolean
          description: >-
            `true` when `icon_url` is the league's official logo (NHL, MLB, NBA,
            WNBA, EPL, MLS), `false` when Splash drew it (NFL and NCAAF helmets,
            NCAAB crests). A drawn icon faces one way, so mirror the away team's
            icon in a matchup; never mirror an official logo. Always present.
          example: false
      title: Team
      description: A team referenced by a market or a game.
      example:
        id: 6680b4e0-5b6c-4bd1-8f6a-0b4f3b7d9a21
        name: Chiefs
        league: nfl
        alias: KC
        market: Kansas City
        primary_color: '#E31837'
        secondary_color: '#FFB81C'
        icon_url: >-
          https://res.cloudinary.com/splashsports/image/upload/v1791500102/static/icons/teams/nfl/kc.png
        official_logo: false
    Entity:
      type: object
      description: A player referenced by a market's `entity_id`.
      required:
        - id
        - name
        - league
        - player_details
      properties:
        id:
          type: string
          description: The player id, as a market's `entity_id` refers to it.
          example: 11cad59d-90dd-449c-a839-dddaba4fe16c
        name:
          type: string
          description: The player's full name.
          example: Patrick Mahomes
        league:
          $ref: '#/components/schemas/SubCategoryId'
          description: The league. See [Leagues](/predictions/enums#leagues-sub_category).
          example: nfl
        current_team_id:
          type: string
          description: The player's current team. Absent for PGA.
          example: 6680b4e0-5b6c-4bd1-8f6a-0b4f3b7d9a21
        player_details:
          $ref: '#/components/schemas/PlayerDetails'
          description: Biographical details, and season statistics in MLB.
        icon_url:
          type: string
          format: uri
          description: >-
            Team sports: the player's jersey in their current team's colors with
            their number (no number in MLB), rendered by Cloudinary.
            Version-pinned and safe to cache. Absent for PGA.
          example: >-
            https://res.cloudinary.com/splashsports/image/upload/e_tint:100:3a0610:0p:8f0f1f:45p:e31837:72p:eb5a6a:100p/l_static:nfl:jersey_grey_stripe/e_colorize:100,co_rgb:ffb81c/fl_layer_apply/l_static:nfl:jersey_white_stripe/fl_layer_apply/l_text:Saira%20Condensed_820_black:15,co_white/fl_layer_apply,g_center,y_40/c_scale,w_255,dpr_2.0/c_mpad,w_300,h_300,b_transparent,dpr_2.0/e_sharpen:60/v1791500312/static/nfl/jersey.png
      title: Entity
      example:
        id: 11cad59d-90dd-449c-a839-dddaba4fe16c
        name: Patrick Mahomes
        league: nfl
        current_team_id: 6680b4e0-5b6c-4bd1-8f6a-0b4f3b7d9a21
        player_details:
          league: nfl
          first_name: Patrick
          last_name: Mahomes
          abbreviated_name: P.Mahomes
          status: ACT
          position: QB
          jersey_number: '15'
        icon_url: >-
          https://res.cloudinary.com/splashsports/image/upload/e_tint:100:3a0610:0p:8f0f1f:45p:e31837:72p:eb5a6a:100p/l_static:nfl:jersey_grey_stripe/e_colorize:100,co_rgb:ffb81c/fl_layer_apply/l_static:nfl:jersey_white_stripe/fl_layer_apply/l_text:Saira%20Condensed_820_black:15,co_white/fl_layer_apply,g_center,y_40/c_scale,w_255,dpr_2.0/c_mpad,w_300,h_300,b_transparent,dpr_2.0/e_sharpen:60/v1791500312/static/nfl/jersey.png
    IncludedSubCategory:
      type: object
      description: >-
        A league referenced by an `included` block. Identity only: `active` and
        `filters` describe what is tradeable service-wide, which a list derived
        from one response's resources cannot speak to. Those come from `GET
        /sub_categories`.
      required:
        - id
        - name
        - icon_url
      properties:
        id:
          $ref: '#/components/schemas/SubCategoryId'
          description: >-
            The league id. See
            [Leagues](/predictions/enums#leagues-sub_category).
          example: nfl
        name:
          type: string
          description: The league's display-ready label.
          example: NFL
        icon_url:
          type: string
          format: uri
          description: The league's icon.
          example: >-
            https://res.cloudinary.com/splashsports/image/upload/v1786629706/pro_football.png
      title: IncludedSubCategory
      example:
        id: nfl
        name: NFL
        icon_url: >-
          https://res.cloudinary.com/splashsports/image/upload/v1786629706/pro_football.png
    SubCategoryId:
      type: string
      description: >-
        A league id. `pga` and `wc` appear in responses but are not accepted by
        `?sub_category=`. See
        [Leagues](/predictions/enums#leagues-sub_category).
      enum:
        - nfl
        - ncaaf
        - nba
        - wnba
        - ncaab
        - mlb
        - nhl
        - epl
        - mls
        - pga
        - wc
      title: SubCategoryId
      example: nfl
    MarketPrice:
      type: object
      description: >-
        One side's price in every display form. `numeric_price` is the price per
        contract in dollars, between 0 and 0.99; the strings are ready to
        render.
      required:
        - american
        - decimal
        - percentage
        - price
        - numeric_price
      properties:
        american:
          type: string
          description: >-
            American odds for the price, rounded to a whole number, with a sign:
            `-144` for a favourite, `+138` for an underdog. `-10000` when the
            price is 0.
          example: '-144'
        decimal:
          type: string
          description: >-
            Decimal odds, `1 / numeric_price` to 2 places, with an `x` suffix:
            `1.69x`. `0x` when the price is 0.
          example: 1.69x
        percentage:
          type: string
          description: >-
            The implied probability, `numeric_price` as a whole percentage:
            `59%`.
          example: 59%
        price:
          type: string
          description: >-
            The per-contract price in dollars, rounded to cents and formatted
            with a dollar sign: `$0.59`.
          example: $0.59
        numeric_price:
          type: number
          description: >-
            The per-contract price in dollars as a number, up to 4 decimal
            places (the exchange quotes in tenths of a cent), capped at 0.99. 0
            when nobody is offering this side. Use this field for arithmetic;
            the strings are for display.
          example: 0.59
      title: MarketPrice
      example:
        american: '-144'
        decimal: 1.69x
        percentage: 59%
        price: $0.59
        numeric_price: 0.59
    Orderbook:
      type: object
      description: >-
        Splash's copy of the exchange provider's order book for one market, at
        most ten levels a side. Present on list and single-group responses alike
        whenever the book is not empty; absent during an exchange outage. Bids
        are what holders will pay; asks, derived from the opposite side's bids,
        are what you can buy at.
      required:
        - bids
        - asks
      properties:
        bids:
          $ref: '#/components/schemas/OrderbookSide'
          description: >-
            Bids: the YES bids and the NO bids, each ordered by price ascending,
            so the best bid is last.
        asks:
          $ref: '#/components/schemas/OrderbookSide'
          description: >-
            Asks: what you can buy at. Each YES ask is the complement of a NO
            bid (a NO bid at 0.41 is a YES ask at 0.59) and each NO ask the
            complement of a YES bid, ordered by price ascending, so the best ask
            is first.
      title: Orderbook
      example:
        bids:
          'yes':
            - q: 4210
              p: 0.56
            - q: 3185
              p: 0.57
            - q: 2650
              p: 0.58
          'no':
            - q: 3920
              p: 0.39
            - q: 2875
              p: 0.4
            - q: 2140
              p: 0.41
        asks:
          'yes':
            - q: 2140
              p: 0.59
            - q: 2875
              p: 0.6
            - q: 3920
              p: 0.61
          'no':
            - q: 2650
              p: 0.42
            - q: 3185
              p: 0.43
            - q: 4210
              p: 0.44
    MarketStatus:
      type: string
      description: >-
        `active` is tradeable. `expired` closed without settling. `settled` has
        a `result`.
      enum:
        - active
        - expired
        - settled
      title: MarketStatus
      example: active
    MarketResult:
      type: string
      description: >-
        How a settled market resolved: `yes`, `no`, or `scalar` (resolved to a
        value rather than a side). Present once a market settles.
      enum:
        - 'yes'
        - 'no'
        - scalar
      title: MarketResult
      example: 'yes'
    PlayerPropType:
      type: string
      description: >-
        A player prop category. Full table with display titles and which are
        ladders or pools: [Player prop
        types](/predictions/enums#player-prop-types-prop_type).
      enum:
        - touchdowns
        - receiving_yards
        - receptions
        - rushing_yards
        - passing_yards
        - first_touchdown
        - team_first_touchdown
        - passing_touchdowns
        - fantasy_points_ppr
        - passing_completions
        - passing_attempts
        - rushing_attempts
        - scrimmage_yards
        - longest_reception
        - interceptions_thrown
        - most_passing_yards
        - points
        - rebounds
        - assists
        - points_rebounds_assists
        - three_points_made
        - steals
        - blocks
        - double_double
        - goals
        - goals_plus_assists
        - first_goal
        - hits
        - total_bases
        - hits_runs_rbis
        - home_runs
        - rbis
        - stolen_bases
        - strikeouts
        - outs
        - earned_runs_allowed
        - hits_allowed
        - walks_allowed
      title: PlayerPropType
      example: passing_yards
    PlayerPropLine:
      type: object
      description: One rung of a ladder as the line picker shows it.
      required:
        - id
        - provider_ticker
        - yes_line_display
        - no_line_display
        - price_yes
        - price_no
        - yes_liquidity
        - no_liquidity
        - status
        - rules
      properties:
        id:
          type: string
          description: >-
            The market id of this rung: the `market_id` to trade and the id to
            follow for price updates.
          example: pm_6aec4c985f2b7d0e6a3c81b4c9d5e159
        provider_ticker:
          type: string
          description: >-
            The ticker of this line's market on the exchange where it trades, in
            the exchange's own format. Each line is its own market, so this
            identifies the line on the exchange and stays the same for the life
            of the market; use it to match the line against the exchange's own
            data, and `id` to trade it. The line the market leads with has the
            same `id` and ticker as the market. Always present.
          example: astatc-nfl-kc-buf-2026-11-08-passyds-patmah-gte300
        line:
          type: number
          description: 'The half-point strike: 299.5 for "300+". Absent on a pool leg.'
          example: 299.5
        yes_line_display:
          type: string
          description: The YES outcome as display text, e.g. `300+`.
          example: 300+
        no_line_display:
          type: string
          description: The NO outcome as display text, e.g. `Under 300`.
          example: Under 300
        price_yes:
          $ref: '#/components/schemas/MarketPrice'
          description: Best YES ask for this rung, in every display form.
        price_no:
          $ref: '#/components/schemas/MarketPrice'
          description: Best NO ask for this rung, in every display form.
        last_price_yes:
          type: number
          description: >-
            Last trade on this rung as a YES price, up to 4 decimal places.
            Absent until it has traded.
          example: 0.285
        last_price_no:
          type: number
          description: '`1 - last_price_yes`. Present exactly when `last_price_yes` is.'
          example: 0.715
        yes_liquidity:
          type: number
          description: >-
            Dollars of YES buyable on this rung right now, rounded to cents. 0
            means no YES offers.
          example: 529.1
        no_liquidity:
          type: number
          description: >-
            Dollars of NO buyable on this rung right now, rounded to cents. 0
            means no NO offers.
          example: 874
        status:
          $ref: '#/components/schemas/MarketStatus'
          description: >-
            The rung's market status. See [Market
            statuses](/predictions/enums#market-statuses-status).
          example: active
        result:
          $ref: '#/components/schemas/MarketResult'
          description: How the rung resolved. Absent until it settles.
          example: 'no'
        rules:
          type: string
          description: This rung's own resolution rules from the exchange provider.
          example: >-
            This market resolves to "Yes" if Patrick Mahomes records 300+
            passing yards in the Kansas City Chiefs vs. Buffalo Bills game on
            November 8, 2026. If he does not play, it resolves to "No".
      title: PlayerPropLine
      example:
        id: pm_6aec4c985f2b7d0e6a3c81b4c9d5e159
        provider_ticker: astatc-nfl-kc-buf-2026-11-08-passyds-patmah-gte300
        line: 299.5
        yes_line_display: 300+
        no_line_display: Under 300
        price_yes:
          american: '+245'
          decimal: 3.45x
          percentage: 29%
          price: $0.29
          numeric_price: 0.29
        price_no:
          american: '-257'
          decimal: 1.39x
          percentage: 72%
          price: $0.72
          numeric_price: 0.72
        last_price_yes: 0.285
        last_price_no: 0.715
        yes_liquidity: 328.8
        no_liquidity: 835
        status: active
        rules: >-
          This market resolves to "Yes" if Patrick Mahomes records 300+ passing
          yards in the Kansas City Chiefs vs. Buffalo Bills game on November 8,
          2026. If he does not play, it resolves to "No".
    GameStatus:
      type: string
      enum:
        - SCHEDULED
        - IN_PROGRESS
        - FINISHED
        - FINALIZED
        - CANCELED
      title: GameStatus
      description: >-
        A game's status. See [Game
        status](/predictions/enums#game-status-status-on-a-game).
      example: SCHEDULED
    TeamState:
      type: object
      description: One side of a game. Which optional fields appear depends on the sport.
      required:
        - id
        - alias
      properties:
        id:
          type: string
          description: The team. Resolve it in `included.teams`.
          example: 768c92aa-75ff-4a43-bcc0-f2fe5c1f0a3e
        alias:
          type: string
          example: BUF
          description: Team abbreviation, upper case.
        points:
          type: integer
          description: The team's score. Absent on an MLB game, which reports `runs`.
          example: 0
        primary_color:
          type: string
          description: >-
            MLB games only: the team's primary color as a hex string. Other
            leagues' games currently carry it under `primaryColor`; read colors
            from `included.teams[].primary_color` instead.
          example: '#00338D'
        runs:
          type: integer
          description: 'Baseball: runs scored.'
          example: 3
        hits:
          type: integer
          description: 'Baseball: hits. MLB games do not currently carry it.'
          example: 7
        errors:
          type: integer
          description: 'Baseball: errors. MLB games do not currently carry it.'
          example: 0
        record:
          $ref: '#/components/schemas/TeamRecord'
          description: The team's season record, when the game feed has one.
      title: TeamState
      example:
        id: 768c92aa-75ff-4a43-bcc0-f2fe5c1f0a3e
        alias: BUF
        points: 0
        record:
          wins: 6
          losses: 2
    GameState:
      type: object
      description: >-
        Live state, shaped by `sport`. Football and basketball carry `clock`,
        `quarter` (or `half` for NCAAB) and `phase`; hockey `period`, `clock`
        and `phase` (`shootout` included); baseball the count, `current_inning`
        and `current_inning_phase`; soccer `home_score`, `away_score`,
        `match_status` and `clock`; golf `rounds`.
      required:
        - sport
        - league
      properties:
        sport:
          type: string
          enum:
            - basketball
            - football
            - hockey
            - baseball
            - golf
            - soccer
          description: >-
            The sport, which decides the fields below: `football`, `basketball`,
            `hockey`, `baseball`, `soccer` or `golf`.
          example: football
        league:
          $ref: '#/components/schemas/SubCategoryId'
          description: The league. See [Leagues](/predictions/enums#leagues-sub_category).
          example: nfl
        clock:
          type: string
          description: >-
            Football, basketball, hockey and soccer: the game clock as display
            text.
          example: '15:00'
        phase:
          type: string
          enum:
            - pregame
            - regulation
            - overtime
            - shootout
          description: >-
            Football, basketball and hockey: `pregame`, `regulation`,
            `overtime`, or for hockey `shootout`. See [Game
            phase](/predictions/enums#game-phase-state-phase).
          example: pregame
        quarter:
          type: integer
          description: 'Football and NBA/WNBA: the current quarter.'
          example: 1
        half:
          type: integer
          description: 'NCAAB only: the current half.'
          example: 2
        period:
          type: integer
          description: 'Hockey: the current period. Above 3 is overtime.'
          example: 3
        balls:
          type: integer
          description: 'Baseball: balls in the count.'
          example: 2
        strikes:
          type: integer
          description: 'Baseball: strikes in the count.'
          example: 1
        outs:
          type: integer
          description: 'Baseball: outs in the half-inning.'
          example: 1
        current_inning:
          type: integer
          description: 'Baseball: the inning in progress.'
          example: 6
        current_inning_phase:
          type: string
          enum:
            - top
            - bottom
          description: 'Baseball: `top` or `bottom` of `current_inning`.'
          example: bottom
        last_inning:
          type: integer
          description: 'Baseball: the last inning played.'
          example: 5
        last_inning_phase:
          type: string
          enum:
            - top
            - bottom
          description: 'Baseball: `top` or `bottom` of `last_inning`.'
          example: bottom
        double_header:
          type: boolean
          description: 'Baseball: whether the game is part of a doubleheader.'
          example: false
        game_number:
          type: integer
          description: 'Baseball: 1, or 2 for the second game of a doubleheader.'
          example: 1
        home_score:
          type: integer
          description: 'Soccer: home team goals.'
          example: 1
        away_score:
          type: integer
          description: 'Soccer: away team goals.'
          example: 0
        match_status:
          type: string
          enum:
            - not_started
            - 1st_half
            - 2nd_half
            - 1st_extra
            - 2nd_extra
            - penalties
            - interrupted
            - halftime
            - extra_time_halftime
            - ended
          description: >-
            Soccer: the match status. See [Soccer match
            status](/predictions/enums#soccer-match-status-state-match_status).
          example: 2nd_half
        home_penalties:
          type: integer
          description: >-
            Soccer: home team goals in a penalty shootout. Absent unless there
            is one.
          example: 4
        away_penalties:
          type: integer
          description: >-
            Soccer: away team goals in a penalty shootout. Absent unless there
            is one.
          example: 3
        rounds:
          type: array
          description: 'Golf only: the tournament rounds and their status.'
          items:
            $ref: '#/components/schemas/GolfRound'
        weather:
          $ref: '#/components/schemas/Weather'
          description: Conditions at the venue, when the game feed has them.
        weather_icon:
          type: string
          enum:
            - rain
            - snow
            - wind
            - cloud
            - night
            - indoor
            - clear
            - unknown
          description: >-
            An icon key for the conditions, when the game feed has them: `rain`,
            `snow`, `wind`, `cloud`, `night`, `indoor`, `clear` or `unknown`.
          example: cloud
      title: GameState
      example:
        sport: football
        league: nfl
        clock: '15:00'
        quarter: 1
        phase: pregame
        weather:
          condition: Partly Cloudy
          humidity: 62
          temp: 41
          wind_direction: WNW
          wind_speed: 12
        weather_icon: cloud
    PlayerDetails:
      type: object
      required:
        - league
        - first_name
        - last_name
        - abbreviated_name
        - status
      properties:
        league:
          $ref: '#/components/schemas/SubCategoryId'
          description: The league. See [Leagues](/predictions/enums#leagues-sub_category).
          example: nfl
        first_name:
          type: string
          description: The player's first name.
          example: Patrick
        last_name:
          type: string
          description: The player's last name.
          example: Mahomes
        abbreviated_name:
          type: string
          description: Short display name, as the game feed abbreviates it.
          example: P.Mahomes
        status:
          type: string
          description: The player's roster status code as the game feed reports it.
          example: ACT
        position:
          type: string
          description: 'Team sports only: position abbreviation.'
          example: QB
        jersey_number:
          type: string
          description: 'Team sports only: jersey number, as a string.'
          example: '15'
        throw_hand:
          type: string
          enum:
            - L
            - R
          description: 'MLB only: `L` or `R`.'
          example: R
        bat_hand:
          type: string
          enum:
            - L
            - R
            - B
          description: 'MLB only: `L`, `R`, or `B` for a switch hitter.'
          example: R
        statistics:
          $ref: '#/components/schemas/MLBSeasonStatistics'
          description: 'MLB only: season statistics.'
        splits:
          $ref: '#/components/schemas/MLBPlayerSplits'
          description: 'MLB only: hitting splits by opposing pitcher hand.'
        country:
          type: string
          description: 'PGA only: country name.'
          example: United States
        country_abb:
          type: string
          description: 'PGA only: country abbreviation.'
          example: USA
        amateur:
          type: boolean
          description: 'PGA only: whether the player is an amateur.'
          example: false
      title: PlayerDetails
      description: A player's details. Which optional fields appear depends on the league.
      example:
        league: nfl
        first_name: Patrick
        last_name: Mahomes
        abbreviated_name: P.Mahomes
        status: ACT
        position: QB
        jersey_number: '15'
    OrderbookSide:
      title: OrderbookSide
      type: object
      description: The YES and NO levels on one side of the book.
      required:
        - 'yes'
        - 'no'
      properties:
        'yes':
          type: array
          items:
            $ref: '#/components/schemas/PriceLevel'
          description: Levels for the YES contract, price ascending.
        'no':
          type: array
          items:
            $ref: '#/components/schemas/PriceLevel'
          description: Levels for the NO contract, price ascending.
      example:
        'yes':
          - q: 4210
            p: 0.56
          - q: 3185
            p: 0.57
          - q: 2650
            p: 0.58
        'no':
          - q: 3920
            p: 0.39
          - q: 2875
            p: 0.4
          - q: 2140
            p: 0.41
    TeamRecord:
      title: TeamRecord
      type: object
      required:
        - wins
        - losses
      properties:
        wins:
          type: integer
          description: Wins this season.
          example: 7
        losses:
          type: integer
          description: Losses this season.
          example: 1
        ties:
          type: integer
          description: Ties this season. Only in leagues that can tie.
          example: 0
      description: A team's season record.
      example:
        wins: 7
        losses: 1
    GolfRound:
      title: GolfRound
      type: object
      description: One round of a golf tournament.
      required:
        - number
        - status
      properties:
        number:
          type: integer
          description: Round number, from 1.
          example: 2
        status:
          $ref: '#/components/schemas/GameStatus'
          description: The round's status, with the same values as a game's `status`.
          example: IN_PROGRESS
      example:
        number: 2
        status: IN_PROGRESS
    Weather:
      type: object
      required:
        - condition
      properties:
        condition:
          type: string
          description: Conditions at the venue as the game data feed describes them.
          example: Partly Cloudy
        humidity:
          type: number
          description: Relative humidity, percent.
          example: 62
        temp:
          type: number
          description: Temperature at the venue as the game data feed reports it.
          example: 41
        wind_direction:
          type: string
          description: Wind direction as the game data feed reports it.
          example: WNW
        wind_speed:
          type: number
          description: Wind speed as the game data feed reports it.
          example: 12
      title: Weather
      description: Conditions at the venue, from the game data feed.
      example:
        condition: Partly Cloudy
        humidity: 62
        temp: 41
        wind_direction: WNW
        wind_speed: 12
    MLBSeasonStatistics:
      title: MLBSeasonStatistics
      type: object
      description: >-
        A player's season statistics. A hitter carries `hitting`, a pitcher
        `pitching`, a two-way player both.
      properties:
        hitting:
          $ref: '#/components/schemas/MLBSeasonHittingStatistics'
          description: Season hitting. Present for a hitter, and for a two-way player.
        pitching:
          $ref: '#/components/schemas/MLBSeasonPitchingStatistics'
          description: Season pitching. Present for a pitcher, and for a two-way player.
      example:
        hitting:
          at_bats_per_game: 3.62
          hits_per_game: 1.07
          runs_per_game: 0.85
          rbi_per_game: 0.9
          total_bases_per_game: 2.24
          home_runs_per_game: 0.33
          total_strikeouts_per_game: 1.04
          stolen_bases_per_game: 0.06
          at_bats: 543
          hits: 160
          walks: 112
          home_runs: 50
          runs: 128
          rbi: 135
          stolen_bases: 9
          doubles: 26
          games_played: 150
          games_started: 148
          grounded_into_double_play: 14
          hit_by_pitch: 6
          intentional_walks: 18
          plate_appearances: 671
          reached_on_error: 3
          sacrifice_flys: 7
          singles: 82
          slugging_percentage: 0.637
          total_bases: 336
          total_strikeouts: 156
          triples: 2
          on_base_plus_slugging_percentage: 1.071
          on_base_percentage: 0.434
          batting_average: '.295'
    MLBPlayerSplits:
      title: MLBPlayerSplits
      type: object
      description: Hitting splits by opposing pitcher hand.
      properties:
        hitting:
          $ref: '#/components/schemas/MLBPlayerHittingSplits'
          description: Hitting splits. Present for a hitter.
      example:
        hitting:
          pitching_hand:
            - value: L
              at_bats: 131
              hits: 41
              walks: 31
              home_runs: 13
              runs: 33
              rbi: 36
              stolen_bases: 2
              doubles: 7
              hit_by_pitch: 2
              intentional_walks: 5
              singles: 21
              slugging_percentage: 0.672
              total_strikeouts: 35
              triples: 0
              on_base_plus_slugging_percentage: 1.122
              on_base_percentage: 0.45
              batting_average: '.313'
            - value: R
              at_bats: 412
              hits: 119
              walks: 81
              home_runs: 37
              runs: 95
              rbi: 99
              stolen_bases: 2
              doubles: 19
              hit_by_pitch: 2
              intentional_walks: 5
              singles: 61
              slugging_percentage: 0.626
              total_strikeouts: 121
              triples: 2
              on_base_plus_slugging_percentage: 1.056
              on_base_percentage: 0.43
              batting_average: '.289'
    PriceLevel:
      type: object
      description: One level of the order book.
      required:
        - p
        - q
      properties:
        p:
          type: number
          description: Price per contract in dollars, up to 4 decimal places.
          example: 0.58
        q:
          type: number
          description: Contracts resting at that price. Can be fractional.
          example: 2650
      title: PriceLevel
      example:
        q: 2650
        p: 0.58
    MLBSeasonHittingStatistics:
      title: MLBSeasonHittingStatistics
      type: object
      description: Season hitting totals and per-game rates.
      required:
        - at_bats_per_game
        - hits_per_game
        - runs_per_game
        - rbi_per_game
        - total_bases_per_game
        - home_runs_per_game
        - total_strikeouts_per_game
        - stolen_bases_per_game
        - at_bats
        - hits
        - walks
        - home_runs
        - runs
        - rbi
        - stolen_bases
        - doubles
        - games_played
        - games_started
        - grounded_into_double_play
        - hit_by_pitch
        - intentional_walks
        - plate_appearances
        - reached_on_error
        - sacrifice_flys
        - singles
        - slugging_percentage
        - total_bases
        - total_strikeouts
        - triples
        - on_base_plus_slugging_percentage
        - on_base_percentage
        - batting_average
      properties:
        at_bats_per_game:
          type: number
          description: At-bats per game played.
          example: 3.62
        hits_per_game:
          type: number
          description: Hits per game played.
          example: 1.07
        runs_per_game:
          type: number
          description: Runs scored per game played.
          example: 0.85
        rbi_per_game:
          type: number
          description: Runs batted in per game played.
          example: 0.9
        total_bases_per_game:
          type: number
          description: Total bases per game played.
          example: 2.24
        home_runs_per_game:
          type: number
          description: Home runs per game played.
          example: 0.33
        total_strikeouts_per_game:
          type: number
          description: Strikeouts per game played.
          example: 1.04
        stolen_bases_per_game:
          type: number
          description: Stolen bases per game played.
          example: 0.06
        at_bats:
          type: number
          description: At-bats this season.
          example: 543
        hits:
          type: number
          description: Hits this season.
          example: 160
        walks:
          type: number
          description: Walks this season.
          example: 112
        home_runs:
          type: number
          description: Home runs this season.
          example: 50
        runs:
          type: number
          description: Runs scored this season.
          example: 128
        rbi:
          type: number
          description: Runs batted in this season.
          example: 135
        stolen_bases:
          type: number
          description: Stolen bases this season.
          example: 9
        doubles:
          type: number
          description: Doubles this season.
          example: 26
        games_played:
          type: number
          description: Games played this season.
          example: 150
        games_started:
          type: number
          description: Games started this season.
          example: 148
        grounded_into_double_play:
          type: number
          description: Times grounded into a double play.
          example: 14
        hit_by_pitch:
          type: number
          description: Times hit by a pitch.
          example: 6
        intentional_walks:
          type: number
          description: Intentional walks received.
          example: 18
        plate_appearances:
          type: number
          description: Plate appearances this season.
          example: 671
        reached_on_error:
          type: number
          description: Times reached base on an error.
          example: 3
        sacrifice_flys:
          type: number
          description: Sacrifice flies.
          example: 7
        singles:
          type: number
          description: Singles this season.
          example: 82
        slugging_percentage:
          type: number
          description: Slugging percentage, as a decimal.
          example: 0.637
        total_bases:
          type: number
          description: Total bases this season.
          example: 336
        total_strikeouts:
          type: number
          description: Strikeouts this season.
          example: 156
        triples:
          type: number
          description: Triples this season.
          example: 2
        on_base_plus_slugging_percentage:
          type: number
          description: On-base plus slugging (OPS), as a decimal.
          example: 1.071
        on_base_percentage:
          type: number
          description: On-base percentage, as a decimal.
          example: 0.434
        batting_average:
          type: string
          example: '.295'
          description: Batting average as display text, e.g. `.295`.
      example:
        at_bats_per_game: 3.62
        hits_per_game: 1.07
        runs_per_game: 0.85
        rbi_per_game: 0.9
        total_bases_per_game: 2.24
        home_runs_per_game: 0.33
        total_strikeouts_per_game: 1.04
        stolen_bases_per_game: 0.06
        at_bats: 543
        hits: 160
        walks: 112
        home_runs: 50
        runs: 128
        rbi: 135
        stolen_bases: 9
        doubles: 26
        games_played: 150
        games_started: 148
        grounded_into_double_play: 14
        hit_by_pitch: 6
        intentional_walks: 18
        plate_appearances: 671
        reached_on_error: 3
        sacrifice_flys: 7
        singles: 82
        slugging_percentage: 0.637
        total_bases: 336
        total_strikeouts: 156
        triples: 2
        on_base_plus_slugging_percentage: 1.071
        on_base_percentage: 0.434
        batting_average: '.295'
    MLBSeasonPitchingStatistics:
      title: MLBSeasonPitchingStatistics
      type: object
      description: Season pitching totals.
      required:
        - innings_pitched
        - pitch_count
        - hits_allowed
        - earned_runs
        - base_on_balls
        - strikeouts
        - home_runs_allowed
        - earned_run_average
        - shutout
        - complete_game
        - win
        - loss
        - save
        - hold
        - blown_save
        - quality_start
        - total_outs
      properties:
        innings_pitched:
          type: number
          description: >-
            Innings pitched, in baseball notation: `.1` and `.2` are one and two
            outs.
          example: 186.2
        pitch_count:
          type: number
          description: Pitches thrown this season.
          example: 2985
        hits_allowed:
          type: number
          description: Hits allowed.
          example: 151
        earned_runs:
          type: number
          description: Earned runs allowed.
          example: 58
        base_on_balls:
          type: number
          description: Walks issued.
          example: 44
        strikeouts:
          type: number
          description: Strikeouts recorded.
          example: 221
        home_runs_allowed:
          type: number
          description: Home runs allowed.
          example: 19
        earned_run_average:
          type: number
          description: Earned run average.
          example: 2.8
        shutout:
          type: number
          description: Shutouts.
          example: 1
        complete_game:
          type: number
          description: Complete games.
          example: 2
        win:
          type: number
          description: Wins.
          example: 15
        loss:
          type: number
          description: Losses.
          example: 7
        save:
          type: number
          description: Saves.
          example: 0
        hold:
          type: number
          description: Holds.
          example: 0
        blown_save:
          type: number
          description: Blown saves.
          example: 0
        quality_start:
          type: number
          description: Quality starts.
          example: 21
        total_outs:
          type: number
          description: Outs recorded.
          example: 560
      example:
        innings_pitched: 186.2
        pitch_count: 2985
        hits_allowed: 151
        earned_runs: 58
        base_on_balls: 44
        strikeouts: 221
        home_runs_allowed: 19
        earned_run_average: 2.8
        shutout: 1
        complete_game: 2
        win: 15
        loss: 7
        save: 0
        hold: 0
        blown_save: 0
        quality_start: 21
        total_outs: 560
    MLBPlayerHittingSplits:
      title: MLBPlayerHittingSplits
      type: object
      required:
        - pitching_hand
      properties:
        pitching_hand:
          type: array
          description: One entry per opposing pitcher hand, `L` and `R`.
          items:
            $ref: '#/components/schemas/MLBSeasonHittingSplitStatistics'
      description: Hitting splits keyed by opposing pitcher hand.
      example:
        pitching_hand:
          - value: L
            at_bats: 131
            hits: 41
            walks: 31
            home_runs: 13
            runs: 33
            rbi: 36
            stolen_bases: 2
            doubles: 7
            hit_by_pitch: 2
            intentional_walks: 5
            singles: 21
            slugging_percentage: 0.672
            total_strikeouts: 35
            triples: 0
            on_base_plus_slugging_percentage: 1.122
            on_base_percentage: 0.45
            batting_average: '.313'
          - value: R
            at_bats: 412
            hits: 119
            walks: 81
            home_runs: 37
            runs: 95
            rbi: 99
            stolen_bases: 2
            doubles: 19
            hit_by_pitch: 2
            intentional_walks: 5
            singles: 61
            slugging_percentage: 0.626
            total_strikeouts: 121
            triples: 2
            on_base_plus_slugging_percentage: 1.056
            on_base_percentage: 0.43
            batting_average: '.289'
    MLBSeasonHittingSplitStatistics:
      title: MLBSeasonHittingSplitStatistics
      type: object
      description: Season hitting against one pitching hand.
      required:
        - value
        - at_bats
        - hits
        - walks
        - home_runs
        - runs
        - rbi
        - stolen_bases
        - doubles
        - hit_by_pitch
        - intentional_walks
        - singles
        - slugging_percentage
        - total_strikeouts
        - triples
        - on_base_plus_slugging_percentage
        - on_base_percentage
        - batting_average
      properties:
        value:
          type: string
          enum:
            - L
            - R
          description: 'The opposing pitcher''s hand: `L` or `R`.'
          example: L
        at_bats:
          type: number
          description: At-bats against this hand.
          example: 131
        hits:
          type: number
          description: Hits against this hand.
          example: 41
        walks:
          type: number
          description: Walks against this hand.
          example: 31
        home_runs:
          type: number
          description: Home runs against this hand.
          example: 13
        runs:
          type: number
          description: Runs scored against this hand.
          example: 33
        rbi:
          type: number
          description: Runs batted in against this hand.
          example: 36
        stolen_bases:
          type: number
          description: Stolen bases against this hand.
          example: 2
        doubles:
          type: number
          description: Doubles against this hand.
          example: 7
        hit_by_pitch:
          type: number
          description: Times hit by a pitch.
          example: 2
        intentional_walks:
          type: number
          description: Intentional walks received.
          example: 5
        singles:
          type: number
          description: Singles against this hand.
          example: 21
        slugging_percentage:
          type: number
          description: Slugging percentage, as a decimal.
          example: 0.672
        total_strikeouts:
          type: number
          description: Strikeouts against this hand.
          example: 35
        triples:
          type: number
          description: Triples against this hand.
          example: 0
        on_base_plus_slugging_percentage:
          type: number
          description: On-base plus slugging (OPS), as a decimal.
          example: 1.122
        on_base_percentage:
          type: number
          description: On-base percentage, as a decimal.
          example: 0.45
        batting_average:
          type: string
          description: Batting average as display text, e.g. `.295`.
          example: '.313'
      example:
        value: L
        at_bats: 131
        hits: 41
        walks: 31
        home_runs: 13
        runs: 33
        rbi: 36
        stolen_bases: 2
        doubles: 7
        hit_by_pitch: 2
        intentional_walks: 5
        singles: 21
        slugging_percentage: 0.672
        total_strikeouts: 35
        triples: 0
        on_base_plus_slugging_percentage: 1.122
        on_base_percentage: 0.45
        batting_average: '.313'
  responses:
    TradingBadRequest:
      description: >-
        A query or path parameter failed validation (`Invalid request
        parameters`).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/TradingError'
          examples:
            A query parameter failed validation:
              summary: A query parameter failed validation
              value:
                status: error
                error: BAD_REQUEST
                message: Invalid request parameters
              description: >-
                For example `?status=filled`, `?limit=0`, or a `request_id` with
                a character outside `A-Z a-z 0-9 _ -`.
    UnauthorizedUserScoped:
      description: >-
        The signature check failed, or the request had no `SPLASH-ACCESS-KEY`
        header. A failed check's `message` is one of `Unknown API key`, `API key
        revoked`, `Timestamp outside the allowed window` or `Invalid signature`.
        `API key revoked` is reported only when the signature is correct, so a
        wrong secret always reads `Invalid signature`. A request without the
        `SPLASH-ACCESS-KEY` header is not an API request and is refused with
        `You are not authorized to perform the requested action.` See
        [Authentication
        errors](/predictions/authentication#authentication-errors). This route
        also refuses `user_id` with the same message: it always acts as the
        key's own account.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/TradingError'
          examples:
            Invalid signature:
              summary: Invalid signature
              value:
                status: error
                error: NOT_AUTHORIZED
                message: Invalid signature
              description: >-
                The signature does not match what Splash computed. Check that
                you signed the exact body bytes and the full path including
                `/predictions-service/api` and the query string.
            Timestamp outside the allowed window:
              summary: Timestamp outside the allowed window
              value:
                status: error
                error: NOT_AUTHORIZED
                message: Timestamp outside the allowed window
              description: >-
                `SPLASH-ACCESS-TIMESTAMP` is more than 30 seconds from server
                time. Check your clock.
            Unknown API key:
              summary: Unknown API key
              value:
                status: error
                error: NOT_AUTHORIZED
                message: Unknown API key
            API key revoked:
              summary: API key revoked
              value:
                status: error
                error: NOT_AUTHORIZED
                message: API key revoked
            Missing or misspelled key header:
              summary: Missing or misspelled key header
              value:
                status: error
                error: NOT_AUTHORIZED
                message: You are not authorized to perform the requested action.
              description: >-
                The request carried no `SPLASH-ACCESS-KEY` header, because it
                was not signed or the header name is misspelled. A request
                without the `SPLASH-ACCESS-KEY` header is not an API request and
                is refused. Send all three `SPLASH-ACCESS-*` headers.
            user_id was passed:
              summary: user_id was passed
              value:
                status: error
                error: NOT_AUTHORIZED
                message: You are not authorized to perform the requested action.
              description: >-
                This route always acts as the key's own account, so `user_id` is
                refused rather than ignored. Remove it.
    RateLimited:
      description: >-
        Too Many Requests: more than 10 requests per second from your IP
        address. The request was not handled and nothing was recorded. If the
        response has a `Retry-After` header, wait that many seconds; otherwise
        back off (about 1 second, with jitter). Then send the same request
        again; on `POST /trading/orders` reuse the same `request_id`. See [Rate
        limits](/predictions/rate-limits).
      headers:
        Retry-After:
          description: >-
            Optional, and may be absent. When present, the number of seconds to
            wait before retrying; when absent, back off about 1 second with
            jitter.
          required: false
          schema:
            type: integer
          example: 1
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/TooManyRequestsError'
          examples:
            Over the limit:
              summary: Over the limit
              value:
                status: error
                error: TOO_MANY_REQUESTS
                message: Too many requests, try again later
              description: >-
                More than 10 requests per second from your IP address. Nothing
                was recorded; wait about a second (or the `Retry-After` seconds
                when that header is present) and send the same request again.
    InternalError:
      description: >-
        The request could not be handled. On `POST /trading/orders` the order
        was not placed: poll `GET /orders?request_id=` before trying again. If
        the poll returns the order, follow it; otherwise send the order again
        with a new `request_id`, because this one now reads `cancelled`. See
        [Order outcomes and
        retries](/predictions/trading#order-outcomes-and-retries).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            The request could not be handled:
              summary: The request could not be handled
              value:
                status: error
                error: INTERNAL_ERROR
                message: >-
                  An internal error has occured and the request could not be
                  handled.
              description: >-
                The message is spelled `occured` on the wire. On `POST
                /trading/orders`, poll the `request_id` before trying again,
                then send the order with a new `request_id`.
    Unavailable:
      description: >-
        The Trading API cannot take signed requests right now
        (`TRADING_API_UNAVAILABLE`). Nothing was read or recorded. Retry later.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/TradingError'
          examples:
            The Trading API is not available:
              summary: The Trading API is not available
              value:
                status: error
                error: TRADING_API_UNAVAILABLE
                message: The trading API is not available.
  securitySchemes:
    SplashAccessKey:
      type: apiKey
      in: header
      name: SPLASH-ACCESS-KEY
      description: >-
        Your API key id. Keys are issued by Splash on request, never expire, and
        stay valid until Splash revokes them, which it does on request. See
        [Authentication](/predictions/authentication).
    SplashAccessTimestamp:
      type: apiKey
      in: header
      name: SPLASH-ACCESS-TIMESTAMP
      description: Unix milliseconds, within 30 seconds of server time.
    SplashAccessSignature:
      type: apiKey
      in: header
      name: SPLASH-ACCESS-SIGNATURE
      description: >-
        `base64(HMAC-SHA256(secret, timestamp + METHOD + path + body))`. See
        [Authentication](/predictions/authentication).

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.