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

# Fetch Event Metadata

> Fetch venue-native metadata for a specific event when the exchange exposes a dedicated metadata endpoint. Kalshi implements this for `GET /events/{event_ticker}/metadata`.



## OpenAPI

````yaml /api-reference/openapi.json get /api/{exchange}/fetchEventMetadata
openapi: 3.0.0
info:
  title: PMXT Hosted API
  description: >-
    One API for supported prediction markets. Hosted catalog search in under
    10ms, a unified schema for supported venues, and venue-native trading where
    venues expose writes.
  version: 2.54.0
servers:
  - url: https://api.pmxt.dev
    description: Hosted PMXT (production)
security: []
tags:
  - name: Hosted
    description: >-
      Requires a PMXT API key. These endpoints use the cross-venue catalog and
      have no local equivalent.
  - name: Local Only
    description: >-
      Executed locally by the SDK against the venue. Never proxied through PMXT
      servers.
  - name: Data Feeds
    description: >-
      Auxiliary price and oracle data feeds (Binance, Chainlink).
      CCXT-compatible method names and response shapes.
paths:
  /api/{exchange}/fetchEventMetadata:
    get:
      summary: Fetch Event Metadata
      description: >-
        Fetch venue-native metadata for a specific event when the exchange
        exposes a dedicated metadata endpoint. Kalshi implements this for `GET
        /events/{event_ticker}/metadata`.
      operationId: fetchEventMetadata
      parameters:
        - $ref: '#/components/parameters/ExchangeParam'
        - in: query
          name: eventTicker
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Fetch Event Metadata response
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/BaseResponse'
                  - type: object
                    properties:
                      data:
                        type: object
                        additionalProperties: {}
      security: []
      x-codeSamples:
        - lang: python
          label: Polymarket
          source: |-
            import pmxt

            # API key optional — enables faster catalog-backed lookups
            exchange = pmxt.Polymarket(
                pmxt_api_key="YOUR_PMXT_API_KEY",
            )
            result = exchange.fetch_event_metadata(event_ticker="value")
        - lang: python
          label: Limitless
          source: |-
            import pmxt

            # API key optional — enables faster catalog-backed lookups
            exchange = pmxt.Limitless(
                pmxt_api_key="YOUR_PMXT_API_KEY",
            )
            result = exchange.fetch_event_metadata(event_ticker="value")
        - lang: python
          label: Kalshi
          source: |-
            import pmxt

            # API key optional — enables faster catalog-backed lookups
            exchange = pmxt.Kalshi(
                pmxt_api_key="YOUR_PMXT_API_KEY",
            )
            result = exchange.fetch_event_metadata(event_ticker="value")
        - lang: python
          label: KalshiDemo
          source: |-
            import pmxt

            # API key optional — enables faster catalog-backed lookups
            exchange = pmxt.KalshiDemo(
                pmxt_api_key="YOUR_PMXT_API_KEY",
            )
            result = exchange.fetch_event_metadata(event_ticker="value")
        - lang: python
          label: Probable
          source: |-
            import pmxt

            # API key optional — enables faster catalog-backed lookups
            exchange = pmxt.Probable(
                pmxt_api_key="YOUR_PMXT_API_KEY",
            )
            result = exchange.fetch_event_metadata(event_ticker="value")
        - lang: python
          label: Baozi
          source: |-
            import pmxt

            # API key optional — enables faster catalog-backed lookups
            exchange = pmxt.Baozi(
                pmxt_api_key="YOUR_PMXT_API_KEY",
            )
            result = exchange.fetch_event_metadata(event_ticker="value")
        - lang: python
          label: Myriad
          source: |-
            import pmxt

            # API key optional — enables faster catalog-backed lookups
            exchange = pmxt.Myriad(
                pmxt_api_key="YOUR_PMXT_API_KEY",
            )
            result = exchange.fetch_event_metadata(event_ticker="value")
        - lang: python
          label: Opinion
          source: |-
            import pmxt

            # API key optional — enables faster catalog-backed lookups
            exchange = pmxt.Opinion(
                pmxt_api_key="YOUR_PMXT_API_KEY",
            )
            result = exchange.fetch_event_metadata(event_ticker="value")
        - lang: python
          label: Metaculus
          source: |-
            import pmxt

            # API key optional — enables faster catalog-backed lookups
            exchange = pmxt.Metaculus(
                pmxt_api_key="YOUR_PMXT_API_KEY",
            )
            result = exchange.fetch_event_metadata(event_ticker="value")
        - lang: python
          label: Smarkets
          source: |-
            import pmxt

            # API key optional — enables faster catalog-backed lookups
            exchange = pmxt.Smarkets(
                pmxt_api_key="YOUR_PMXT_API_KEY",
            )
            result = exchange.fetch_event_metadata(event_ticker="value")
        - lang: python
          label: PolymarketUS
          source: |-
            import pmxt

            # API key optional — enables faster catalog-backed lookups
            exchange = pmxt.PolymarketUS(
                pmxt_api_key="YOUR_PMXT_API_KEY",
            )
            result = exchange.fetch_event_metadata(event_ticker="value")
        - lang: python
          label: Hyperliquid
          source: |-
            import pmxt

            # API key optional — enables faster catalog-backed lookups
            exchange = pmxt.Hyperliquid(
                pmxt_api_key="YOUR_PMXT_API_KEY",
            )
            result = exchange.fetch_event_metadata(event_ticker="value")
        - lang: python
          label: GeminiTitan
          source: |-
            import pmxt

            # API key optional — enables faster catalog-backed lookups
            exchange = pmxt.GeminiTitan(
                pmxt_api_key="YOUR_PMXT_API_KEY",
            )
            result = exchange.fetch_event_metadata(event_ticker="value")
        - lang: python
          label: SuiBets
          source: |-
            import pmxt

            # API key optional — enables faster catalog-backed lookups
            exchange = pmxt.SuiBets(
                pmxt_api_key="YOUR_PMXT_API_KEY",
            )
            result = exchange.fetch_event_metadata(event_ticker="value")
        - lang: python
          label: Rain
          source: |-
            import pmxt

            # API key optional — enables faster catalog-backed lookups
            exchange = pmxt.Rain(
                pmxt_api_key="YOUR_PMXT_API_KEY",
            )
            result = exchange.fetch_event_metadata(event_ticker="value")
        - lang: python
          label: Hunch
          source: |-
            import pmxt

            # API key optional — enables faster catalog-backed lookups
            exchange = pmxt.Hunch(
                pmxt_api_key="YOUR_PMXT_API_KEY",
            )
            result = exchange.fetch_event_metadata(event_ticker="value")
        - lang: javascript
          label: Polymarket
          source: >-
            import { Polymarket } from "pmxtjs";


            // API key optional — enables faster catalog-backed lookups

            const exchange = new Polymarket({
              pmxtApiKey: "YOUR_PMXT_API_KEY",
            });

            const result = await exchange.fetchEventMetadata({ eventTicker:
            "value" });
        - lang: javascript
          label: Limitless
          source: >-
            import { Limitless } from "pmxtjs";


            // API key optional — enables faster catalog-backed lookups

            const exchange = new Limitless({
              pmxtApiKey: "YOUR_PMXT_API_KEY",
            });

            const result = await exchange.fetchEventMetadata({ eventTicker:
            "value" });
        - lang: javascript
          label: Kalshi
          source: >-
            import { Kalshi } from "pmxtjs";


            // API key optional — enables faster catalog-backed lookups

            const exchange = new Kalshi({
              pmxtApiKey: "YOUR_PMXT_API_KEY",
            });

            const result = await exchange.fetchEventMetadata({ eventTicker:
            "value" });
        - lang: javascript
          label: KalshiDemo
          source: >-
            import { KalshiDemo } from "pmxtjs";


            // API key optional — enables faster catalog-backed lookups

            const exchange = new KalshiDemo({
              pmxtApiKey: "YOUR_PMXT_API_KEY",
            });

            const result = await exchange.fetchEventMetadata({ eventTicker:
            "value" });
        - lang: javascript
          label: Probable
          source: >-
            import { Probable } from "pmxtjs";


            // API key optional — enables faster catalog-backed lookups

            const exchange = new Probable({
              pmxtApiKey: "YOUR_PMXT_API_KEY",
            });

            const result = await exchange.fetchEventMetadata({ eventTicker:
            "value" });
        - lang: javascript
          label: Baozi
          source: >-
            import { Baozi } from "pmxtjs";


            // API key optional — enables faster catalog-backed lookups

            const exchange = new Baozi({
              pmxtApiKey: "YOUR_PMXT_API_KEY",
            });

            const result = await exchange.fetchEventMetadata({ eventTicker:
            "value" });
        - lang: javascript
          label: Myriad
          source: >-
            import { Myriad } from "pmxtjs";


            // API key optional — enables faster catalog-backed lookups

            const exchange = new Myriad({
              pmxtApiKey: "YOUR_PMXT_API_KEY",
            });

            const result = await exchange.fetchEventMetadata({ eventTicker:
            "value" });
        - lang: javascript
          label: Opinion
          source: >-
            import { Opinion } from "pmxtjs";


            // API key optional — enables faster catalog-backed lookups

            const exchange = new Opinion({
              pmxtApiKey: "YOUR_PMXT_API_KEY",
            });

            const result = await exchange.fetchEventMetadata({ eventTicker:
            "value" });
        - lang: javascript
          label: Metaculus
          source: >-
            import { Metaculus } from "pmxtjs";


            // API key optional — enables faster catalog-backed lookups

            const exchange = new Metaculus({
              pmxtApiKey: "YOUR_PMXT_API_KEY",
            });

            const result = await exchange.fetchEventMetadata({ eventTicker:
            "value" });
        - lang: javascript
          label: Smarkets
          source: >-
            import { Smarkets } from "pmxtjs";


            // API key optional — enables faster catalog-backed lookups

            const exchange = new Smarkets({
              pmxtApiKey: "YOUR_PMXT_API_KEY",
            });

            const result = await exchange.fetchEventMetadata({ eventTicker:
            "value" });
        - lang: javascript
          label: PolymarketUS
          source: >-
            import { PolymarketUS } from "pmxtjs";


            // API key optional — enables faster catalog-backed lookups

            const exchange = new PolymarketUS({
              pmxtApiKey: "YOUR_PMXT_API_KEY",
            });

            const result = await exchange.fetchEventMetadata({ eventTicker:
            "value" });
        - lang: javascript
          label: Hyperliquid
          source: >-
            import { Hyperliquid } from "pmxtjs";


            // API key optional — enables faster catalog-backed lookups

            const exchange = new Hyperliquid({
              pmxtApiKey: "YOUR_PMXT_API_KEY",
            });

            const result = await exchange.fetchEventMetadata({ eventTicker:
            "value" });
        - lang: javascript
          label: GeminiTitan
          source: >-
            import { GeminiTitan } from "pmxtjs";


            // API key optional — enables faster catalog-backed lookups

            const exchange = new GeminiTitan({
              pmxtApiKey: "YOUR_PMXT_API_KEY",
            });

            const result = await exchange.fetchEventMetadata({ eventTicker:
            "value" });
        - lang: javascript
          label: SuiBets
          source: >-
            import { SuiBets } from "pmxtjs";


            // API key optional — enables faster catalog-backed lookups

            const exchange = new SuiBets({
              pmxtApiKey: "YOUR_PMXT_API_KEY",
            });

            const result = await exchange.fetchEventMetadata({ eventTicker:
            "value" });
        - lang: javascript
          label: Rain
          source: >-
            import { Rain } from "pmxtjs";


            // API key optional — enables faster catalog-backed lookups

            const exchange = new Rain({
              pmxtApiKey: "YOUR_PMXT_API_KEY",
            });

            const result = await exchange.fetchEventMetadata({ eventTicker:
            "value" });
        - lang: javascript
          label: Hunch
          source: >-
            import { Hunch } from "pmxtjs";


            // API key optional — enables faster catalog-backed lookups

            const exchange = new Hunch({
              pmxtApiKey: "YOUR_PMXT_API_KEY",
            });

            const result = await exchange.fetchEventMetadata({ eventTicker:
            "value" });
components:
  parameters:
    ExchangeParam:
      in: path
      name: exchange
      schema:
        type: string
        enum:
          - polymarket
          - kalshi
          - kalshi-demo
          - limitless
          - probable
          - baozi
          - myriad
          - opinion
          - metaculus
          - smarkets
          - polymarket_us
          - gemini-titan
          - hyperliquid
          - suibets
          - rain
          - hunch
          - router
      required: true
      description: The prediction market exchange to target.
  schemas:
    BaseResponse:
      type: object
      properties:
        success:
          type: boolean
          example: true
        error:
          $ref: '#/components/schemas/ErrorDetail'
    ErrorDetail:
      type: object
      description: >-
        Structured error envelope returned inside `BaseResponse.error` and
        `ErrorResponse.error`. Hosted-mode endpoints populate `code`,
        `retryable`, and optionally `exchange` / `detail`; legacy local-mode
        endpoints may still return only `message`.
      properties:
        message:
          type: string
          description: Human-readable error message.
        code:
          type: string
          description: >-
            Stable machine-readable error code. Hosted-mode errors use the
            `HostedTradingError` family (e.g. `INSUFFICIENT_ESCROW_BALANCE`,
            `BUILT_ORDER_EXPIRED`); pre-hosted local errors use the legacy
            family (e.g. `BAD_REQUEST`, `NOT_FOUND`).
          enum:
            - HOSTED_TRADING_ERROR
            - INSUFFICIENT_ESCROW_BALANCE
            - ORDER_SIZE_TOO_SMALL
            - INVALID_API_KEY
            - OUTCOME_NOT_FOUND
            - CATALOG_UNAVAILABLE
            - BUILT_ORDER_EXPIRED
            - INVALID_SIGNATURE
            - NO_LIQUIDITY
            - MISSING_WALLET_ADDRESS
            - BAD_REQUEST
            - AUTHENTICATION_ERROR
            - PERMISSION_DENIED
            - NOT_FOUND
            - ORDER_NOT_FOUND
            - MARKET_NOT_FOUND
            - EVENT_NOT_FOUND
            - RATE_LIMIT_EXCEEDED
            - INVALID_ORDER
            - INSUFFICIENT_FUNDS
            - VALIDATION_ERROR
            - NETWORK_ERROR
            - EXCHANGE_NOT_AVAILABLE
            - NOT_SUPPORTED
        retryable:
          type: boolean
          description: >-
            Hint for clients: when `true`, the same request may succeed on retry
            (e.g. transient network or rate-limit conditions); when `false`, the
            caller should not retry without modifying the request.
        exchange:
          type: string
          nullable: true
          description: >-
            Venue the error originated from, when known (e.g. 'polymarket',
            'kalshi').
        detail:
          type: object
          additionalProperties: {}
          nullable: true
          description: >-
            Free-form hosted-mode detail blob. Shape depends on `code` — e.g.
            for `INSUFFICIENT_ESCROW_BALANCE` it may include `{ requested,
            available }`; for `ORDER_SIZE_TOO_SMALL` it may include `{ min }`;
            for `BUILT_ORDER_EXPIRED` it may include `{ expiry }`.

````