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

# List perpetual venue capabilities

> Returns the supported perpetual venue identifiers and their public-data
capabilities. This is metadata owned by the Python Data API. It does not
serve books, trades, candles, funding observations, or WebSocket data.

This preview exists only in Kairos staging. When the preview flag is
disabled, the route fails closed with 404. Live REST snapshots are served
separately by the Market Data API; anonymous WebSocket transport is served by
`websocket_cpp`.




## OpenAPI

````yaml /openapi/data-api.yaml get /perpetuals/venues
openapi: 3.1.0
info:
  title: Kairos Data API
  version: 1.0.0
  summary: >-
    The full Kairos data plane — markets, candles, trades, search, discover,
    sports, trader analytics, and PnL.
  description: |
    The Kairos Data API at `data.kairos.trade` is the platform's primary data
    plane: market metadata and prices, OHLCV candles, live venue trade proxies,
    normalized trade history, full-text search, discovery feeds, the sports
    catalog, public trader analytics, and account PnL.

    ## Authentication

    Most endpoints accept a Kairos **API key** (`X-Client-Id` + `X-Api-Key` +
    `X-Api-Secret`, all three) or a first-party session JWT. Endpoints tagged
    `public` (trader analytics, provider configs, several sports feeds) need
    no credentials at all. Some endpoints additionally require an API-key
    **scope** (`trade:read`, `position:read`) — stated per operation.

    For high-volume market-data consumption (candles/trades/metadata at
    scale), prefer the dedicated **Market Data API** at `md.kairos.trade` —
    it has higher budgets, ETag caching, and a binary candle format.

    ## Rate limits

    Rate limits use a sliding window keyed on the authenticated user (JWT
    `sub`) or, for anonymous callers, the trusted client IP. Routes belong to
    a named **bucket** (`x-kairos-bucket`) whose per-minute budget is shared
    by every route in it; routes with no bucket run under the service default
    of 100/minute. `x-kairos-rate-limit` states the bucket's compile-time
    default — operators can raise or lower a bucket at runtime, so treat the
    documented number as the baseline, not a contract. 429 responses carry
    `Retry-After` and `X-RateLimit-*`.

    ## Conventions

    - Prices are on the **0–100 cents scale** unless a field says otherwise
      (trader-analytics position/trade prices use the 0–1 scale; each field's
      description states its scale).
    - Errors: `{"detail": "<message>"}` for handler errors; FastAPI's
      standard validation envelope for 422s. Errors surfaced from a venue
      adapter instead use `{"error", "provider", "operation", "message"}` —
      see `DataProviderError`. Unhandled failures always return the generic
      500 body; internal details are logged, never returned.
    - Every request body is capped at 8 MiB service-wide (413).
  contact:
    name: Kairos
    url: https://app.kairos.trade/docs/api-reference
  termsOfService: https://kairos.trade/terms
servers:
  - url: https://data.kairos.trade
    description: Production
  - url: https://staging-data.kairos.trade
    description: Staging
security:
  - apiKeyClientId: []
    apiKeyKey: []
    apiKeySecret: []
paths:
  /perpetuals/venues:
    get:
      tags:
        - Perpetuals
      summary: List perpetual venue capabilities
      description: >
        Returns the supported perpetual venue identifiers and their public-data

        capabilities. This is metadata owned by the Python Data API. It does not

        serve books, trades, candles, funding observations, or WebSocket data.


        This preview exists only in Kairos staging. When the preview flag is

        disabled, the route fails closed with 404. Live REST snapshots are
        served

        separately by the Market Data API; anonymous WebSocket transport is
        served by

        `websocket_cpp`.
      operationId: listPerpetualVenues
      parameters: []
      responses:
        '200':
          description: Canonical venue capability records.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PerpetualVenueCapabilities'
        '404':
          description: The staging preview is disabled.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DataError'
              example:
                detail: Perpetual metadata is disabled
        '429':
          $ref: '#/components/responses/DataRateLimited'
      security: []
      servers:
        - url: https://staging-data.kairos.trade
          description: Staging preview only
components:
  schemas:
    PerpetualVenueCapabilities:
      type: object
      additionalProperties: false
      required:
        - venue
        - environment
        - market_data_service
        - instruments
        - book
        - trades
        - candles
        - funding
        - market_state
        - notes
      properties:
        venue:
          $ref: '#/components/schemas/PerpetualVenue'
        environment:
          type: string
          description: Venue-native environment name; do not infer it from Kairos staging.
        market_data_service:
          type: string
          const: agora
          description: >-
            Legacy compatibility identifier; live REST snapshots are owned by
            the Market Data API, not this metadata endpoint.
        instruments:
          type: boolean
        book:
          type: boolean
        trades:
          type: boolean
        candles:
          type: boolean
        funding:
          type: boolean
        market_state:
          type: boolean
        notes:
          type: array
          items:
            type: string
    DataError:
      type: object
      description: Handler error envelope (FastAPI HTTPException).
      required:
        - detail
      properties:
        detail:
          type: string
          description: Human-readable error message.
          example: Invalid provider
    PerpetualVenue:
      type: string
      description: Canonical perpetual venue identifier.
      enum:
        - hyperliquid
        - polymarket_perps
        - kalshi_margin
  responses:
    DataRateLimited:
      description: >
        Rate limit exceeded for this route's sliding window, keyed on the
        session `sub` when

        authenticated and on the trusted client IP otherwise. Honor
        `Retry-After`. A per-API-key

        data ceiling (set per credential) rejects with `{"detail": "API key data
        rate limit

        exceeded"}` instead of the `error` envelope below.
      headers:
        Retry-After:
          schema:
            type: integer
        X-RateLimit-Limit:
          schema:
            type: integer
        X-RateLimit-Remaining:
          schema:
            type: integer
        X-RateLimit-Reset:
          schema:
            type: integer
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                type: string
                example: 'Rate limit exceeded: 100 per 1 minute'
  securitySchemes:
    apiKeyClientId:
      type: apiKey
      in: header
      name: X-Client-Id
      description: >-
        Credential client id (`kairos_ck_...`). Must be sent together with
        X-Api-Key and X-Api-Secret.
    apiKeyKey:
      type: apiKey
      in: header
      name: X-Api-Key
      description: 64-char hex API key.
    apiKeySecret:
      type: apiKey
      in: header
      name: X-Api-Secret
      description: 64-char hex API secret.

````

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