Get Historical Positions
Changed onReturns settled market positions after their event completes the live-to-historical handoff. Until then, settled positions remain available via GET /portfolio/positions?settlement_status=settled. The market_positions_last_updated_ts value on GET /historical/cutoff is the backfill horizon, not a guarantee that every older position has moved. Unsettled positions are available via GET /portfolio/positions.
Request
- Base URLhttps://external-api.kalshi.com/trade-api/v2
- URLhttps://external-api.kalshi.com/trade-api/v2/historical/positions
- AuthAPI key in header KALSHI-ACCESS-KEY and API key in header KALSHI-ACCESS-SIGNATURE and API key in header KALSHI-ACCESS-TIMESTAMP
Query parameters
Filter by market ticker
Event ticker to filter by. Only a single event ticker is supported.
Subaccount number (0 for primary, 1-63 for subaccounts). Defaults to 0. Subaccount-restricted API keys default to their locked subaccount and must omit this parameter or pass their locked subaccount.
Number of results per page. Defaults to 100.
Pagination cursor. Use the cursor value returned from the previous response to get the next page of results. Leave empty for the first page.
Response
Historical positions retrieved successfully
Example response
{
"market_positions": [
{
"total_traded_dollars": "0.5600",
"position_fp": "10.00",
"market_exposure_dollars": "0.5600",
"realized_pnl_dollars": "0.5600",
"fees_paid_dollars": "0.5600"
}
],
"event_positions": [
{
"total_cost_dollars": "0.5600",
"total_cost_shares_fp": "10.00",
"event_exposure_dollars": "0.5600",
"realized_pnl_dollars": "0.5600",
"fees_paid_dollars": "0.5600"
}
]
}Changes
- warning
for the
queryrequest parametersubaccount, the min was set to0.00
- warning
- info
added the new optional
queryrequest parametersubaccount
- info