---
title: "Get 5m/15m/1h crypto up-or-down prediction markets for a window"
method: GET
path: "/markets/crypto"
tags: ["Markets"]
---

# Get 5m/15m/1h crypto up-or-down prediction markets for a window

`GET /markets/crypto`

## Request

- Base URL: `https://data.kairos.trade`
- URL: `https://data.kairos.trade/markets/crypto`
- Auth: API key in header `X-Client-Id` and API key in header `X-Api-Key` and API key in header `X-Api-Secret`

Returns the crypto up/down markets (BTC/ETH/SOL/XRP on Kalshi + Polymarket, plus DOGE/HYPE/BNB and predict.fun on some intervals) for one time window. `window_offset` shifts by whole windows of the chosen `interval` (0=current, -1=previous, +1=next, etc.). Responses are cached so UI "previous/next window" navigation doesn't repeatedly re-fetch from upstream. Confirmed past windows are cached longer; historical Polymarket payloads with unresolved or unavailable results expire within 30 seconds. Future/current windows are refreshed more often since they're still filling in. A window is only cached once it has enough data from both venues; past windows relax that requirement for Kalshi, since Kalshi removes settled contracts from its API. **Price scale note:** `price` is a raw **0–1 decimal** probability read/derived directly from each venue's order book — NOT the platform's usual 0–100 cents scale.

## Query parameters

- `interval` '5m' | '15m' | '1h'
- `window_offset` integer

## Response `200`

Crypto markets for the requested window.

- MarketsCryptoResponse
  - `markets` MarketsCryptoMarket[], required
    - `symbol` 'BTC' | 'ETH' | 'SOL' | 'XRP' | 'DOGE' | 'HYPE' | 'BNB', required
    - `name` string, required: Human-readable market title (Kalshi titles get an appended open/close time range).
    - `market_id` string, required: Kalshi ticker or Polymarket/predict.fun market id.
    - `token_id` string, nullable: Polymarket/predict.fun CLOB token id (the "Yes" token where resolvable). Absent for Kalshi entries.
    - `provider_id` integer, required
    - `price` number, nullable: Legacy 0-1 quote or confirmed binary payout. Historical Polymarket rows carry the payout here only when is_settled is true. Use market_price for the observed quote and settlement_price for the payout. Null when no quote or binary payout is available.
    - `market_price` number, nullable: Historical Polymarket observed quote on the 0-1 scale, independent of settlement. A quote or elapsed window does not certify a winner. Null when no quote is available.
    - `settlement_price` number, nullable: Confirmed historical Polymarket payout on the 0-1 scale, including zero and fractional payouts. Only exactly 1 or 0 supports an UP or DOWN label. Null without confirmed evidence.
    - `settlement_status` 'confirmed' | 'unresolved' | 'unavailable': Historical Polymarket finality. Confirmed means a validated payout is available; unresolved means no final result was found by an available lookup; unavailable means the lookup failed or final venue data could not establish a valid payout.
    - `is_settled` boolean, required: Legacy settled-result flag. On historical Polymarket rows, true only for confirmed binary payouts, with price exactly 0 or 1. Use settlement_status for finality, including fractional payouts.
    - `is_upcoming` boolean: Only present on some current-window Kalshi entries — true if the market is in Kalshi's "initialized"/"unopened" pre-launch state.
    - `open_time` string, nullable: Only present on some current-window Kalshi entries.
  - `window_offset` integer, required

## Other responses

- `400`: Invalid `interval` (must be 5m, 15m, or 1h).
- `401`: No valid credential presented — missing/invalid API-key headers, or an invalid/expired session token.
- `403`: Authenticated but not permitted. Three distinct causes: the session user is not invited (`Invite required`), the API key lacks the operation's scope, or API-key access to the requested venue is switched off (`API access is disabled for <provider>`). Admin and API-key callers bypass the invite check; session and admin callers bypass scope and venue checks.
- `422`: Request failed FastAPI parameter validation.
- `429`: 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.
- `500`: Upstream fetch (Kalshi/Polymarket/predict.fun) failed.

---

[API](https://skmtc.dev/kairos/apis/kairos-data-api.md) - [All operations](https://skmtc.dev/kairos/apis/kairos-data-api/llms.txt) - [OpenAPI document](https://skmtc.dev/kairos/apis/kairos-data-api/revisions/cf6b76079e38?raw)
