owlsinsight-com Same Game Parlay API

The Same Game Parlay API from owlsinsight-com — 2 operation(s) for same game parlay.

Operations 2

POST /api/v1/{sport}/sgp/build Prices a same game parlay on the book named in book (FanDuel, DraftKings, Hard… #
GET /api/v1/{sport}/sgp/events Lists a book's games for a sport together with the eventId the SGP builder… #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/owlsinsight-com:owlsinsight-com-same-game-parlay-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

owlsinsight-com-same-game-parlay-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: 'Generated from the Owls Insight API manifest and the owls-insight-ts SDK types. Schemas are deliberately lenient: every field is optional, enums are open (x-extensible-enum), and unknown fields may appear. Decode accordingly.'
  title: Owls Insight Same Game Parlay API
  version: 0.78.0
  x-owls-manifest-commit: c93b0756
servers:
- url: https://api.owlsinsight.com
security:
- bearerAuth: []
tags:
- name: Same Game Parlay
paths:
  /api/v1/{sport}/sgp/build:
    post:
      description: 'Prices a same game parlay on the book named in book (FanDuel, DraftKings, Hard Rock, BetRivers and Bally Bet): resolves each leg to that book''s own selection for one game and returns that book''s own correlation-adjusted same game parlay price for exactly those legs, verified leg by leg, not a naive multiplication of the singles. The price is the named book''s own same game parlay price for exactly the legs sent, at the lines they resolved to, verified leg by leg: it is returned only when the book''s answer confirms all of that; otherwise the call fails rather than returning a price. On a 200, sgp.isSGM is always true. A book whose pricing misbehaves may be paused: its builds are then a 503 SGP_BOOK_DISABLED until it is switched back on, and the other books are unaffected. A resolved leg carries the book''s own ids: fdSelection { marketId, selectionId } on FanDuel, bookSelection { marketId, selectionId } on every other book (DraftKings: its market id and selection id; Hard Rock: its market id and selection id, both strings of digits; BetRivers and Bally Bet: the book''s offer id and outcome id, both strings of digits). Only one of the two is present on a leg. FanDuel prices are FanDuel''s own bet-slip price, quoted from FanDuel''s New Jersey sportsbook. FanDuel runs separate markets in other states and in Ontario, so a slip placed there can show a different parlay price for the same legs. The price also moves with the market, so compare it only with a slip taken at the time in meta.pricedAt. fdSelection.marketId is FanDuel New Jersey''s id for that market. FanDuel issues a different marketId in every other state and in Ontario, while selectionId is the same everywhere, so to place a leg outside New Jersey use your region''s marketId for that selectionId. meta.timestamp and meta.resolvedAt are the same instant: when the legs were resolved against the book''s catalog, BEFORE pricing. meta.catalogAgeMs is the MINIMUM age that catalog data already had then; the true age can be higher. meta.priceRequestedAt is when the price request went out and meta.pricedAt is when the book''s answer came back, both on our server''s clock. Each can read slightly LATER than the real moment, by the time the answer took to reach our server (typically under 100 ms). If that timing detail is unavailable, priceRequestedAt is when pricing started (earlier than the request) and pricedAt is when the answer reached our server, so the two still enclose the quote. pricedAt is never earlier than priceRequestedAt and is the quote time to use. They are present on every 200, and on a refused 422 or a no-price 503 only when the book returned a response. catalogAgeMs is omitted when the age is unknown. 422 with reasonCode "unresolved" (code repeats it) when any leg cannot be resolved on the book, including a selection the book has suspended; the legs array says which leg and why. Nothing was priced. 422 also when two legs resolve to the same selection on the book, and on FanDuel for player props whose line is carried only in the selection name, because FanDuel does not confirm that line in its price response. These are refused before pricing. On FanDuel, alternate N-or-more strikeout rungs are priced, but its price response identifies the rung by its selection only and does not confirm its line. A 200 that includes one carries meta.lineUnverified: true and meta.lineUnverifiedLegs, the indexes of those legs in your legs array. Both keys are absent when every line was confirmed, and never appear on a DraftKings, Hard Rock, BetRivers or Bally Bet build, because each confirms every line. Player prop coverage is not uniform across books, sports and categories. The categories a player_prop leg can use on FanDuel, per sport: mlb: strikeouts, hits, total-bases, home-runs, rbis, runs, stolen-bases, singles, doubles, triples, hits-runs-rbis. nba: accepted: points, rebounds, assists, threes, steals, blocks. wnba: points, rebounds, and accepted: assists, threes, steals, blocks.'
      operationId: buildSgp
      parameters:
      - in: path
        name: sport
        required: true
        schema:
          type: string
          x-extensible-enum:
          - mlb
          - nba
          - ncaab
          - ncaaf
          - nfl
          - nhl
          - soccer
          - tennis
          - wnba
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SgpBuildParams'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SgpBuildResponse'
          description: OK
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SgpBuildResponse'
          description: Legs could not be resolved or the parlay was refused
        '503':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SgpBuildErrorBody'
          description: No price right now
      summary: Prices a same game parlay on the book named in book (FanDuel, DraftKings, Hard…
      tags:
      - Same Game Parlay
      x-owls-access: Rookie and above
      x-owls-sdk-method: buildSgp
  /api/v1/{sport}/sgp/events:
    get:
      description: Lists a book's games for a sport together with the eventId the SGP builder needs (FanDuel unless ?book= names another).
      operationId: getSgpEvents
      parameters:
      - in: path
        name: sport
        required: true
        schema:
          type: string
          x-extensible-enum:
          - mlb
          - nba
          - ncaab
          - ncaaf
          - nfl
          - nhl
          - soccer
          - tennis
          - wnba
      - description: The book whose games to list, one of fanduel, hardrock, draftkings, betrivers, ballybet (the books the builder prices, listed in supportedBooks on a 400 SGP_BOOK_UNSUPPORTED). Default fanduel. A book whose pricing is paused is a 503 SGP_BOOK_DISABLED, as on the build call.
        in: query
        name: book
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SgpEventsResponse'
          description: OK
      summary: Lists a book's games for a sport together with the eventId the SGP builder…
      tags:
      - Same Game Parlay
      x-owls-access: Rookie and above
      x-owls-sdk-method: getSgpEvents
components:
  schemas:
    SgpFdSelection:
      description: 'The FanDuel selection a resolved SGP leg maps to. `marketId` is specific to

        the FanDuel state that priced it (New Jersey); `selectionId` is the same in

        every state.'
      properties:
        marketId:
          type: string
        selectionId:
          format: double
          type: number
      type: object
      x-owls-required:
      - marketId
      - selectionId
    SgpBuildResponse:
      description: "Response from `POST /api/v1/{sport}/sgp/build`.\n\nAlso what a 422 returns. A 422 is NOT thrown, so check `success` before\nreading `sgp`, then branch on `reasonCode` (the API sends it on every 422 since\nthe refusal-status change; older API versions sent none on a leg-resolution 422\nand threw the refusal as a 502):\n- `\"unresolved\"`: a leg could not be resolved. No `sgp`, and a `reason` on each\n unresolved leg naming which lines FanDuel does offer or why the category,\n side or leg type cannot work. Fix the legs.\n- any other {@link SgpReasonCode} (`line-mismatch`, `bet-failure`,\n `not-placeable`, ...): FanDuel judged the slip and refused it, or its answer\n did not confirm the legs as sent. The request was valid but cannot be priced\n as specified, so do not resend the same body unchanged. `legIndex`,\n `lineEchoed` and `failureCodes` are set where they apply; `message` is prose.\n\nEvery other failure throws: a `ServiceBusyError` with `code` `no-price` when no\nusable answer came back (503, retry after `retryAfterMs`), one with an `SGP_*`\ncode ({@link SgpErrorBody} in `details`), or, from older API versions, an\n`OwlsInsightError` with status 502 whose `details` is the\n{@link SgpBuildErrorBody}."
      properties:
        code:
          description: Repeats `reasonCode`.
          type: string
          x-extensible-enum:
          - ambiguous-combination
          - bet-failure
          - bet-failure-shape
          - combined-odds-missing
          - duplicate-selection
          - leg-failure
          - line-mismatch
          - line-not-echoed
          - line-unexpected
          - line-unverifiable
          - no-price
          - no-sgm-combination
          - not-placeable
          - resp-code
          - runner-odds-duplicate
          - runner-odds-inconsistent
          - runner-odds-missing
          - single-duplicate
          - single-missing
          - single-odds-missing
          - unresolved
        error:
          description: 'Present when `success: false`.'
          type: string
        failureCodes:
          description: 'Refused parlay only, when FanDuel rejected it with its own failure codes

            (e.g. `SELECTION_NOT_FOUND`).'
          items:
            type: string
          type: array
        legIndex:
          description: 'Refused parlay, `line-*` codes only: the leg''s index in your `legs` array.'
          format: double
          type: number
        legs:
          items:
            $ref: '#/components/schemas/SgpResolvedLeg'
          type: array
        lineEchoed:
          description: 'Refused parlay, `line-*` codes only: the line FanDuel priced, exactly as it

            sent it, or `null` when it sent none.'
          format: double
          type:
          - number
          - 'null'
        message:
          description: 'Refused parlay (422) only: human-readable prose. Match on `reasonCode`,

            `legIndex`, `lineEchoed` and `failureCodes`, never on this.'
          type: string
        meta:
          $ref: '#/components/schemas/SgpBuildMeta'
        pricing:
          description: '`"fanduel-slip"` on a 200: the price is FanDuel''s own bet-slip answer.'
          type: string
        reasonCode:
          description: 'Present when `success: false`: `"unresolved"` on a leg-resolution 422,

            otherwise the {@link SgpReasonCode} of a refused parlay (never `no-price`,

            which is thrown as a 503). Absent from older API versions'' leg-resolution

            422.'
          type: string
          x-extensible-enum:
          - ambiguous-combination
          - bet-failure
          - bet-failure-shape
          - combined-odds-missing
          - duplicate-selection
          - leg-failure
          - line-mismatch
          - line-not-echoed
          - line-unexpected
          - line-unverifiable
          - no-price
          - no-sgm-combination
          - not-placeable
          - resp-code
          - runner-odds-duplicate
          - runner-odds-inconsistent
          - runner-odds-missing
          - single-duplicate
          - single-missing
          - single-odds-missing
          - unresolved
        sgp:
          $ref: '#/components/schemas/SgpPrice'
        success:
          type: boolean
      type: object
      x-owls-required:
      - success
      - legs
      - meta
    SgpBuildMeta:
      description: '`meta` of a `buildSgp` response (200, the leg-resolution 422 and the refused

        422), and of the no-price 503, `SGP_BUSY` 503 and legacy 502 error bodies.


        The fields marked "API v2.348.0" are absent from older API versions.'
      properties:
        book:
          description: The book the legs were resolved and priced against (`"fanduel"`).
          type: string
        catalogAgeMs:
          description: 'The MINIMUM age, in ms, the catalog data already had at `resolvedAt`; the

            true age can be higher. Omitted when the age is unknown. API v2.348.0.'
          format: double
          type: number
        commence_time:
          type: string
        eventId:
          description: The API echoes eventId as the numeric FanDuel event id.
        lineUnverified:
          description: '`true` on a 200 that priced at least one leg whose line FanDuel''s

            response does not confirm (alternate N-or-more strikeout rungs). Absent

            when every line was confirmed. API v2.348.0.'
          type: boolean
        lineUnverifiedLegs:
          description: 'With `lineUnverified`: the indexes of those legs in your `legs` array.

            API v2.348.0.'
          items:
            format: double
            type: number
          type: array
        matchup:
          type: string
        priceRequestedAt:
          description: 'When the price request went out, on the API server''s clock. Present on

            every 200, and on a refused 422, a no-price 503 or a legacy 502 only when

            FanDuel returned a response. Absent on a leg-resolution 422 (nothing was

            priced). API v2.348.0.'
          type: string
        pricedAt:
          description: 'When FanDuel''s answer came back, on the API server''s clock. Never earlier

            than `priceRequestedAt`; this is the quote time to use. Same presence as

            `priceRequestedAt`. API v2.348.0.'
          type: string
        resolvedAt:
          description: 'When the legs were resolved against FanDuel''s catalog, before pricing.

            API v2.348.0.'
          type: string
        timestamp:
          description: 'The same instant as `resolvedAt`: when the legs were resolved, BEFORE

            pricing. It is not the quote time; use `pricedAt` for that.'
          type: string
      type: object
      x-owls-required:
      - eventId
      - book
      - timestamp
    SgpEventsResponse:
      description: Response from `GET /api/v1/{sport}/sgp/events`.
      properties:
        book:
          description: The book the events belong to (`"fanduel"`).
          type: string
        count:
          format: double
          type: number
        events:
          items:
            $ref: '#/components/schemas/SgpEvent'
          type: array
        meta:
          properties:
            timestamp:
              type: string
          type: object
          x-owls-required:
          - timestamp
        sport:
          type: string
        success:
          type: boolean
      type: object
      x-owls-required:
      - success
      - sport
      - book
      - count
      - events
      - meta
    SgpEvent:
      description: One bookable event returned by `getSgpEvents`.
      properties:
        away:
          type: string
        commence_time:
          deprecated: true
          type: string
        competition:
          description: FanDuel's competition name; empty when unknown.
          type: string
        eventId:
          description: 'FanDuel''s numeric event id (a number on the wire). Pass it to `buildSgp`

            as `String(event.eventId)`.'
        home:
          type: string
        matchup:
          description: '`"Away @ Home"`.'
          type: string
        start:
          description: Scheduled start (ISO 8601), or `null` when FanDuel lists none.
          type:
          - string
          - 'null'
      type: object
      x-owls-required:
      - eventId
      - matchup
      - away
      - home
      - start
      - competition
    SgpResolvedLeg:
      description: A single leg echoed back in a `buildSgp` response, with its resolution.
      properties:
        description:
          description: 'Present when `resolved: true`: the FanDuel selection it resolved to.'
          type: string
        fdSelection:
          $ref: '#/components/schemas/SgpFdSelection'
          description: 'Present when `resolved: true`: the FanDuel selection the leg resolved to.'
        reason:
          description: 'Present when `resolved: false`: why the leg could not be used.'
          type: string
        resolved:
          type: boolean
        single:
          description: 'On a 200: the leg''s stand-alone price, or `null` when none was matched.'
          properties:
            american:
              format: double
              type: number
            decimal:
              format: double
              type: number
          type:
          - object
          - 'null'
          x-owls-required:
          - american
          - decimal
      type: object
      x-owls-required:
      - resolved
    SgpBuildErrorBody:
      description: "The body of a thrown `buildSgp` failure that reached pricing, found on the\nerror as `err.details`; `err.code` is `reasonCode`:\n- the no-price 503 (`ServiceBusyError`, `code` `no-price`): no usable answer\n  came back; retry after `err.retryAfterMs`;\n- the 502 older API versions sent for every refusal (`OwlsInsightError`,\n  status 502). Current API versions return a refused parlay as a 422 on\n  {@link SgpBuildResponse} instead, with the same fields.\n\nMatch on `reasonCode`, `legIndex`, `lineEchoed` and `failureCodes`, never on\n`message`, which is prose."
      properties:
        code:
          description: Repeats `reasonCode`.
          type: string
          x-extensible-enum:
          - ambiguous-combination
          - bet-failure
          - bet-failure-shape
          - combined-odds-missing
          - duplicate-selection
          - leg-failure
          - line-mismatch
          - line-not-echoed
          - line-unexpected
          - line-unverifiable
          - no-price
          - no-sgm-combination
          - not-placeable
          - resp-code
          - runner-odds-duplicate
          - runner-odds-inconsistent
          - runner-odds-missing
          - single-duplicate
          - single-missing
          - single-odds-missing
        error:
          type: string
        failureCodes:
          description: Only when FanDuel rejected the parlay with its own failure codes.
          items:
            type: string
          type: array
        legIndex:
          description: 'Only for the `line-*` codes: the leg''s index in your `legs` array.'
          format: double
          type: number
        legs:
          items:
            $ref: '#/components/schemas/SgpResolvedLeg'
          type: array
        lineEchoed:
          description: 'Only for the `line-*` codes: the line FanDuel priced, exactly as it sent

            it, or `null` when it sent none.'
          format: double
          type:
          - number
          - 'null'
        message:
          type: string
        meta:
          $ref: '#/components/schemas/SgpBuildMeta'
        reasonCode:
          type: string
          x-extensible-enum:
          - ambiguous-combination
          - bet-failure
          - bet-failure-shape
          - combined-odds-missing
          - duplicate-selection
          - leg-failure
          - line-mismatch
          - line-not-echoed
          - line-unexpected
          - line-unverifiable
          - no-price
          - no-sgm-combination
          - not-placeable
          - resp-code
          - runner-odds-duplicate
          - runner-odds-inconsistent
          - runner-odds-missing
          - single-duplicate
          - single-missing
          - single-odds-missing
        success:
          type: boolean
      type: object
      x-owls-required:
      - success
      - error
      - message
      - reasonCode
      - code
      - legs
      - meta
    SgpPrice:
      description: The computed parlay price from a successful `buildSgp` call.
      properties:
        american:
          format: double
          type: number
        decimal:
          format: double
          type: number
        isSGM:
          description: 'Always `true` on a 200: the price is FanDuel''s correlated same-game price

            for exactly the legs sent.'
          type: boolean
        legs:
          format: double
          type: number
      type: object
      x-owls-required:
      - american
      - decimal
      - isSGM
      - legs
    SgpBuildParams:
      description: Params for `buildSgp`.
      properties:
        book:
          description: 'Sportsbook to price the parlay against: `"fanduel"`, `"draftkings"` or

            `"hardrock"`. Any other value is a 400 with code `SGP_BOOK_UNSUPPORTED`

            listing `supportedBooks`.'
          type: string
        eventId:
          description: Pass as a string. Use `String(event.eventId)` when sourced from `getSgpEvents`.
          type: string
        legs:
          description: Between 2 and 12 legs.
          items:
            $ref: '#/components/schemas/SgpLeg'
          type: array
      type: object
      x-owls-required:
      - eventId
      - book
      - legs
    SgpLeg:
      anyOf:
      - properties:
          selection:
            type: string
          type:
            type: string
            x-extensible-enum:
            - moneyline
        type: object
        x-owls-required:
        - type
        - selection
      - properties:
          point:
            format: double
            type: number
          selection:
            type: string
          type:
            type: string
            x-extensible-enum:
            - spread
        type: object
        x-owls-required:
        - type
        - selection
        - point
      - properties:
          point:
            format: double
            type: number
          selection:
            type: string
            x-extensible-enum:
            - over
            - under
          type:
            type: string
            x-extensible-enum:
            - total
        type: object
        x-owls-required:
        - type
        - selection
        - point
      - properties:
          category:
            description: "Player-prop categories differ per sport (full lists at\nhttps://owlsinsight.com/docs#sub-sgp):\n- MLB: `strikeouts` [ks], `hits`, `total-bases` [tb], `home-runs` [hr],\n  `rbis` [rbi], `runs`, `stolen-bases` [sb, steals], `singles`,\n  `doubles`, `triples`, `hits-runs-rbis`.\n- WNBA: `points`, `rebounds` verified; `assists`, `threes`, `steals`,\n  `blocks` accepted but not verified, so a leg may be refused.\n- NBA: `points`, `rebounds`, `assists`, `threes`, `steals`, `blocks`,\n  all accepted but not verified.\n- NFL, NCAAF, NHL, NCAAB, soccer, tennis: no player props. The leg is\n  refused (422) naming the category you sent and, for a betting-name\n  alias, the props category it stands for, e.g.\n  `'anytime_touchdown' (touchdowns)`."
            type: string
          line:
            description: 'The half-point below the threshold: `0.5` = 1 or more, `1.5` = 2 or

              more. `total-bases` has no 1+ market, so its lowest line is `1.5`.'
            format: double
            type: number
          player:
            description: 'Full player name. A partial name is accepted but 422s if it matches

              more than one player on the slate (e.g. "Ramirez").'
            type: string
          side:
            description: 'On MLB, only `strikeouts` accepts `"under"`: the batter categories are

              FanDuel "N or more" markets and so are over-only. NBA/WNBA legs take

              either side of the full-game line.'
            type: string
            x-extensible-enum:
            - over
            - under
          type:
            type: string
            x-extensible-enum:
            - player_prop
        type: object
        x-owls-required:
        - type
        - player
        - category
        - side
        - line
      description: A single leg in a Same Game Parlay build request.
  securitySchemes:
    bearerAuth:
      description: Your Owls Insight API key.
      scheme: bearer
      type: http
x-owls-v2-books:
- book: 4casters
  sports:
  - cfl
  - esports
  - mlb
  - mma
  - nba
  - ncaab
  - ncaaf
  - nfl
  - nhl
  - soccer
  - tennis
  - wnba
  wsEvent: 4casters-v2-update
- book: 888sport
  sports:
  - mlb
  - nba
  - ncaab
  - ncaaf
  - nfl
  - nhl
  - soccer
  - tennis
  - wnba
  wsEvent: null
- book: ballybet
  sports:
  - aussie-rules
  - boxing
  - cricket
  - cycling
  - darts
  - formula1
  - golf
  - handball
  - mlb
  - mma
  - motorsport
  - nba
  - ncaab
  - ncaaf
  - nfl
  - nhl
  - rugby-league
  - rugby-union
  - snooker
  - soccer
  - specials
  - surfing
  - table-tennis
  - tennis
  - wnba
  wsEvent: ballybet-v2-update
- book: bet105
  sports:
  - alpine-skiing
  - archery
  - athletics
  - aussie-rules
  - badminton
  - bandy
  - baseball
  - basketball
  - basketball-3x3
  - biathlon
  - bowls
  - boxing
  - cfl
  - chess
  - cricket
  - curling
  - cycling
  - darts
  - esports
  - fencing
  - field-hockey
  - floorball
  - football
  - formula1
  - futsal
  - gaelic-sports
  - golf
  - greyhounds
  - handball
  - hockey
  - horse-racing
  - hurling
  - judo
  - kabaddi
  - kbo
  - lacrosse
  - mlb
  - mma
  - motorbikes
  - motorsport
  - nascar
  - nba
  - ncaab
  - ncaaf
  - netball
  - nfl
  - nhl
  - npb
  - olympics
  - padel
  - pool
  - rugby-league
  - rugby-union
  - sailing
  - ski-jumping
  - snooker
  - soccer
  - softball
  - speedway
  - squash
  - sumo
  - supercars
  - surfing
  - table-tennis
  - taekwondo
  - tennis
  - triathlon
  - trotting
  - ultimate
  - volleyball
  - water-polo
  - wnba
  wsEvent: bet105-v2-update
- book: bet365
  sports:
  - mlb
  - nba
  - nfl
  - nhl
  - soccer
  wsEvent: bet365-v2-update
- book: betonline
  sports:
  - mlb
  - nba
  - ncaaf
  - nfl
  - nhl
  - soccer
  - tennis
  wsEvent: betonline-realtime
- book: betrivers
  sports:
  - aussie-rules
  - boxing
  - cricket
  - cycling
  - darts
  - formula1
  - golf
  - handball
  - mlb
  - mma
  - motorsport
  - nba
  - ncaab
  - ncaaf
  - nfl
  - nhl
  - rugby-league
  - rugby-union
  - snooker
  - soccer
  - specials
  - surfing
  - table-tennis
  - tennis
  - wnba
  wsEvent: betrivers-v2-update
- book: betus
  sports:
  - alpine-skiing
  - archery
  - athletics
  - aussie-rules
  - badminton
  - bandy
  - baseball
  - basketball
  - basketball-3x3
  - biathlon
  - bowls
  - boxing
  - cfl
  - chess
  - cricket
  - curling
  - cycling
  - darts
  - esports
  - fencing
  - field-hockey
  - floorball
  - football
  - formula1
  - futsal
  - gaelic-sports
  - golf
  - greyhounds
  - handball
  - hockey
  - horse-racing
  - hurling
  - judo
  - kabaddi
  - kbo
  - lacrosse
  - mlb
  - mma
  - motorbikes
  - motorsport
  - nascar
  - nba
  - ncaab
  - ncaaf
  - netball
  - nfl
  - nhl
  - npb
  - olympics
  - padel
  - pool
  - rugby-league
  - rugby-union
  - sailing
  - ski-jumping
  - snooker
  - soccer
  - softball
  - speedway
  - squash
  - sumo
  - supercars
  - surfing
  - table-tennis
  - taekwondo
  - tennis
  - triathlon
  - trotting
  - ultimate
  - volleyball
  - water-polo
  - wnba
  wsEvent: betus-v2-update
- book: bookmaker
  sports:
  - alternative-sports
  - aussie-rules
  - baseball
  - basketball
  - boxing
  - cricket
  - darts
  - e-gaming
  - entertainment
  - esports
  - football
  - futsal
  - futures
  - golf
  - ice-hockey
  - mma
  - motorsport
  - politics
  - rugby
  - soccer
  - surfing
  - table-tennis
  - tennis
  wsEvent: null
- book: bovada
  sports:
  - mlb
  - mma
  - nba
  - ncaab
  - ncaaf
  - nfl
  - nhl
  wsEvent: null
- book: draftkings
  sports:
  - mlb
  - mma
  - nba
  - ncaab
  - ncaaf
  - nfl
  - nhl
  - soccer
  - wnba
  wsEvent: draftkings-v2-update
- book: fanaticsmarkets
  sports:
  - boxing
  - cs2
  - dota2
  - golf
  - lol
  - mlb
  - mma
  - nba
  - ncaab
  - ncaaf
  - nfl
  - nhl
  - soccer
  - tennis
  - valorant
  - wnba
  wsEvent: fanaticsmarkets-v2-update
- book: fanduel
  sports:
  - mlb
  - mma
  - nba
  - ncaaf
  - nfl
  - nhl
  - soccer
  - tennis
  - wnba
  wsEvent: fanduel-v2-update
- book: hardrock
  sports:
  - AMERICAN_FOOTBALL
  - AUSSIE_RULES
  - BASEBALL
  - BASKETBALL
  - BOXING
  - CRICKET
  - DARTS
  - HANDBALL
  - ICE_HOCKEY
  - MMA
  - RUGBY
  - SNOOKER
  - SOCCER
  - TABLE_TENNIS
  - TENNIS
  - VOLLEYBALL
  wsEvent: null
- book: kalshi
  sports:
  - cs2
  - dota2
  - lol
  - mlb
  - mma
  - nba
  - ncaaf
  - nfl
  - nhl
  - overwatch
  - pubg
  - rainbow6
  - rocketleague
  - soccer
  - tennis
  - valorant
  - wnba
  wsEvent: kalshi-v2-update
- book: lowvig
  sports:
  - boxing
  - cricket
  - darts
  - golf
  - mlb
  - mma
  - nba
  - ncaab
  - ncaaf
  - nfl
  - nhl
  - soccer
  - table-tennis
  - tennis
  - wnba
  wsEvent: lowvig-v2-update
- book: mybookie
  sports:
  - mlb
  - nba
  wsEvent: mybookie-v2-update
- book: novig
  sports:
  - mlb
  - nba
  - ncaab
  - ncaaf
  - nfl
  - nhl
  wsEvent: null
- book: pinnacle
  sports:
  - esports
  - handball
  - mlb
  - mma
  - nba
  - ncaab
  - ncaaf
  - nfl
  - nhl
  - soccer
  - tennis
  - wnba
  wsEvent: pinnacle-v2-update
- book: polymarket
  sports:
  - cs2
  - dota2
  - lol
  - mlb
  - mma
  - nba
  - ncaaf
  - nfl
  - nhl
  - overwatch
  - pubg
  - rainbow6
  - rocketleague
  - soccer
  - tennis
  - valorant
  - wnba
  wsEvent: polymarket-v2-update
- book: propbuilder
  sports:
  - mlb
  - nba
  - ncaaf
  - nfl
  - nhl
  - wnba
  wsEvent: propbuilder-v2-update
- book: stake
  sports:
  - baseball
  - basketball
  - cs2
  - ice-hockey
  - mma
  - soccer
  - table-tennis
  - tennis
  wsEvent: null
- book: thescore
  sports:
  - mlb
  - nba
  - ncaaf
  - nfl
  - nhl
  - soccer
  - tennis
  wsEvent: null
- book: thunderpick
  sports:
  - american-football
  - baseball
  - basketball
  - cs2
  - dota2
  - lol
  - soccer
  - tennis
  - valorant
  wsEvent: thunderpick-v2-update
- book: tippmixpro
  sports:
  - boxing
  - cs2
  - dota2
  - lol
  - mlb
  - mma
  - nba
  - ncaab
  - ncaaf
  - nfl
  - nhl
  - soccer
  - tennis
  - valorant
  wsEvent: tippmixpro-v2-update
- book: underdog
  sports:
  - cs2
  - kbo
  - lol
  - mlb
  - mma
  - nba
  - ncaaf
  - nfl
  - nhl
  - npb
  - pga
  - soccer
  - tennis
  - valorant
  - wnba
  wsEvent: null
- book: versus
  sports:
  - afl
  - badminton
  - basketball
  - boxing
  - cricket
  - darts
  - esports
  - golf
  - handball
  - mlb
  - mma
  - nfl
  - nhl
  - padel
  - soccer
  - table-tennis
  - tennis
  - volleyball
  wsEvent: versus-v2-update