> ## 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 sub-categories

> The leagues currently enabled for prediction markets. Membership is the configured league list and is independent of current market inventory; `active` and `filters` are derived from live market data. This is the only endpoint that returns those two fields.

**Ordering.** Active leagues first, then by active trading volume descending, then by the standard display order (`nfl, ncaaf, nba, ncaab, pga, mlb, nhl, epl`), then by id. The busiest leagues lead; when nothing is trading the response falls back to the display order. There is no seasonal pin.

**`active`** is `true` when the league has at least one market with `status = active`, regardless of volume. A league can be offered and out of season, so use `active`, not presence in the list, to tell "offered" from "tradeable right now".

**`filters`** are the tabs to render for the league. Render them from `filters`, not from `active`: non-empty `filters` implies `active`, but a league can be `active: true` with `filters: []`. Entry order is the same for every league, so tabs never reshuffle. A tab appears only when `GET /prediction_markets?type=` would return at least one group for it.

Cached for 5 minutes.



## OpenAPI

````yaml /predictions/openapi.json get /sub_categories
openapi: 3.1.0
info:
  title: Splash Predictions API
  version: 1.0.0
  description: >-
    Public, read-only endpoints for browsing Splash prediction markets: leagues,
    games, game lines, futures and player props. No authentication is required
    for any endpoint in this reference.
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.
paths:
  /sub_categories:
    get:
      tags:
        - Sub-categories
      summary: List sub-categories
      description: >-
        The leagues currently enabled for prediction markets. Membership is the
        configured league list and is independent of current market inventory;
        `active` and `filters` are derived from live market data. This is the
        only endpoint that returns those two fields.


        **Ordering.** Active leagues first, then by active trading volume
        descending, then by the standard display order (`nfl, ncaaf, nba, ncaab,
        pga, mlb, nhl, epl`), then by id. The busiest leagues lead; when nothing
        is trading the response falls back to the display order. There is no
        seasonal pin.


        **`active`** is `true` when the league has at least one market with
        `status = active`, regardless of volume. A league can be offered and out
        of season, so use `active`, not presence in the list, to tell "offered"
        from "tradeable right now".


        **`filters`** are the tabs to render for the league. Render them from
        `filters`, not from `active`: non-empty `filters` implies `active`, but
        a league can be `active: true` with `filters: []`. Entry order is the
        same for every league, so tabs never reshuffle. A tab appears only when
        `GET /prediction_markets?type=` would return at least one group for it.


        Cached for 5 minutes.
      operationId: listSubCategories
      responses:
        '200':
          description: The leagues, ordered as described.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubCategoriesResponse'
              example:
                sub_categories:
                  - id: nfl
                    name: Pro Football
                    icon_url: https://res.cloudinary.com/...
                    active: true
                    filters:
                      - title: Games
                        types:
                          - gameline
                      - title: Futures
                        types:
                          - future_team_champion
                  - id: mlb
                    name: MLB
                    icon_url: https://res.cloudinary.com/...
                    active: true
                    filters:
                      - title: Futures
                        types:
                          - future_team_champion
                  - id: nba
                    name: Pro Basketball (M)
                    icon_url: https://res.cloudinary.com/...
                    active: false
                    filters: []
                status: success
        '500':
          $ref: '#/components/responses/InternalError'
components:
  schemas:
    SubCategoriesResponse:
      type: object
      required:
        - sub_categories
        - status
      properties:
        sub_categories:
          type: array
          items:
            $ref: '#/components/schemas/SubCategory'
        status:
          type: string
          const: success
      title: SubCategoriesResponse
    SubCategory:
      type: object
      description: A league as `GET /sub_categories` returns it.
      required:
        - id
        - name
        - icon_url
        - active
        - filters
      properties:
        id:
          $ref: '#/components/schemas/SubCategoryId'
        name:
          type: string
          description: Display-ready label.
          example: Pro Football
        icon_url:
          type: string
          format: uri
        active:
          type: boolean
          description: >-
            Has at least one market with `status = active`. Separates "offered"
            from "tradeable now".
        filters:
          type: array
          description: >-
            The tabs to render, in order. `[]` when nothing is tradeable, never
            absent.
          items:
            $ref: '#/components/schemas/SubCategoryFilter'
      title: SubCategory
    Error:
      type: object
      required:
        - status
        - error
        - message
      properties:
        status:
          type: string
          const: error
        error:
          type: string
          enum:
            - BAD_REQUEST
            - NOT_FOUND
            - INTERNAL_ERROR
        message:
          type: string
      title: Error
    SubCategoryId:
      type: string
      description: A league id.
      enum:
        - nfl
        - ncaaf
        - nba
        - wnba
        - ncaab
        - mlb
        - nhl
        - epl
        - mls
        - pga
        - wc
      title: SubCategoryId
    SubCategoryFilter:
      type: object
      description: One tab for a league.
      required:
        - title
        - types
      properties:
        title:
          type: string
          description: >-
            Display-ready tab label in sentence case, currently `Games` or
            `Futures`. Render it as given. It is presentation, not an
            identifier: match on `types`, never on `title`.
          example: Games
        types:
          type: array
          description: >-
            Passed straight back as `GET /prediction_markets?type=`. Every tab
            today maps to one type, so `types[0]` is safe.
          items:
            $ref: '#/components/schemas/MarketGroupType'
      title: SubCategoryFilter
    MarketGroupType:
      type: string
      description: >-
        The kind of market group. `gameline` is one game's spread, total and
        moneyline markets; `future_team_champion` is one title with a market per
        team; `player_prop` is one player in one game.
      enum:
        - gameline
        - future_team_champion
        - player_prop
      title: MarketGroupType
  responses:
    InternalError:
      description: The request could not be handled.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            status: error
            error: INTERNAL_ERROR
            message: >-
              An internal error has occured and the request could not be
              handled.

````

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