Pred Market Discovery API

Market information and discovery (public; no auth). Use this section to understand **parent_market_id** and **market_id** and to list all markets. ## What are parent_market_id and market_id? - **parent_market_id:** Identifies a parent market (e.g. a fixture or event). It groups one or more child markets. Order and orderbook paths are scoped by parent (e.g. `GET /api/v1/order/{parentMarketID}/orderbook/{marketID}`). Cancel and open-orders endpoints are also per parent. - **market_id:** Identifies a specific (child) market within a parent (e.g. one outcome: Team A, Team B, or Draw). Used in place order body (`market_id`), orderbook path (`marketID`), and cancel body. Each parent can have multiple child markets; each child has its own `market_id`. You need both when placing orders (parent in the path, market_id in the body) and when fetching orderbooks (parent and market in the path). ## Getting parent_market_id and market_id **Get all markets:** Call `GET /api/v1/market-discovery/discover?verbose=true&limit=50&offset=0`, then continue paging with `offset += limit` until all `data.total` rows are consumed. `verbose=true` is required for the trading-critical fields that non-verbose responses can omit: `parent_market_data.parent_market_id`, `parent_market_data.contract_address`, `parent_market_data.parent_market_type`, `parent_market_data.parent_market_family`, and fixture fields such as `fixture.fixture_id` and `fixture.game_start_time`. The response shape is `data.parent_markets_list[]`, where each entry has `parent_market_data`, optional `fixture`, optional `team_data`, and child `markets[]`. **Runtime eligibility used by market-maker style clients:** first filter your own configured markets to `active`; then require the discovered parent row to have `parent_market_data.status == "active"`; then require the specific child row in `markets[]` to have `status == "active"`. Child statuses such as `resolved` or `redeemed` are terminal and should be treated as not quote/trade eligible. For market makers, also validate the Polymarket/PRED orderbook or external liquidity source for the child before enabling quoting. **Important field mapping:** use `parent_market_data.parent_market_id` as the parent path parameter, `markets[].market_id` as the child `market_id`, `parent_market_data.contract_address` as the EIP-712 `verifyingContract`, `parent_market_data.parent_market_family` for family-level config, `parent_market_data.parent_market_type` to distinguish fixtures from generic/futures markets, and `fixture.game_start_time` for fixture/live-window logic. To get details for a single parent (including its child market IDs and statuses), call `GET /api/v1/market-discovery/parents/{parentMarketID}`. ## Endpoints - `GET /api/v1/market-discovery/discover?verbose=true&limit=50&offset=0` — paginated discovery feed for parent markets, child markets, contract addresses, market family/type, and fixture context. - `GET /api/v1/market-discovery/parents/{parentMarketID}` — details for one parent, including child markets.

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/pred-market-discovery-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 email required.

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

OpenAPI Specification

pred-market-discovery-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: PRED Trading Platform Authentication Market Discovery API
  version: 1.0.0
  description: "Required headers, token refresh, and EIP-712 CreateProxy signature for login. For overview, getting started, and environment configuration, see **Overview**.\n\n## Required headers\n\n- `Authorization: Bearer <token>`\n  (for authenticated endpoints)\n- `X-API-Key: <api_key>`\n  (required for login-with-signature only)\n- `X-Wallet-Address: <wallet_address>`\n  (for order and portfolio endpoints)\n- `X-Proxy-Address: <proxy_wallet_address>`\n  (for order and portfolio endpoints)\n\n**Token refresh:** Access tokens are automatically refreshed by the SDK whenever their remaining lifetime drops below the configured threshold. The default threshold is **5 minutes**, and can be overridden via the `RefreshThresholdSeconds` client option.\n\n## EIP-712 login signature — CreateProxy\n\nFormat: `0x<r><s><v>` (132 hex characters). Low-s normalized: `s <= curveOrderHalf`.\n\n**Domain (NO version field):** All values below are ENV-specific; use the row for your chosen environment (see Environment configuration in **Overview**).\n```\nEIP712Domain type: \"EIP712Domain(string name,uint256 chainId,address verifyingContract)\"\nname: \"Pred Contract Proxy Factory\"\nchainId:        <Chain ID from environment table — Testnet 84532, Mainnet 8453>\nverifyingContract: <Login Contract from environment table>\n```\n\n**Message:**\n```\nCreateProxy type: \"CreateProxy(address paymentToken,uint256 payment,address paymentReceiver)\"\npaymentToken: 0x0000000000000000000000000000000000000000\npayment: 0\npaymentReceiver: 0x0000000000000000000000000000000000000000\n```\n\n**Normalization constants:**\n- `curveOrder = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141`\n- `curveOrderHalf = 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0`\n"
servers:
- url: https://testnet.pred.app
  description: Testnet (ENV-specific). Base Sepolia; chain ID 84532. Use with Testnet row in Environment configuration.
- url: https://www.pred.app
  description: Mainnet (ENV-specific). Base; chain ID 8453. Use with Mainnet row in Environment configuration.
tags:
- name: Market Discovery
  description: 'Market information and discovery (public; no auth). Use this section to understand **parent_market_id** and **market_id** and to list all markets.


    ## What are parent_market_id and market_id?


    - **parent_market_id:** Identifies a parent market (e.g. a fixture or event). It groups one or more child markets. Order and orderbook paths are scoped by parent (e.g. `GET /api/v1/order/{parentMarketID}/orderbook/{marketID}`). Cancel and open-orders endpoints are also per parent.

    - **market_id:** Identifies a specific (child) market within a parent (e.g. one outcome: Team A, Team B, or Draw). Used in place order body (`market_id`), orderbook path (`marketID`), and cancel body. Each parent can have multiple child markets; each child has its own `market_id`.


    You need both when placing orders (parent in the path, market_id in the body) and when fetching orderbooks (parent and market in the path).


    ## Getting parent_market_id and market_id


    **Get all markets:** Call `GET /api/v1/market-discovery/discover?verbose=true&limit=50&offset=0`, then continue paging with `offset += limit` until all `data.total` rows are consumed. `verbose=true` is required for the trading-critical fields that non-verbose responses can omit: `parent_market_data.parent_market_id`, `parent_market_data.contract_address`, `parent_market_data.parent_market_type`, `parent_market_data.parent_market_family`, and fixture fields such as `fixture.fixture_id` and `fixture.game_start_time`. The response shape is `data.parent_markets_list[]`, where each entry has `parent_market_data`, optional `fixture`, optional `team_data`, and child `markets[]`.


    **Runtime eligibility used by market-maker style clients:** first filter your own configured markets to `active`; then require the discovered parent row to have `parent_market_data.status == "active"`; then require the specific child row in `markets[]` to have `status == "active"`. Child statuses such as `resolved` or `redeemed` are terminal and should be treated as not quote/trade eligible. For market makers, also validate the Polymarket/PRED orderbook or external liquidity source for the child before enabling quoting.


    **Important field mapping:** use `parent_market_data.parent_market_id` as the parent path parameter, `markets[].market_id` as the child `market_id`, `parent_market_data.contract_address` as the EIP-712 `verifyingContract`, `parent_market_data.parent_market_family` for family-level config, `parent_market_data.parent_market_type` to distinguish fixtures from generic/futures markets, and `fixture.game_start_time` for fixture/live-window logic.


    To get details for a single parent (including its child market IDs and statuses), call `GET /api/v1/market-discovery/parents/{parentMarketID}`.


    ## Endpoints


    - `GET /api/v1/market-discovery/discover?verbose=true&limit=50&offset=0` — paginated discovery feed for parent markets, child markets, contract addresses, market family/type, and fixture context.

    - `GET /api/v1/market-discovery/parents/{parentMarketID}` — details for one parent, including child markets.

    '
paths:
  /api/v1/market-discovery/discover:
    get:
      tags:
      - Market Discovery
      summary: Get market discovery feed
      description: 'Returns discovery entries with parent market data, fixture context, team data, and markets.

        Trading clients should call this endpoint with `verbose=true` and paginate with `limit`/`offset`

        until `data.total` is exhausted. Recommended page size for SDK/market-maker style clients is

        `limit=50`; avoid bursts above roughly 10 discovery requests per second.


        `verbose=true` is required so `parent_market_data.parent_market_id`,

        `parent_market_data.contract_address`, `parent_market_data.parent_market_type`,

        `parent_market_data.parent_market_family`, and fixture metadata are included reliably.

        Non-verbose responses can omit these fields.


        Use `data.parent_markets_list[].parent_market_data.contract_address` as EIP-712

        `verifyingContract` when signing place orders for that parent market.


        Runtime eligibility convention used by market-maker style clients:

        - require parent `parent_market_data.status == "active"`;

        - require the target child `markets[].status == "active"`;

        - treat child statuses such as `resolved` or `redeemed` as terminal/not quote eligible;

        - validate external/orderbook liquidity before enabling a market for automated quoting.

        **Public endpoint — no auth required.**

        '
      operationId: getAllParentMarkets
      parameters:
      - name: verbose
        in: query
        required: false
        description: Must be true for trading clients; includes parent_market_id, contract_address, parent_market_type, parent_market_family, fixture metadata, and other verbose parent fields.
        schema:
          type: boolean
          default: true
      - name: limit
        in: query
        required: false
        description: Pagination limit. Recommended value for full-feed clients is 50; continue paging until data.total is exhausted.
        schema:
          type: integer
          default: 20
      - name: offset
        in: query
        required: false
        description: Pagination offset. Start at 0 and increment by limit for each page.
        schema:
          type: integer
          default: 0
      responses:
        '200':
          description: Discovery feed response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MarketDiscoveryDiscoverResponse'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /api/v1/market-discovery/parents/{parentMarketID}:
    get:
      tags:
      - Market Discovery
      summary: Get parent market details
      description: 'Get parent market details including child market IDs and statuses.

        Use this when you already know a parent market ID and need to confirm its current

        parent status, child `markets[].status`, market family/type, and contract address.

        For full-market discovery, prefer the paginated

        `GET /api/v1/market-discovery/discover?verbose=true&limit=50&offset=0` flow.


        Trading/quoting clients should require parent `status == "active"` and child

        `markets[].status == "active"` before enabling a child market. Treat child statuses

        such as `resolved` or `redeemed` as terminal/not quote eligible.

        **Public endpoint — no auth required.**

        '
      operationId: getParentMarketDetails
      parameters:
      - $ref: '#/components/parameters/ParentMarketIDPath'
      responses:
        '200':
          description: Parent market details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ParentMarketDetailsResponse'
        '404':
          description: Parent market not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    MarketDiscoveryDiscoverItem:
      type: object
      properties:
        league_data:
          type: object
          properties:
            league_id:
              type: string
        parent_market_data:
          type: object
          description: Verbose parent market metadata. Trading clients should request `verbose=true` so these fields are populated.
          properties:
            parent_market_id:
              type: string
              description: Parent market ID used in order/orderbook/cancel/open-orders path parameters.
            contract_address:
              type: string
              description: EIP-712 order contract address for this parent market; use as verifyingContract when signing orders.
            parent_market_type:
              type: string
              description: Parent type, for example `fixture` for sports fixtures; non-fixture/generic markets do not have live-score fixture metadata.
            parent_market_family:
              type: string
              description: Parent market family such as moneyline, spread, total, or generic; useful for family-level client config.
            canonical_name:
              type: string
              description: Stable canonical parent market slug/name.
            title:
              type: string
              description: Human-readable parent market title.
            status:
              type: string
              description: Parent market status. Market-maker style clients should require `active`.
            markets_open:
              type: string
              format: date-time
              description: Parent market close/open-until timestamp when provided.
            market_line:
              type: string
        fixture:
          type: object
          properties:
            fixture_id:
              type: string
            game_start_time:
              type: string
              format: date-time
            game_status:
              type: string
            home_team_id:
              type: string
            home_team_score:
              type: integer
            away_team_id:
              type: string
            away_team_score:
              type: integer
            group_by:
              type: string
            match_day:
              type: integer
            canonical_name:
              type: string
        team_data:
          type: array
          items:
            type: object
            properties:
              team_id:
                type: string
              logo_url:
                type: string
              theme_color:
                type: string
        markets:
          type: array
          description: Child markets under this parent. Each child has its own market_id and status.
          items:
            type: object
            properties:
              market_id:
                type: string
                description: Child market ID used as `market_id` in order bodies and orderbook paths.
              name:
                type: string
              team_id:
                type: string
              status:
                type: string
                description: Child market status. Require `active` for trading/quoting; treat `resolved` and `redeemed` as terminal.
    MarketDiscoveryDiscoverResponse:
      type: object
      properties:
        data:
          type: object
          properties:
            parent_markets_list:
              type: array
              description: Paginated list of parent-market discovery entries. Full-feed clients should keep requesting pages until `offset + parent_markets_list.length >= total`.
              items:
                $ref: '#/components/schemas/MarketDiscoveryDiscoverItem'
            aggregated_data:
              type: array
              items:
                type: object
                properties:
                  canonical_name:
                    type: string
                  super_parent_market_volume:
                    type: string
            limit:
              type: integer
            offset:
              type: integer
            total:
              type: integer
              description: Total number of parent-market entries available across all pages.
    ErrorResponse:
      type: object
      properties:
        error:
          $ref: '#/components/schemas/Error'
        message:
          type: string
        success:
          type: boolean
          default: false
    ParentMarketDetailsResponse:
      type: object
      properties:
        data:
          type: object
          properties:
            parent_market_data:
              type: object
              properties:
                parent_market_id:
                  type: string
                canonical_name:
                  type: string
                title:
                  type: string
                markets_open:
                  type: string
                  format: date-time
                status:
                  type: string
                parent_market_family:
                  type: string
                market_line:
                  type: string
                rules:
                  type: string
                parent_market_volume:
                  type: string
                contract_type:
                  type: string
                contract_address:
                  type: string
                logo_url:
                  type: string
                theme_color:
                  type: string
                parent_market_type:
                  type: string
            markets:
              type: array
              items:
                type: object
                properties:
                  market_id:
                    type: string
                  team_id:
                    type: string
                  name:
                    type: string
                  logo_url:
                    type: string
                  alternate_name:
                    type: string
                  status:
                    type: string
                  tick_size:
                    type: string
                  rules:
                    type: string
                  ltp:
                    type: string
                  volume:
                    type: string
                  mid_price:
                    type: string
                  percentage_change:
                    type: string
    Error:
      type: object
      properties:
        code:
          type: string
        message:
          type: string
        details:
          type: string
  parameters:
    ParentMarketIDPath:
      name: parentMarketID
      in: path
      required: true
      description: Parent market ID (bytes32 hex). See **Market Discovery** for what parent_market_id is and how to get it (e.g. from GET /api/v1/market-discovery/discover).
      schema:
        type: string
        pattern: ^0x[a-fA-F0-9]{64}$
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: JWT access token from login endpoint