{ "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 }