### GET /milestones Source: https://docs.kalshi.com/openapi.yaml Minimum start date to filter milestones. Format: RFC3339 timestamp ```markdown ### Parameters - **limit** (integer, query, required): Number of milestones to return per page - **minimum_start_date** (string (date-time), query, optional): Minimum start date to filter milestones. Format RFC3339 timestamp - **category** (string, query, optional): Filter by milestone category. E.g. Sports, Elections, Esports, Crypto. (example: "Sports") - **competition** (string, query, optional): Filter by competition. E.g. Pro Football, Pro Basketball (M), Pro Baseball, Pro Hockey, College Football. (example: "Pro Football") - **source_id** (string, query, optional): Filter by source id - **type** (string, query, optional): Filter by milestone type. E.g. football_game, basketball_game, soccer_tournament_multi_leg, baseball_game, hockey_match, political_race. (example: "football_game") - **related_event_ticker** (string, query, optional): Filter by related event ticker - **cursor** (string, query, optional): Pagination cursor. Use the cursor value returned from the previous response to get the next page of results - **min_updated_ts** (integer (int64), query, optional): Filter milestones with metadata updated after this Unix timestamp (in seconds). Use this to efficiently poll for changes. ### Responses #### 200 - Milestones retrieved successfully **GetMilestonesResponse** - **milestones** (array (Milestone)) (required): List of milestones. Array items: - **id** (string) (required): Unique identifier for the milestone. - **category** (string) (required): Category of the milestone. E.g. Sports, Elections, Esports, Crypto. (example: "Sports") - **type** (string) (required): Type of the milestone. E.g. football_game, basketball_game, soccer_tournament_multi_leg, baseball_game, hockey_match, golf_tournament, political_race. (example: "football_game") - **start_date** (string (date-time)) (required): Start date of the milestone. - **end_date** (string (date-time)): End date of the milestone, if any. - **related_event_tickers** (array (string)) (required): List of event tickers related to this milestone. - **title** (string) (required): Title of the milestone. - **notification_message** (string) (required): Notification message for the milestone. - **source_id** (string): Source id of milestone if available. - **source_ids** (object): Source ids of milestone if available. - **details** (object) (required): Additional details about the milestone. - **primary_event_tickers** (array (string)) (required): List of event tickers directly related to the outcome of this milestone. - **last_updated_ts** (string (date-time)) (required): Last time this structured target was updated. - **cursor** (string): Cursor for pagination. #### 400 - Bad Request Bad Request #### 401 - Unauthorized Unauthorized #### 500 - Internal Server Error Internal Server Error ### Example Usage ```bash curl -X GET "https://external-api.kalshi.com/trade-api/v2/milestones?limit=0&minimum_start_date=2023-01-01T00:00:00Z&category=Sports&competition=Pro Football&source_id=string&type=football_game&related_event_ticker=string&cursor=string&min_updated_ts=0" ``` ``` -------------------------------- ### GET /live_data/batch Source: https://docs.kalshi.com/openapi.yaml Get live data for multiple milestones ```markdown ### Parameters - **milestone_ids** (array (string), query, required): Array of milestone IDs - **include_player_stats** (boolean, query, optional): When true, includes player-level statistics in the live data response. Supported for Pro Football, Pro Basketball, and College Men's Basketball milestones that have player ID mappings configured. Has no effect for other sports or milestones without player mappings. ### Responses #### 200 - Live data retrieved successfully **GetLiveDatasResponse** - **live_datas** (array (LiveData)) (required) Array items: - **type** (string) (required): Type of live data - **details** (object) (required): Live data details as a flexible object - **milestone_id** (string) (required): Milestone ID #### 500 - Internal server error Internal server error ### Example Usage ```bash curl -X GET "https://external-api.kalshi.com/trade-api/v2/live_data/batch?milestone_ids=item1,item2&include_player_stats=false" ``` ``` -------------------------------- ### GET /portfolio/subaccounts/netting Source: https://docs.kalshi.com/openapi.yaml Gets the netting enabled settings for all subaccounts. ```markdown ### Responses #### 200 - Netting settings retrieved successfully **GetSubaccountNettingResponse** - **netting_configs** (array (SubaccountNettingConfig)) (required) Array items: - **subaccount_number** (integer) (required): Subaccount number (0 for primary, 1-63 for subaccounts). - **enabled** (boolean) (required): Whether netting is enabled for this subaccount. #### 401 - response **ErrorResponse** - **code** (string): Error code - **message** (string): Human-readable error message - **details** (string): Additional details about the error, if available - **service** (string): The name of the service that generated the error #### 500 - response **ErrorResponse** - **code** (string): Error code - **message** (string): Human-readable error message - **details** (string): Additional details about the error, if available - **service** (string): The name of the service that generated the error ### Example Usage ```bash curl -X GET "https://external-api.kalshi.com/trade-api/v2/portfolio/subaccounts/netting" ``` ``` -------------------------------- ### GET /communications/rfqs Source: https://docs.kalshi.com/openapi.yaml Endpoint for getting RFQs ```markdown ### Parameters - **cursor** (string, query, optional): Pagination cursor. Use the cursor value returned from the previous response to get the next page of results. Leave empty for the first page. - **event_ticker** (string, query, optional): Event ticker to filter by. Only a single event ticker is supported. - **market_ticker** (string, query, optional): Filter by market ticker - **subaccount** (integer, query, optional): Subaccount number (0 for primary, 1-63 for subaccounts). If omitted, defaults to all subaccounts. - **limit** (integer (int32), query, optional): Parameter to specify the number of results per page. Defaults to 100. - **status** (string, query, optional): Filter RFQs by status - **creator_user_id** (string, query, optional): Filter RFQs by creator user ID - **user_filter** (UserFilter, query, optional) ### Responses #### 200 - RFQs retrieved successfully **GetRFQsResponse** - **rfqs** (array (RFQ)) (required): List of RFQs matching the query criteria Array items: - **id** (string) (required): Unique identifier for the RFQ - **creator_id** (string) (required): Public communications ID of the RFQ creator. - **market_ticker** (string) (required): The ticker of the market this RFQ is for - **contracts_fp** (string) (required): Fixed-point contract count string (2 decimals, e.g., "10.00"; referred to as "fp" in field names). Requests accept 0-2 decimal places (e.g., "10", "10.0", "10.00"); responses always emit 2 decimals. Fractional contract values (e.g., "2.50") are supported; the minimum granularity is 0.01 contracts. (example: "10.00") - **target_cost_dollars** (string): US dollar amount as a fixed-point decimal string with up to 6 decimal places of precision. This is the maximum supported precision; valid quote intervals for a given market are constrained by that market's price level structure. (example: "0.5600") - **status** (string (open|closed)) (required): Current status of the RFQ (open, closed) ("open"|"closed") - **created_ts** (string (date-time)) (required): Timestamp when the RFQ was created - **mve_collection_ticker** (string): Ticker of the MVE collection this market belongs to - **mve_selected_legs** (array (MveSelectedLeg)): Selected legs for the MVE collection Array items: - **event_ticker** (string): Unique identifier for the selected event - **market_ticker** (string): Unique identifier for the selected market - **side** (string): The side of the selected market - **yes_settlement_value_dollars** (string): US dollar amount as a fixed-point decimal string with up to 6 decimal places of precision. This is the maximum supported precision; valid quote intervals for a given market are constrained by that market's price level structure. (example: "0.5600") - **rest_remainder** (boolean): Whether to rest the remainder of the RFQ after execution - **cancellation_reason** (string): Reason for RFQ cancellation if cancelled - **creator_user_id** (string): User ID of the RFQ creator (private field) - **creator_subaccount** (integer): Subaccount number of the RFQ creator (visible when the caller is the RFQ creator) - **cancelled_ts** (string (date-time)): Timestamp when the RFQ was cancelled - **updated_ts** (string (date-time)): Timestamp when the RFQ was last updated - **cursor** (string): Cursor for pagination to get the next page of results #### 401 - response **ErrorResponse** - **code** (string): Error code - **message** (string): Human-readable error message - **details** (string): Additional details about the error, if available - **service** (string): The name of the service that generated the error #### 500 - response **ErrorResponse** - **code** (string): Error code - **message** (string): Human-readable error message - **details** (string): Additional details about the error, if available - **service** (string): The name of the service that generated the error ### Example Usage ```bash curl -X GET "https://external-api.kalshi.com/trade-api/v2/communications/rfqs?cursor=string&event_ticker=string&market_ticker=string&subaccount=0&limit=100&status=string&creator_user_id=string&user_filter=value" ``` ``` -------------------------------- ### GET /portfolio/subaccounts/balances Source: https://docs.kalshi.com/openapi.yaml Gets balances for all subaccounts including the primary account. ```markdown ### Responses #### 200 - Balances retrieved successfully **GetSubaccountBalancesResponse** - **subaccount_balances** (array (SubaccountBalance)) (required) Array items: - **subaccount_number** (integer) (required): Subaccount number (0 for primary, 1-63 for subaccounts). - **exchange_index** (integer) (required): Exchange index the balance is held on. - **balance** (string) (required): US dollar amount as a fixed-point decimal string with up to 6 decimal places of precision. This is the maximum supported precision; valid quote intervals for a given market are constrained by that market's price level structure. (example: "0.5600") - **updated_ts** (integer (int64)) (required): Unix timestamp of last balance update. #### 401 - response **ErrorResponse** - **code** (string): Error code - **message** (string): Human-readable error message - **details** (string): Additional details about the error, if available - **service** (string): The name of the service that generated the error #### 500 - response **ErrorResponse** - **code** (string): Error code - **message** (string): Human-readable error message - **details** (string): Additional details about the error, if available - **service** (string): The name of the service that generated the error ### Example Usage ```bash curl -X GET "https://external-api.kalshi.com/trade-api/v2/portfolio/subaccounts/balances" ``` ``` -------------------------------- ### GET /exchange/announcements Source: https://docs.kalshi.com/openapi.yaml Endpoint for getting all exchange-wide announcements. ```markdown ### Responses #### 200 - Exchange announcements retrieved successfully **GetExchangeAnnouncementsResponse** - **announcements** (array (Announcement)) (required): A list of exchange-wide announcements. Array items: - **type** (string (info|warning|error)) (required): The type of the announcement. ("info"|"warning"|"error") - **message** (string) (required): The message contained within the announcement. - **delivery_time** (string (date-time)) (required): The time the announcement was delivered. - **status** (string (active|inactive)) (required): The current status of this announcement. ("active"|"inactive") #### 500 - Internal server error Internal server error ### Example Usage ```bash curl -X GET "https://external-api.kalshi.com/trade-api/v2/exchange/announcements" ``` ``` -------------------------------- ### GET /live_data/milestone/{milestone_id} Source: https://docs.kalshi.com/openapi.yaml Get live data for a specific milestone. ```markdown ### Parameters - **milestone_id** (string, path, required): Milestone ID - **include_player_stats** (boolean, query, optional): When true, includes player-level statistics in the live data response. Supported for Pro Football, Pro Basketball, and College Men's Basketball milestones that have player ID mappings configured. Has no effect for other sports or milestones without player mappings. ### Responses #### 200 - Live data retrieved successfully **GetLiveDataResponse** - **live_data** (object) (required) - **type** (string) (required): Type of live data - **details** (object) (required): Live data details as a flexible object - **milestone_id** (string) (required): Milestone ID #### 404 - Live data not found Live data not found #### 500 - Internal server error Internal server error ### Example Usage ```bash curl -X GET "https://external-api.kalshi.com/trade-api/v2/live_data/milestone/{milestone_id}?include_player_stats=false" ``` ``` -------------------------------- ### GET /portfolio/fills Source: https://docs.kalshi.com/openapi.yaml Endpoint for getting all fills for the member. A fill is when a trade you have is matched. Fills that occurred before the historical cutoff are only available via `GET /historical/fills`. See [Historical Data](https://docs.kalshi.com/getting_started/historical_data) for details. ```markdown ### Parameters - **ticker** (string, query, optional): Filter by market ticker - **order_id** (string, query, optional): Filter by order ID - **min_ts** (integer (int64), query, optional): Filter items after this Unix timestamp - **max_ts** (integer (int64), query, optional): Filter items before this Unix timestamp - **limit** (integer (int64), query, optional): Number of results per page. Defaults to 100. - **cursor** (string, query, optional): Pagination cursor. Use the cursor value returned from the previous response to get the next page of results. Leave empty for the first page. - **subaccount** (integer, query, optional): Subaccount number (0 for primary, 1-63 for subaccounts). If omitted, defaults to all subaccounts. ### Responses #### 200 - Fills retrieved successfully **GetFillsResponse** - **fills** (array (Fill)) (required) Array items: - **fill_id** (string) (required): Unique identifier for this fill - **trade_id** (string) (required): Unique identifier for this fill (legacy field name, same as fill_id) - **order_id** (string) (required): Unique identifier for the order that resulted in this fill - **ticker** (string) (required): Unique identifier for the market - **market_ticker** (string) (required): Unique identifier for the market (legacy field name, same as ticker) - **side** (string (yes|no)) (required): Deprecated. Use `outcome_side` (or `book_side`) instead. See [Order direction](/getting_started/order_direction). This field will not be removed before May 14, 2026. ("yes"|"no") - **action** (string (buy|sell)) (required): Deprecated. Use `outcome_side` (or `book_side`) instead. See [Order direction](/getting_started/order_direction). This field will not be removed before May 14, 2026. ("buy"|"sell") - **outcome_side** (string (yes|no)) (required): The outcome side this fill positioned the user for. buy-yes and sell-no produce 'yes'; buy-no and sell-yes produce 'no'. `outcome_side` describes directional exposure only; it does not change the fill's price. A fill at price `p` with `outcome_side=no` is matched against an order at the same price `p` with `outcome_side=yes` — both parties trade at the same price, just on opposite directions. `outcome_side` and `book_side` will become the canonical way to determine fill direction. The legacy `action` and `side` fields will be deprecated in a future release — please migrate to these new fields. ("yes"|"no") - **book_side** (string (bid|ask)) (required): Side of the book for an order or trade. For event markets, this refers to the YES leg only: `bid` means buy YES, `ask` means sell YES. (Selling YES is economically equivalent to buying NO at `1 - price`, but this endpoint quotes everything from the YES side.) ("bid"|"ask") - **count_fp** (string) (required): Fixed-point contract count string (2 decimals, e.g., "10.00"; referred to as "fp" in field names). Requests accept 0-2 decimal places (e.g., "10", "10.0", "10.00"); responses always emit 2 decimals. Fractional contract values (e.g., "2.50") are supported; the minimum granularity is 0.01 contracts. (example: "10.00") - **yes_price_dollars** (string) (required): US dollar amount as a fixed-point decimal string with up to 6 decimal places of precision. This is the maximum supported precision; valid quote intervals for a given market are constrained by that market's price level structure. (example: "0.5600") - **no_price_dollars** (string) (required): US dollar amount as a fixed-point decimal string with up to 6 decimal places of precision. This is the maximum supported precision; valid quote intervals for a given market are constrained by that market's price level structure. (example: "0.5600") - **is_taker** (boolean) (required): If true, this fill was a taker (removed liquidity from the order book) - **created_time** (string (date-time)): Timestamp when this fill was executed - **fee_cost** (string) (required): US dollar amount as a fixed-point decimal string with up to 6 decimal places of precision. This is the maximum supported precision; valid quote intervals for a given market are constrained by that market's price level structure. (example: "0.5600") - **subaccount_number** (integer): Subaccount number (0 for primary, 1-63 for subaccounts). Present for direct users. - **ts** (integer (int64)): Unix timestamp when this fill was executed (legacy field name) - **cursor** (string) (required) #### 400 - Bad request Bad request #### 401 - Unauthorized Unauthorized #### 500 - Internal server error Internal server error ### Example Usage ```bash curl -X GET "https://external-api.kalshi.com/trade-api/v2/portfolio/fills?ticker=string&order_id=string&min_ts=0&max_ts=0&limit=100&cursor=string&subaccount=0" ``` ``` -------------------------------- ### GET /markets/{ticker}/orderbook Source: https://docs.kalshi.com/openapi.yaml Endpoint for getting the current order book for a specific market. The order book shows all active bid orders for both yes and no sides of a binary market. It returns yes bids and no bids only (no asks are returned). This is because in binary markets, a bid for yes at price X is equivalent to an ask for no at price (100-X). For example, a yes bid at 7¢ is the same as a no ask at 93¢, with identical contract sizes. Each side shows price levels with their corresponding quantities and order counts, organized from best to worst prices. ```markdown ### Parameters - **ticker** (string, path, required): Market ticker - **depth** (integer, query, optional): Depth of the orderbook to retrieve (0 or negative means all levels, 1-100 for specific depth) ### Responses #### 200 - Orderbook retrieved successfully **GetMarketOrderbookResponse** - **orderbook_fp** (object) (required): Orderbook with fixed-point contract counts (fp) in all dollar price levels. - **yes_dollars** (array (PriceLevelDollarsCountFp)) (required) - **no_dollars** (array (PriceLevelDollarsCountFp)) (required) #### 401 - response **ErrorResponse** - **code** (string): Error code - **message** (string): Human-readable error message - **details** (string): Additional details about the error, if available - **service** (string): The name of the service that generated the error #### 404 - response **ErrorResponse** - **code** (string): Error code - **message** (string): Human-readable error message - **details** (string): Additional details about the error, if available - **service** (string): The name of the service that generated the error #### 500 - response **ErrorResponse** - **code** (string): Error code - **message** (string): Human-readable error message - **details** (string): Additional details about the error, if available - **service** (string): The name of the service that generated the error ### Example Usage ```bash curl -X GET "https://external-api.kalshi.com/trade-api/v2/markets/{ticker}/orderbook?depth=0" ``` ``` -------------------------------- ### GET /structured_targets Source: https://docs.kalshi.com/openapi.yaml Page size (min: 1, max: 2000) ```markdown ### Parameters - **ids** (array (string), query, optional): Filter by specific structured target IDs. Pass multiple IDs by repeating the parameter (e.g. `?ids=uuid1&ids=uuid2`). - **type** (string, query, optional): Filter by structured target type (example: "basketball_player") - **competition** (string, query, optional): Filter by competition. Matches against the league, conference, division, or tour in the structured target details. (example: "NBA") - **page_size** (integer (int32), query, optional): Number of items per page (min 1, max 2000, default 100) - **cursor** (string, query, optional): Pagination cursor ### Responses #### 200 - Structured targets retrieved successfully **GetStructuredTargetsResponse** - **structured_targets** (array (StructuredTarget)) Array items: - **id** (string): Unique identifier for the structured target. - **name** (string): Name of the structured target. - **type** (string): Type of the structured target. - **details** (object): Additional details about the structured target. Contains flexible JSON data specific to the target type. - **source_id** (string): External source identifier for the structured target, if available (e.g., third-party data provider ID). - **source_ids** (object): Source ids of structured target if available. - **last_updated_ts** (string (date-time)): Timestamp when this structured target was last updated. - **cursor** (string): Pagination cursor for the next page. Empty if there are no more results. #### 401 - Unauthorized Unauthorized #### 500 - Internal server error Internal server error ### Example Usage ```bash curl -X GET "https://external-api.kalshi.com/trade-api/v2/structured_targets?ids=item1,item2&type=basketball_player&competition=NBA&page_size=100&cursor=string" ``` ``` -------------------------------- ### GET /markets/orderbooks Source: https://docs.kalshi.com/openapi.yaml Endpoint for getting the current order books for multiple markets in a single request. The order book shows all active bid orders for both yes and no sides of a binary market. It returns yes bids and no bids only (no asks are returned). This is because in binary markets, a bid for yes at price X is equivalent to an ask for no at price (100-X). For example, a yes bid at 7¢ is the same as a no ask at 93¢, with identical contract sizes. Each side shows price levels with their corresponding quantities and order counts, organized from best to worst prices. Returns one orderbook per requested market ticker. ```markdown ### Parameters - **tickers** (array (string), query, required): List of market tickers to fetch orderbooks for ### Responses #### 200 - Orderbooks retrieved successfully **GetMarketOrderbooksResponse** - **orderbooks** (array (MarketOrderbookFp)) (required) Array items: - **ticker** (string) (required) - **orderbook_fp** (object) (required): Orderbook with fixed-point contract counts (fp) in all dollar price levels. - **yes_dollars** (array (PriceLevelDollarsCountFp)) (required) - **no_dollars** (array (PriceLevelDollarsCountFp)) (required) #### 400 - response **ErrorResponse** - **code** (string): Error code - **message** (string): Human-readable error message - **details** (string): Additional details about the error, if available - **service** (string): The name of the service that generated the error #### 401 - response **ErrorResponse** - **code** (string): Error code - **message** (string): Human-readable error message - **details** (string): Additional details about the error, if available - **service** (string): The name of the service that generated the error #### 500 - response **ErrorResponse** - **code** (string): Error code - **message** (string): Human-readable error message - **details** (string): Additional details about the error, if available - **service** (string): The name of the service that generated the error ### Example Usage ```bash curl -X GET "https://external-api.kalshi.com/trade-api/v2/markets/orderbooks?tickers=item1,item2" ``` ``` -------------------------------- ### GET /markets Source: https://docs.kalshi.com/openapi.yaml Filter by market status. Possible values: `unopened`, `open`, `closed`, `settled`. Leave empty to return markets with any status. - Only one `status` filter may be supplied at a time. - Timestamp filters will be mutually exclusive from other timestamp filters and certain status filters. | Compatible Timestamp Filters | Additional Status Filters| Extra Notes | |------------------------------|--------------------------|-------------| | min_created_ts, max_created_ts | `unopened`, `open`, *empty* | | | min_close_ts, max_close_ts | `closed`, *empty* | | | min_settled_ts, max_settled_ts | `settled`, *empty* | | | min_updated_ts | *empty* | Incompatible with all filters besides `mve_filter=exclude`. May be combined with `series_ticker`, which requires `mve_filter=exclude` | Markets that settled before the historical cutoff are only available via `GET /historical/markets`. See [Historical Data](https://docs.kalshi.com/getting_started/historical_data) for details. ```markdown ### Parameters - **limit** (integer (int64), query, optional): Number of results per page. Defaults to 100. Maximum value is 1000. - **cursor** (string, query, optional): Pagination cursor. Use the cursor value returned from the previous response to get the next page of results. Leave empty for the first page. - **event_ticker** (string, query, optional): Event ticker to filter by. Only a single event ticker is supported. - **series_ticker** (string, query, optional): Filter by series ticker - **min_created_ts** (integer (int64), query, optional): Filter items that created after this Unix timestamp - **max_created_ts** (integer (int64), query, optional): Filter items that created before this Unix timestamp - **min_updated_ts** (integer (int64), query, optional): Return markets with metadata updated later than this Unix timestamp. Tracks non-trading changes only. Incompatible with any other filters except mve_filter=exclude. May be combined with series_ticker, which requires mve_filter=exclude. - **max_close_ts** (integer (int64), query, optional): Filter items that close before this Unix timestamp - **min_close_ts** (integer (int64), query, optional): Filter items that close after this Unix timestamp - **min_settled_ts** (integer (int64), query, optional): Filter items that settled after this Unix timestamp - **max_settled_ts** (integer (int64), query, optional): Filter items that settled before this Unix timestamp - **status** (string (unopened|open|paused|closed|settled), query, optional): Filter by market status. Leave empty to return markets with any status. - **tickers** (string, query, optional): Filter by specific market tickers. Comma-separated list of market tickers to retrieve. - **mve_filter** (string (only|exclude), query, optional): Filter by multivariate events (combos). 'only' returns only multivariate events, 'exclude' excludes multivariate events. ### Responses #### 200 - Markets retrieved successfully **GetMarketsResponse** - **markets** (array (Market)) (required) Array items: - **ticker** (string) (required) - **event_ticker** (string) (required) - **market_type** (string (binary|scalar)) (required): Identifies the type of market ("binary"|"scalar") - **title** (string) - **subtitle** (string) - **yes_sub_title** (string) (required): Shortened title for the yes side of this market - **no_sub_title** (string) (required): Shortened title for the no side of this market - **created_time** (string (date-time)) (required) - **updated_time** (string (date-time)) (required): Time of the last non-trading metadata update. - **open_time** (string (date-time)) (required) - **close_time** (string (date-time)) (required) - **expected_expiration_time** (string (date-time)): Time when this market is expected to expire - **expiration_time** (string (date-time)) - **latest_expiration_time** (string (date-time)) (required): Latest possible time for this market to expire - **settlement_timer_seconds** (integer) (required): The amount of time after determination that the market settles - **status** (string (initialized|inactive|active|closed|determined|disputed|amended|finalized)) (required): The current status of the market in its lifecycle. ("initialized"|"inactive"|"active"|"closed"|"determined"|"disputed"|"amended"|"finalized") - **yes_bid_dollars** (string) (required): US dollar amount as a fixed-point decimal string with up to 6 decimal places of precision. This is the maximum supported precision; valid quote intervals for a given market are constrained by that market's price level structure. (example: "0.5600") - **yes_bid_size_fp** (string) (required): Fixed-point contract count string (2 decimals, e.g., "10.00"; referred to as "fp" in field names). Requests accept 0-2 decimal places (e.g., "10", "10.0", "10.00"); responses always emit 2 decimals. Fractional contract values (e.g., "2.50") are supported; the minimum granularity is 0.01 contracts. (example: "10.00") - **yes_ask_dollars** (string) (required): US dollar amount as a fixed-point decimal string with up to 6 decimal places of precision. This is the maximum supported precision; valid quote intervals for a given market are constrained by that market's price level structure. (example: "0.5600") - **yes_ask_size_fp** (string) (required): Fixed-point contract count string (2 decimals, e.g., "10.00"; referred to as "fp" in field names). Requests accept 0-2 decimal places (e.g., "10", "10.0", "10.00"); responses always emit 2 decimals. Fractional contract values (e.g., "2.50") are supported; the minimum granularity is 0.01 contracts. (example: "10.00") - **no_bid_dollars** (string) (required): US dollar amount as a fixed-point decimal string with up to 6 decimal places of precision. This is the maximum supported precision; valid quote intervals for a given market are constrained by that market's price level structure. (example: "0.5600") - **no_ask_dollars** (string) (required): US dollar amount as a fixed-point decimal string with up to 6 decimal places of precision. This is the maximum supported precision; valid quote intervals for a given market are constrained by that market's price level structure. (example: "0.5600") - **last_price_dollars** (string) (required): US dollar amount as a fixed-point decimal string with up to 6 decimal places of precision. This is the maximum supported precision; valid quote intervals for a given market are constrained by that market's price level structure. (example: "0.5600") - **volume_fp** (string) (required): Fixed-point contract count string (2 decimals, e.g., "10.00"; referred to as "fp" in field names). Requests accept 0-2 decimal places (e.g., "10", "10.0", "10.00"); responses always emit 2 decimals. Fractional contract values (e.g., "2.50") are supported; the minimum granularity is 0.01 contracts. (example: "10.00") - **volume_24h_fp** (string) (required): Fixed-point contract count string (2 decimals, e.g., "10.00"; referred to as "fp" in field names). Requests accept 0-2 decimal places (e.g., "10", "10.0", "10.00"); responses always emit 2 decimals. Fractional contract values (e.g., "2.50") are supported; the minimum granularity is 0.01 contracts. (example: "10.00") - **result** (string (yes|no|scalar|)) (required) ("yes"|"no"|"scalar"|"") - **can_close_early** (boolean) (required) - **open_interest_fp** (string) (required): Fixed-point contract count string (2 decimals, e.g., "10.00"; referred to as "fp" in field names). Requests accept 0-2 decimal places (e.g., "10", "10.0", "10.00"); responses always emit 2 decimals. Fractional contract values (e.g., "2.50") are supported; the minimum granularity is 0.01 contracts. (example: "10.00") - **notional_value_dollars** (string) (required): US dollar amount as a fixed-point decimal string with up to 6 decimal places of precision. This is the maximum supported precision; valid quote intervals for a given market are constrained by that market's price level structure. (example: "0.5600") - **previous_yes_bid_dollars** (string) (required): US dollar amount as a fixed-point decimal string with up to 6 decimal places of precision. This is the maximum supported precision; valid quote intervals for a given market are constrained by that market's price level structure. (example: "0.5600") - **previous_yes_ask_dollars** (string) (required): US dollar amount as a fixed-point decimal string with up to 6 decimal places of precision. This is the maximum supported precision; valid quote intervals for a given market are constrained by that market's price level structure. (example: "0.5600") - **previous_price_dollars** (string) (required): US dollar amount as a fixed-point decimal string with up to 6 decimal places of precision. This is the maximum supported precision; valid quote intervals for a given market are constrained by that market's price level structure. (example: "0.5600") - **liquidity_dollars** (string) (required): US dollar amount as a fixed-point decimal string with up to 6 decimal places of precision. This is the maximum supported precision; valid quote intervals for a given market are constrained by that market's price level structure. (example: "0.5600") - **settlement_value_dollars** (string): US dollar amount as a fixed-point decimal string with up to 6 decimal places of precision. This is the maximum supported precision; valid quote intervals for a given market are constrained by that market's price level structure. (example: "0.5600") - **settlement_ts** (string (date-time)): Timestamp when the market was settled. Only filled for settled markets - **expiration_value** (string) (required): The value that was considered for the settlement - **occurrence_datetime** (string (date-time)): The recorded datetime when the underlying event occurred, if available - **fee_waiver_expiration_time** (string (date-time)): Time when this market's fee waiver expires - **early_close_condition** (string): The condition under which the market can close early - **strike_type** (string (greater|greater_or_equal|less|less_or_equal|between|functional|custom|structured)): Strike type defines how the market strike is defined and evaluated ("greater"|"greater_or_equal"|"less"|"less_or_equal"|"between"|"functional"|"custom"|"structured") - **floor_strike** (number (double)): Minimum expiration value that leads to a YES settlement - **cap_strike** (number (double)): Maximum expiration value that leads to a YES settlement - **functional_strike** (string): Mapping from expiration values to settlement values - **custom_strike** (object): Expiration value for each target that leads to a YES settlement - **rules_primary** (string) (required): A plain language description of the most important market terms - **rules_secondary** (string) (required): A plain language description of secondary market terms - **mve_collection_ticker** (string): The ticker of the multivariate event collection - **mve_selected_legs** (array (MveSelectedLeg)) Array items: - **event_ticker** (string): Unique identifier for the selected event - **market_ticker** (string): Unique identifier for the selected market - **side** (string): The side of the selected market - **yes_settlement_value_dollars** (string): US dollar amount as a fixed-point decimal string with up to 6 decimal places of precision. This is the maximum supported precision; valid quote intervals for a given market are constrained by that market's price level structure. (example: "0.5600") - **primary_participant_key** (string) - **price_level_structure** (string) (required): Price level structure for this market, defining price ranges and tick sizes - **price_ranges** (array (PriceRange)) (required): Valid price ranges for orders on this market Array items: - **start** (string) (required): Starting price for this range in dollars - **end** (string) (required): Ending price for this range in dollars - **step** (string) (required): Price step/tick size for this range in dollars - **is_provisional** (boolean): If true, the market may be removed after determination if there is no activity on it - **exchange_index** (integer): Identifier for an exchange shard. Defaults to 0 if unspecified. Note: currently only 0 supported. (example: 0) - **cursor** (string) (required) #### 400 - Bad request Bad request #### 401 - Unauthorized Unauthorized #### 500 - Internal server error Internal server error ### Example Usage ```bash curl -X GET "https://external-api.kalshi.com/trade-api/v2/markets?limit=100&cursor=string&event_ticker=string&series_ticker=string&min_created_ts=0&max_created_ts=0&min_updated_ts=0&max_close_ts=0&min_close_ts=0&min_settled_ts=0&max_settled_ts=0&status=unopened&tickers=string&mve_filter=only" ``` ``` -------------------------------- ### Schema: ExchangeInstance Source: https://docs.kalshi.com/openapi.yaml The exchange instance type ```markdown ## Schema: ExchangeInstance The exchange instance type **Type:** string ``` -------------------------------- ### GET /historical/cutoff Source: https://docs.kalshi.com/openapi.yaml Returns the cutoff timestamps that define the boundary between **live** and **historical** data. ## Cutoff fields - `market_settled_ts` : Markets that **settled** before this timestamp, and their candlesticks, must be accessed via `GET /historical/markets` and `GET /historical/markets/{ticker}/candlesticks`. - `trades_created_ts` : Trades that were **filled** before this timestamp must be accessed via `GET /historical/fills`. - `orders_updated_ts` : Orders that were **canceled or fully executed** before this timestamp must be accessed via `GET /historical/orders`. Resting (active) orders are always available in `GET /portfolio/orders`. ```markdown ### Responses #### 200 - Historical cutoff timestamps retrieved successfully **GetHistoricalCutoffResponse** - **market_settled_ts** (string (date-time)) (required): Cutoff based on **market settlement time**. Markets and their candlesticks that settled before this timestamp must be accessed via `GET /historical/markets` and `GET /historical/markets/{ticker}/candlesticks`. - **trades_created_ts** (string (date-time)) (required): Cutoff based on **trade fill time**. Fills that occurred before this timestamp must be accessed via `GET /historical/fills`. - **orders_updated_ts** (string (date-time)) (required): Cutoff based on **order cancellation or execution time**. Orders canceled or fully executed before this timestamp must be accessed via `GET /historical/orders`. Resting (active) orders are always available in `GET /portfolio/orders`. #### 500 - Internal server error Internal server error ### Example Usage ```bash curl -X GET "https://external-api.kalshi.com/trade-api/v2/historical/cutoff" ``` ```