Kalshi fcm API

FCM member specific endpoints

OpenAPI Specification

kalshi-fcm-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: Kalshi Trade API Manual Endpoints account fcm API
  version: 3.19.0
  description: Manually defined OpenAPI spec for endpoints being migrated to spec-first approach
servers:
- url: https://external-api.kalshi.com/trade-api/v2
  description: Production Trade API server
- url: https://api.elections.kalshi.com/trade-api/v2
  description: Production shared API server, also supported
- url: https://external-api.demo.kalshi.co/trade-api/v2
  description: Demo Trade API server
- url: https://demo-api.kalshi.co/trade-api/v2
  description: Demo shared API server, also supported
tags:
- name: fcm
  description: FCM member specific endpoints
paths:
  /fcm/orders:
    get:
      operationId: GetFCMOrders
      summary: Get FCM Orders
      description: 'Endpoint for FCM members to get orders filtered by subtrader ID.

        This endpoint requires FCM member access level and allows filtering orders by subtrader ID.

        '
      tags:
      - fcm
      security:
      - kalshiAccessKey: []
        kalshiAccessSignature: []
        kalshiAccessTimestamp: []
      parameters:
      - name: subtrader_id
        in: query
        required: true
        description: Restricts the response to orders for a specific subtrader (FCM members only)
        schema:
          type: string
      - $ref: '#/components/parameters/CursorQuery'
      - $ref: '#/components/parameters/SingleEventTickerQuery'
      - $ref: '#/components/parameters/TickerQuery'
      - name: min_ts
        in: query
        description: Restricts the response to orders after a timestamp, formatted as a Unix Timestamp
        schema:
          type: integer
          format: int64
      - name: max_ts
        in: query
        description: Restricts the response to orders before a timestamp, formatted as a Unix Timestamp
        schema:
          type: integer
          format: int64
      - name: status
        in: query
        description: Restricts the response to orders that have a certain status
        schema:
          type: string
          enum:
          - resting
          - canceled
          - executed
      - name: limit
        in: query
        description: Parameter to specify the number of results per page. Defaults to 100
        schema:
          type: integer
          minimum: 1
          maximum: 1000
      responses:
        '200':
          description: Orders retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetOrdersResponse'
        '400':
          description: Bad request
        '401':
          description: Unauthorized
        '404':
          description: Not found
        '500':
          description: Internal server error
  /fcm/positions:
    get:
      operationId: GetFCMPositions
      summary: Get FCM Positions
      description: 'Endpoint for FCM members to get market positions filtered by subtrader ID.

        This endpoint requires FCM member access level and allows filtering positions by subtrader ID.

        '
      tags:
      - fcm
      security:
      - kalshiAccessKey: []
        kalshiAccessSignature: []
        kalshiAccessTimestamp: []
      parameters:
      - name: subtrader_id
        in: query
        required: true
        description: Restricts the response to positions for a specific subtrader (FCM members only)
        schema:
          type: string
      - name: ticker
        in: query
        description: Ticker of desired positions
        schema:
          type: string
          x-go-type-skip-optional-pointer: true
      - name: event_ticker
        in: query
        description: Event ticker of desired positions
        schema:
          type: string
          x-go-type-skip-optional-pointer: true
      - name: count_filter
        in: query
        description: Restricts the positions to those with any of following fields with non-zero values, as a comma separated list
        schema:
          type: string
      - name: settlement_status
        in: query
        description: Settlement status of the markets to return. Defaults to unsettled
        schema:
          type: string
          enum:
          - all
          - unsettled
          - settled
      - name: limit
        in: query
        description: Parameter to specify the number of results per page. Defaults to 100
        schema:
          type: integer
          minimum: 1
          maximum: 1000
      - name: cursor
        in: query
        description: The Cursor represents a pointer to the next page of records in the pagination
        schema:
          type: string
      responses:
        '200':
          description: Positions retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetPositionsResponse'
        '400':
          description: Bad request
        '401':
          description: Unauthorized
        '404':
          description: Not found
        '500':
          description: Internal server error
components:
  schemas:
    GetOrdersResponse:
      type: object
      required:
      - orders
      - cursor
      properties:
        orders:
          type: array
          items:
            $ref: '#/components/schemas/Order'
        cursor:
          type: string
    FixedPointCount:
      type: string
      description: 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 on markets with fractional trading enabled; the minimum granularity is 0.01 contracts. Integer contract count fields are legacy and will be deprecated; when both integer and fp fields are provided, they must match.
      example: '10.00'
    SelfTradePreventionType:
      type: string
      enum:
      - taker_at_cross
      - maker
      description: 'The self-trade prevention type for orders. `taker_at_cross` cancels the taker order when it would trade against another order from the same user; execution stops and any partial fills already matched are executed. `maker` cancels the resting maker order and continues matching.

        '
    ExchangeIndex:
      type: integer
      description: 'Identifier for an exchange shard. Defaults to 0 if unspecified. Note: currently only 0 supported.'
      example: 0
    OrderStatus:
      type: string
      enum:
      - resting
      - canceled
      - executed
      description: The status of an order
    GetPositionsResponse:
      type: object
      required:
      - market_positions
      - event_positions
      properties:
        cursor:
          type: string
          description: The Cursor represents a pointer to the next page of records in the pagination. Use the value returned here in the cursor query parameter for this end-point to get the next page containing limit records. An empty value of this field indicates there is no next page.
        market_positions:
          type: array
          items:
            $ref: '#/components/schemas/MarketPosition'
          description: List of market positions
        event_positions:
          type: array
          items:
            $ref: '#/components/schemas/EventPosition'
          description: List of event positions
    Order:
      type: object
      required:
      - order_id
      - user_id
      - client_order_id
      - ticker
      - side
      - action
      - outcome_side
      - book_side
      - type
      - status
      - yes_price_dollars
      - no_price_dollars
      - fill_count_fp
      - remaining_count_fp
      - initial_count_fp
      - taker_fees_dollars
      - maker_fees_dollars
      - taker_fill_cost_dollars
      - maker_fill_cost_dollars
      properties:
        order_id:
          type: string
        user_id:
          type: string
          description: Unique identifier for users
        client_order_id:
          type: string
        ticker:
          type: string
        side:
          type: string
          enum:
          - 'yes'
          - 'no'
          deprecated: true
          description: '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.

            '
        action:
          type: string
          enum:
          - buy
          - sell
          deprecated: true
          description: '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.

            '
        outcome_side:
          type: string
          enum:
          - 'yes'
          - 'no'
          description: 'The outcome side this order is positioned 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 order''s price. An order at price `p` with `outcome_side=no` is matched by 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 order direction. The legacy `action`, `side`, and `is_yes` fields will be deprecated in a future release — please migrate to these new fields.

            '
        book_side:
          $ref: '#/components/schemas/BookSide'
          description: 'Same directional bit as outcome_side in book vocabulary. ''bid'' is equivalent to outcome_side ''yes''; ''ask'' is equivalent to outcome_side ''no''.


            `outcome_side` and `book_side` will become the canonical way to determine order direction. The legacy `action`, `side`, and `is_yes` fields will be deprecated in a future release — please migrate to these new fields.

            '
        type:
          type: string
          enum:
          - limit
          - market
        status:
          $ref: '#/components/schemas/OrderStatus'
        yes_price_dollars:
          $ref: '#/components/schemas/FixedPointDollars'
          description: The yes price for this order in fixed-point dollars
        no_price_dollars:
          $ref: '#/components/schemas/FixedPointDollars'
          description: The no price for this order in fixed-point dollars
        fill_count_fp:
          $ref: '#/components/schemas/FixedPointCount'
          description: String representation of the number of contracts that have been filled
        remaining_count_fp:
          $ref: '#/components/schemas/FixedPointCount'
          description: String representation of the remaining contracts for this order
        initial_count_fp:
          $ref: '#/components/schemas/FixedPointCount'
          description: String representation of the initial size of the order (contract units)
        taker_fill_cost_dollars:
          $ref: '#/components/schemas/FixedPointDollars'
          description: The cost of filled taker orders in dollars
        maker_fill_cost_dollars:
          $ref: '#/components/schemas/FixedPointDollars'
          description: The cost of filled maker orders in dollars
        taker_fees_dollars:
          $ref: '#/components/schemas/FixedPointDollars'
          description: Fees paid on filled taker contracts, in dollars
        maker_fees_dollars:
          $ref: '#/components/schemas/FixedPointDollars'
          description: Fees paid on filled maker contracts, in dollars
        expiration_time:
          type: string
          format: date-time
          nullable: true
        created_time:
          type: string
          format: date-time
          nullable: true
          x-omitempty: false
        last_update_time:
          type: string
          format: date-time
          nullable: true
          x-omitempty: true
          description: The last update to an order (modify, cancel, fill)
        self_trade_prevention_type:
          $ref: '#/components/schemas/SelfTradePreventionType'
          nullable: true
          x-omitempty: false
        order_group_id:
          type: string
          nullable: true
          description: The order group this order is part of
        cancel_order_on_pause:
          type: boolean
          description: If this flag is set to true, the order will be canceled if the order is open and trading on the exchange is paused for any reason.
        subaccount_number:
          type: integer
          nullable: true
          x-omitempty: true
          description: Subaccount number (0 for primary, 1-32 for subaccounts).
        exchange_index:
          allOf:
          - $ref: '#/components/schemas/ExchangeIndex'
          x-go-type-skip-optional-pointer: true
    BookSide:
      type: string
      enum:
      - bid
      - ask
      description: '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.)'
    MarketPosition:
      type: object
      required:
      - ticker
      - total_traded_dollars
      - position_fp
      - market_exposure_dollars
      - realized_pnl_dollars
      - resting_orders_count
      - fees_paid_dollars
      - last_updated_ts
      properties:
        ticker:
          type: string
          description: Unique identifier for the market
          x-go-type-skip-optional-pointer: true
        total_traded_dollars:
          $ref: '#/components/schemas/FixedPointDollars'
          description: Total spent on this market in dollars
        position_fp:
          $ref: '#/components/schemas/FixedPointCount'
          description: String representation of the number of contracts bought in this market. Negative means NO contracts and positive means YES contracts
        market_exposure_dollars:
          $ref: '#/components/schemas/FixedPointDollars'
          description: Cost of the aggregate market position in dollars
        realized_pnl_dollars:
          $ref: '#/components/schemas/FixedPointDollars'
          description: Locked in profit and loss, in dollars
        resting_orders_count:
          type: integer
          format: int32
          description: '[DEPRECATED] Aggregate size of resting orders in contract units'
          deprecated: true
        fees_paid_dollars:
          $ref: '#/components/schemas/FixedPointDollars'
          description: Fees paid on fill orders, in dollars
        last_updated_ts:
          type: string
          format: date-time
          description: Last time the position is updated
    EventPosition:
      type: object
      required:
      - event_ticker
      - total_cost_dollars
      - total_cost_shares_fp
      - event_exposure_dollars
      - realized_pnl_dollars
      - fees_paid_dollars
      properties:
        event_ticker:
          type: string
          description: Unique identifier for events
        total_cost_dollars:
          $ref: '#/components/schemas/FixedPointDollars'
          description: Total spent on this event in dollars
        total_cost_shares_fp:
          $ref: '#/components/schemas/FixedPointCount'
          description: String representation of the total number of shares traded on this event (including both YES and NO contracts)
        event_exposure_dollars:
          $ref: '#/components/schemas/FixedPointDollars'
          description: Cost of the aggregate event position in dollars
        realized_pnl_dollars:
          $ref: '#/components/schemas/FixedPointDollars'
          description: Locked in profit and loss, in dollars
        fees_paid_dollars:
          $ref: '#/components/schemas/FixedPointDollars'
          description: Fees paid on fill orders, in dollars
    FixedPointDollars:
      type: string
      description: 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'
  parameters:
    CursorQuery:
      name: cursor
      in: query
      description: Pagination cursor. Use the cursor value returned from the previous response to get the next page of results. Leave empty for the first page.
      schema:
        type: string
        x-go-type-skip-optional-pointer: true
    SingleEventTickerQuery:
      name: event_ticker
      in: query
      description: Event ticker to filter by. Only a single event ticker is supported.
      schema:
        type: string
        x-go-type-skip-optional-pointer: true
    TickerQuery:
      name: ticker
      in: query
      description: Filter by market ticker
      schema:
        type: string
        x-go-type-skip-optional-pointer: true
  securitySchemes:
    kalshiAccessKey:
      type: apiKey
      in: header
      name: KALSHI-ACCESS-KEY
      description: Your API key ID
    kalshiAccessSignature:
      type: apiKey
      in: header
      name: KALSHI-ACCESS-SIGNATURE
      description: RSA-PSS signature of the request
    kalshiAccessTimestamp:
      type: apiKey
      in: header
      name: KALSHI-ACCESS-TIMESTAMP
      description: Request timestamp in milliseconds