---
title: "Recent form: where this roster has been winning"
method: GET
path: "/api/v1/markets/hot"
tags: ["Live (API key)"]
---

# Recent form: where this roster has been winning

`GET /api/v1/markets/hot`

## Request

- Base URL: `https://kalshispy.com`
- URL: `https://kalshispy.com/api/v1/markets/hot`
- Auth: HTTP bearer

Roster form rebuilt hourly from PAST settled trades: the markets with the most realized profit (and which traders won them), each trader's current streak and last results (e.g. "WWLWW"), and per-category win rates. Use it to judge whether the roster has a record in the category a market belongs to. Requires a KalshiSpy API key.

## Response `200`

OK

- object
  - `ok` true, required
  - `data` HotMarkets, required
    - `built_at` string, date-time, nullable
    - `hot` object[]
      - `ticker` string
      - `event_ticker` string
      - `series_ticker` string
      - `question` string
      - `category` string
      - `category_key` 'politics' | 'elections' | 'sports' | 'entertainment' | 'economics' | 'financials' | 'crypto' | 'weather' | 'world' | 'scitech' | 'companies' | 'health' | 'social' | 'transportation' | 'mentions' | 'exotics' | 'other'
      - `total_profit_usd` number
      - `winners` string[]
      - `wins_count` integer
      - `when` string
      - `kalshi_url` string, uri
    - `form` object
      - `traders` object[]
        - `nickname` string
        - `streak` integer
        - `last` string: Most recent first, e.g. "WWLWW".
        - `pnl_usd` number
      - `categories` object[]
        - `category` string
        - `category_key` 'politics' | 'elections' | 'sports' | 'entertainment' | 'economics' | 'financials' | 'crypto' | 'weather' | 'world' | 'scitech' | 'companies' | 'health' | 'social' | 'transportation' | 'mentions' | 'exotics' | 'other'
        - `pnl_usd` number
        - `wins` integer
        - `losses` integer
        - `win_rate_pct` number
  - `meta` Meta, required
    - `generated_at` string, date-time
    - `definition` string
    - `verification` string
    - `docs` string, uri
    - `attribution` string
  - `hints` Hints, required
    - `tip` string
    - `next_steps` object[]
      - `label` string
      - `url` string, uri
      - `auth` 'api_key'
    - `similar` SettledWin[]
      - `ticker` string
      - `title` string
      - `outcome` string: Kalshi's short outcome label; empty for plain Yes/No markets.
      - `category` string
      - `category_key` 'politics' | 'elections' | 'sports' | 'entertainment' | 'economics' | 'financials' | 'crypto' | 'weather' | 'world' | 'scitech' | 'companies' | 'health' | 'social' | 'transportation' | 'mentions' | 'exotics' | 'other'
      - `series_ticker` string
      - `event_ticker` string
      - `result` 'yes' | 'no'
      - `settled_at` string, date-time
      - `whale_count` integer
      - `dissent_count` integer
      - `consensus_side` 'YES' | 'NO'
      - `consensus_pct` number
      - `net_profit_usd` number
      - `winners_profit_usd` number
      - `whales` SettledWhale[]
        - `nickname` string
        - `side` 'YES' | 'NO'
        - `profit_usd` number
      - `url` string, uri
      - `kalshi_url` string, uri

## Other responses

- `400`: Invalid parameter (`error.param` names it) or invalid cursor.
- `401`: Missing, malformed, unknown or revoked API key.
- `403`: The plan on this account has no API access (`error.upgrade_url`).
- `429`: Daily quota reached; `Retry-After` and `error.resets_at` say when it resets.
- `503`: Temporarily unavailable; retry shortly. The quota unit is given back, up to a daily refund budget.

---

[API](https://skmtc.dev/kalshispy/apis/kalshispy-api.md) · [All operations](https://skmtc.dev/kalshispy/apis/kalshispy-api/llms.txt) · [OpenAPI document](https://skmtc.dev/kalshispy/apis/kalshispy-api/revisions/5f483277dadc?raw)
