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

# List Markets

> List Opinion markets with filtering and sorting

List Opinion markets with filtering and sorting. Returns tradeable markets only (standalone binaries + categorical outcomes). Categorical parent markets are excluded.

| Constraint | Value              |
| ---------- | ------------------ |
| `limit`    | 1–100 (default 20) |

### Event Grouping

* `event_id`, `event_slug`, and `event_title` come from the parent market for categorical outcomes. These are `null` for standalone binaries.
* Opinion calls these "parent markets" natively - Predexon normalizes to "event" for cross-venue consistency.

### Notes

* `collection` is non-null for recurring markets (e.g. hourly crypto). Contains title, symbol, and frequency.
* `price` in outcomes is `null` when the indexer hasn't populated prices yet.


## OpenAPI

````yaml GET /v2/opinion/markets
openapi: 3.1.0
info:
  title: Predexon API
  description: Prediction market data aggregation and matching API
  version: 2.0.0
servers:
  - url: https://api.predexon.com
security:
  - apiKey: []
paths:
  /v2/opinion/markets:
    get:
      tags:
        - opinion
      summary: Get Opinion Markets
      description: >-
        List Opinion markets with filtering and sorting.


        Returns tradeable markets (standalone binaries + categorical outcomes).

        Categorical parent markets are excluded — use event_id or event_slug to

        query all outcomes under a categorical grouping.


        Prices in outcomes are currently null (future: from
        WebSocket/orderbook).
      operationId: get_opinion_markets_v2_opinion_markets_get
      parameters:
        - name: status
          in: query
          required: false
          schema:
            anyOf:
              - $ref: '#/components/schemas/StatusOption'
              - type: 'null'
            description: 'Filter by status: open or closed'
            title: Status
          description: 'Filter by status: open or closed'
        - name: market_type
          in: query
          required: false
          schema:
            anyOf:
              - $ref: '#/components/schemas/MarketTypeOption'
              - type: 'null'
            description: 'Filter by market type: binary or categorical'
            title: Market Type
          description: 'Filter by market type: binary or categorical'
        - name: search
          in: query
          required: false
          schema:
            anyOf:
              - type: string
                minLength: 3
                maxLength: 100
              - type: 'null'
            description: Search in title (minimum 3 characters)
            title: Search
          description: Search in title (minimum 3 characters)
        - name: labels
          in: query
          required: false
          schema:
            anyOf:
              - type: array
                items:
                  type: string
                maxItems: 50
              - type: 'null'
            description: Filter by label(s)
            title: Labels
          description: Filter by label(s)
        - name: min_volume
          in: query
          required: false
          schema:
            anyOf:
              - type: number
                minimum: 0
              - type: 'null'
            description: Minimum total volume (USD)
            title: Min Volume
          description: Minimum total volume (USD)
        - name: condition_id
          in: query
          required: false
          schema:
            anyOf:
              - type: array
                items:
                  type: string
                maxItems: 50
              - type: 'null'
            description: Filter by condition ID(s)
            title: Condition Id
          description: Filter by condition ID(s)
        - name: market_slug
          in: query
          required: false
          schema:
            anyOf:
              - type: array
                items:
                  type: string
                maxItems: 50
              - type: 'null'
            description: Filter by market slug(s)
            title: Market Slug
          description: Filter by market slug(s)
        - name: market_id
          in: query
          required: false
          schema:
            anyOf:
              - type: array
                items:
                  type: integer
                maxItems: 50
              - type: 'null'
            description: Filter by market ID(s)
            title: Market Id
          description: Filter by market ID(s)
        - name: predexon_id
          in: query
          required: false
          schema:
            anyOf:
              - type: array
                items:
                  type: string
                maxItems: 50
              - type: 'null'
            description: Filter by predexon ID(s)
            title: Predexon Id
          description: Filter by predexon ID(s)
        - name: token_id
          in: query
          required: false
          schema:
            anyOf:
              - type: array
                items:
                  type: string
                maxItems: 50
              - type: 'null'
            description: Filter by token ID(s)
            title: Token Id
          description: Filter by token ID(s)
        - name: event_id
          in: query
          required: false
          schema:
            anyOf:
              - type: array
                items:
                  type: integer
                maxItems: 50
              - type: 'null'
            description: Filter by event/parent market ID(s)
            title: Event Id
          description: Filter by event/parent market ID(s)
        - name: event_slug
          in: query
          required: false
          schema:
            anyOf:
              - type: array
                items:
                  type: string
                maxItems: 50
              - type: 'null'
            description: Filter by event slug(s)
            title: Event Slug
          description: Filter by event slug(s)
        - name: sort
          in: query
          required: false
          schema:
            $ref: >-
              #/components/schemas/app__api__v1__opinion__markets_list__SortOption
            description: Sort by
            default: volume
          description: Sort by
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            maximum: 100
            minimum: 1
            description: Number of markets to return
            default: 20
            title: Limit
          description: Number of markets to return
        - name: pagination_key
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: Cursor for next page (from previous response)
            title: Pagination Key
          description: Cursor for next page (from previous response)
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OpinionMarketsResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    StatusOption:
      type: string
      enum:
        - open
        - closed
      title: StatusOption
    MarketTypeOption:
      type: string
      enum:
        - binary
        - categorical
      title: MarketTypeOption
    app__api__v1__opinion__markets_list__SortOption:
      type: string
      enum:
        - volume
        - volume_24h
        - volume_7d
        - created
        - created_asc
        - expiration
      title: SortOption
    OpinionMarketsResponse:
      properties:
        markets:
          items:
            $ref: '#/components/schemas/OpinionMarket'
          type: array
          title: Markets
        pagination:
          $ref: '#/components/schemas/CursorPagination'
      type: object
      required:
        - markets
        - pagination
      title: OpinionMarketsResponse
      description: Response for Opinion markets list endpoint.
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    OpinionMarket:
      properties:
        market_id:
          type: integer
          title: Market Id
        title:
          type: string
          title: Title
        slug:
          type: string
          title: Slug
        description:
          type: string
          title: Description
          default: ''
        status:
          type: string
          title: Status
        outcomes:
          items:
            $ref: '#/components/schemas/OpinionOutcome'
          type: array
          title: Outcomes
        total_volume_usd:
          type: number
          title: Total Volume Usd
          default: 0
        volume_24h_usd:
          type: number
          title: Volume 24H Usd
          default: 0
        volume_7d_usd:
          type: number
          title: Volume 7D Usd
          default: 0
        condition_id:
          type: string
          title: Condition Id
          default: ''
        question_id:
          type: string
          title: Question Id
          default: ''
        result_token_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Result Token Id
        event_id:
          anyOf:
            - type: integer
            - type: 'null'
          title: Event Id
        event_slug:
          anyOf:
            - type: string
            - type: 'null'
          title: Event Slug
        event_title:
          anyOf:
            - type: string
            - type: 'null'
          title: Event Title
        labels:
          items:
            type: string
          type: array
          title: Labels
          default: []
        thumbnail_url:
          type: string
          title: Thumbnail Url
          default: ''
        chain_id:
          type: string
          title: Chain Id
          default: ''
        quote_token:
          type: string
          title: Quote Token
          default: ''
        collection:
          anyOf:
            - $ref: '#/components/schemas/OpinionCollection'
            - type: 'null'
        created_time:
          anyOf:
            - type: string
            - type: 'null'
          title: Created Time
          description: ISO 8601 timestamp
        cutoff_time:
          anyOf:
            - type: string
            - type: 'null'
          title: Cutoff Time
          description: ISO 8601 timestamp
        resolved_time:
          anyOf:
            - type: string
            - type: 'null'
          title: Resolved Time
          description: ISO 8601 timestamp
      type: object
      required:
        - market_id
        - title
        - slug
        - status
        - outcomes
      title: OpinionMarket
      description: Opinion market response model.
    CursorPagination:
      properties:
        limit:
          type: integer
          title: Limit
          description: Requested limit
        count:
          type: integer
          title: Count
          description: Number of items in current response
        pagination_key:
          anyOf:
            - type: string
            - type: 'null'
          title: Pagination Key
          description: Base64-encoded cursor for next page
        has_more:
          type: boolean
          title: Has More
          description: Whether there are more items available
      type: object
      required:
        - limit
        - count
        - has_more
      title: CursorPagination
      description: Cursor-based pagination for endpoints that don't support offset.
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
    OpinionOutcome:
      properties:
        label:
          type: string
          title: Label
        token_id:
          type: string
          title: Token Id
          default: ''
        predexon_id:
          type: string
          title: Predexon Id
          default: ''
        price:
          anyOf:
            - type: number
            - type: 'null'
          title: Price
      type: object
      required:
        - label
      title: OpinionOutcome
      description: A single tradeable outcome for an Opinion market.
    OpinionCollection:
      properties:
        title:
          type: string
          title: Title
        symbol:
          type: string
          title: Symbol
        frequency:
          type: string
          title: Frequency
      type: object
      required:
        - title
        - symbol
        - frequency
      title: OpinionCollection
      description: Recurring market collection metadata.
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key

````