{
  "opencollection": "1.0.0",
  "info": {
    "name": "Totalis RFQ API Keys Markets API",
    "version": "2.1.0"
  },
  "request": {
    "auth": {
      "type": "apikey",
      "key": "X-API-Key",
      "value": "{{X-API-Key}}",
      "placement": "header"
    }
  },
  "items": [
    {
      "info": {
        "name": "Markets",
        "type": "folder"
      },
      "items": [
        {
          "info": {
            "name": "List Markets",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.totalis.trade/markets",
            "params": [
              {
                "name": "category",
                "value": "",
                "type": "query",
                "description": "Filter by category. Pass `all` to disable the default category filter."
              },
              {
                "name": "venue",
                "value": "",
                "type": "query",
                "description": "Filter by venue. Omit to include all venues."
              },
              {
                "name": "subcategory",
                "value": "",
                "type": "query",
                "description": "Filter events by subcategory. Valid values depend on the selected `category` (requires `category` to also be set)."
              },
              {
                "name": "frequency",
                "value": "",
                "type": "query",
                "description": "Filter events by the cadence of the underlying series. `other` is intentionally rejected — it's a residual response bucket, not a filter target."
              },
              {
                "name": "date_filter",
                "value": "",
                "type": "query",
                "description": "Time bucket filter. If omitted, a default 7-day horizon is applied. Pass `all` to retrieve all active markets regardless of close date."
              },
              {
                "name": "search",
                "value": "",
                "type": "query",
                "description": "Full-text search across event/market titles."
              },
              {
                "name": "cursor",
                "value": "",
                "type": "query",
                "description": "Opaque pagination cursor from a previous response's `meta.cursor`. Do not construct manually."
              },
              {
                "name": "limit",
                "value": "",
                "type": "query",
                "description": "Events per page. Default 21, max 100. The product `limit × markets_per_event` must not exceed 2000."
              },
              {
                "name": "markets_per_event",
                "value": "",
                "type": "query",
                "description": "Max markets returned per event group. Default 10, max 50."
              }
            ]
          },
          "docs": "List active markets grouped by event across supported venues (Kalshi and Polymarket). Filters: `category`, `venue`, `subcategory` (validated against the selected category), `frequency` (`daily`/`weekly`/`monthly`/`hourly`), `date_filter` (time bucket), and `search`. Pagination is cursor-based at the event level. The response includes `available_subcategories` and `available_frequencies` so clients can drive filter chips from the same result set."
        },
        {
          "info": {
            "name": "List markets (flat)",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.totalis.trade/v1/markets/list",
            "params": [
              {
                "name": "category",
                "value": "",
                "type": "query",
                "description": "Filter by category, e.g. `sports` or `crypto`."
              },
              {
                "name": "venue",
                "value": "",
                "type": "query",
                "description": "Filter by venue: `kalshi` or `polymarket`."
              },
              {
                "name": "subcategory",
                "value": "",
                "type": "query",
                "description": "Filter by subcategory, e.g. `world_cup`. Requires `category`."
              },
              {
                "name": "frequency",
                "value": "",
                "type": "query",
                "description": "Filter by series cadence: `daily`, `weekly`, `monthly`, or `hourly`."
              },
              {
                "name": "series_ticker",
                "value": "",
                "type": "query",
                "description": "Filter by one or more series, comma-separated and case-sensitive, e.g. `KXWCAST,KXWCTCORNERS`. Up to 100."
              },
              {
                "name": "status",
                "value": "",
                "type": "query",
                "description": "Filter by status. Defaults to tradeable markets (`active,open`); pass a comma-separated list of `active`, `open`, `closed`, `settled`, `finalized`, or `all`. An empty or unrecognised value returns 400."
              },
              {
                "name": "cursor",
                "value": "",
                "type": "query",
                "description": "Opaque pagination cursor from a previous response's `meta.cursor`. Do not construct manually."
              },
              {
                "name": "limit",
                "value": "",
                "type": "query",
                "description": "Number of markets per page, from 1 to 500. Defaults to 100. Only the first 10,000 matches are reachable — narrow the filters to page further."
              }
            ]
          },
          "docs": "Returns a paginated list of individual markets, most-traded first. Unlike the event-grouped `GET /markets`, results aren't grouped by event and are never capped per event, so every market is reachable. Filter by venue, category, subcategory, or one or more series.\n\nPaginate with `cursor` until it returns `null`; `meta.total` is the total number of matches. For a complete sync, de-duplicate by `ticker` — markets with equal volume aren't guaranteed a stable order between requests. Scoping to a `su"
        },
        {
          "info": {
            "name": "Get Market",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.totalis.trade/markets/:ticker",
            "params": [
              {
                "name": "ticker",
                "value": "",
                "type": "path",
                "description": "Kalshi market ticker or Polymarket `condition_id`."
              },
              {
                "name": "venue",
                "value": "",
                "type": "query",
                "description": "Optional venue hint. Use this when the caller already knows whether the ticker belongs to Kalshi or Polymarket."
              }
            ]
          },
          "docs": "Fetch a single Kalshi market by ticker or a single Polymarket market by condition ID. When `venue` is omitted, the API infers Polymarket for condition IDs that look like `0x...`; otherwise it looks up the market as Kalshi."
        }
      ]
    }
  ],
  "bundled": true
}