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

# Kalshi perpetual data and hourly ensembles

> Search and forecast USD-per-contract history without confusing perpetuals with spot assets or binary markets.

Select **Kalshi Perpetuals** in market search or Q Screener. The provider's catalog includes active, inactive and closed listings when returned by Kalshi. Search in **Any** mode to include inactive listings.

Screener combines current reference prices with a scheduled five-model hourly ensemble (Prophet, Toto 4m, Granite, Chronos, TimesFM). Each eligible active listing receives 24 forecast hours and P01/P25/P50/P75/P90/P99. Quantile filters compare the latest observed price with real forecast values; min/max/average statistics span the full horizon. The default row is the first forecast hour. **View forecast** opens the complete distribution and genuine input history; signed-in users can save it to My requests.

The hourly GitHub Actions matrix publishes only when all five models complete with at least 32 genuine hourly trade closes. Missing intervals and null closes stay absent. Listings without sufficient current history retain quotes and an on-demand Forecast action, with no invented quantiles. Failed refreshes preserve the last valid snapshot until its horizon expires. One latest document per ticker keeps storage bounded. Perpetual daily closing alerts are not supported.

## Price basis

The displayed and forecast target is the **underlying-equivalent price in USD per underlying unit**. Kalshi publishes perpetual trade and reference prices scaled per contract, so Quantura divides them by `contract_size × underlying_multiplier`. For example, a $4.37 `KXGOLDPERP` contract with 0.001 units of exposure is displayed near $4,370 per unit. Raw contract prices, contract size, multiplier, and the conversion basis remain available in metadata for auditability. These are continuous price series, not YES/NO probabilities. No orders or account access are part of this integration.

Only actual completed closes are used for history, normalized to the same per-underlying-unit scale. The screener prefers Kalshi's current reference price on that scale and falls back to the latest normalized completed trade. Null closes, synthetic `price.previous` rows, bid/ask substitutes and missing intervals are not filled. Timestamps preserve Kalshi's `end_period_ts` in UTC, including its daily-bar boundary; charts localize their display. Forecasts use calendar/frequency periods, not NYSE sessions.

## Historical downloads

```bash theme={null}
curl 'https://quantura.studio/api/market-data/perps/history?symbol=KXBTCPERP&frequency=1h&limit=500&format=csv' \
  --output KXBTCPERP-hourly.csv
```

Use `format=json` (default) for metadata and warnings. Minute (`1min`), hourly (`1h`) and daily (`1D`) intervals are supported. Optional `start`/`end` are ISO timestamps. Return up to 5,000 rows; split larger downloads into date ranges of no more than 20,000 intervals. The service traverses bounded time windows, not a fabricated pagination cursor. A shorter history is reported as shorter, not padded.

Catalog: `GET /api/market-data/perps/markets`. Downloads: `GET` or `POST /api/market-data/perps/history`. A POST accepts the same fields as JSON. CSV includes original numeric OHLC/volume values; response headers identify provider, UTC and USD-per-contract units. JSON carries the fuller provenance record.

## Asynchronous forecasting

```bash theme={null}
curl 'https://quantura.studio/api/v1/ensemble-forecasts' \
  -H "Authorization: Bearer $QUANTURA_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"source":{"type":"kalshi_perp","symbol":"KXBTCPERP","frequency":"1h","limit":500},"prediction_length":30,"horizon_mode":"frequency_periods","calendar":"NONE","quantiles":[0.01,0.1,0.25,0.5,0.75,0.9,0.99],"transform":"auto","models":{"prophet":{"enabled":true,"weight":1}}}'
```

The existing [ensemble job lifecycle](/docs/ensemble-api), scopes, current workspace membership, quotas, immutable inputs and CSV/JSON result downloads apply. Configured models remain selectable; minimum history and license checks are unchanged. Reading observations never runs extra model inference.

## Provider access and rights

The adapter follows [Kalshi's perpetuals OpenAPI](https://docs.kalshi.com/perps_openapi.yaml). The public market-data mirror is used; no Kalshi account key is sent for market discovery or history. Access may be rate-limited or unavailable. Redistribution and commercial data licensing require review of Kalshi's terms; API access is not proof of redistribution rights.

## Additional intervals

History and forecasting support 5/15/30-minute, 4-hour, weekly and calendar-month periods, aggregated from genuine native closes. Empty and unfinished buckets stay absent. Weekly/monthly history uses Monday/first-of-month UTC boundaries; native daily closes retain their provider boundary. Bounded native history may supply fewer than the requested number of aggregated bars. See [Forecast intervals](/docs/forecast-frequencies).


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