fcm

Create FCM Position Transfer

Changed on

Endpoint for FCM members to move a position in one market from one of their subtraders into a subtrader under their FCM's error account.

This endpoint must be enabled for your FCM by Kalshi. Kalshi enables it by configuring the error account that receives transferred positions and gives you that account's user id, which prefixes target_subtrader_id. Contact Kalshi to enable it; until then, requests return 400.

  • The destination is always your FCM's error account. target_subtrader_id picks the subtrader under it, which is created on first use.
  • Each request moves one market for one source subtrader. To move many positions, send one request per subtrader and market.
  • The transfer is booked like a trade at price_centicents, which is always the YES price, even when moving NO. No fee is charged and no fill is created. For YES, the error account pays the price per contract; for NO, it pays $1 minus the price per contract. The FCM receives the same amount. Use 0 for YES or 10000 for NO to move no cash. These amounts assume the source holds the side being moved and the target subtrader holds no opposite position in that market; otherwise the positions net like a trade and the balance changes differ.
  • The source's current position is not checked. A request for more than the source holds, or with the opposite sign, flips or grows the source's position.
  • Requests are not idempotent. After a timeout or 5xx, check the position before retrying.
  • The market must be open, neither account may be blocked, and the error account must have enough available balance on the market's exchange index to pay for the transfer. Otherwise the request returns 409.

Example: moving YES. A customer subtrader holds 10 YES contracts. Send position_centicount 1000 and price_centicents 4500 (YES at 45 cents):

  • The customer subtrader goes from 10 YES to 0, and the error account subtrader from 0 to 10 YES.
  • The error account pays 10 x $0.45 = $4.50 and the FCM receives $4.50.
  • Sending price_centicents 0 instead moves the position with no cash.

Example: moving NO. A customer subtrader holds 5 NO contracts. Send position_centicount -500 and price_centicents 7000 (YES at 70 cents, so NO at 30 cents):

  • The customer subtrader goes from 5 NO to 0, and the error account subtrader from 0 to 5 NO.
  • The error account pays 5 x $0.30 = $1.50 and the FCM receives $1.50.
  • Sending price_centicents 10000 instead moves the position with no cash. Sending 0 makes the error account pay the full $1 per contract ($5.00).
post/fcm/positions/transfers

Request

  • Base URL: https://external-api.kalshi.com/trade-api/v2
  • URL: https://external-api.kalshi.com/trade-api/v2/fcm/positions/transfers
  • Auth: API key in header KALSHI-ACCESS-KEY and API key in header KALSHI-ACCESS-SIGNATURE and API key in header KALSHI-ACCESS-TIMESTAMP

Request body

source_subtrader_idstring required

Full id of the FCM subtrader giving up the position, as returned by GET /fcm/subtraders.

target_subtrader_idstring required

Subtrader under your error account that receives the position, {error_account_id}_{suffix} with a 1-16 character alphanumeric suffix. Created if it does not exist.

market_tickerstring required

Ticker of the market whose position is moved.

position_centicountinteger required

Contracts to move, in centicounts (contracts x 100). Positive moves YES, negative moves NO. Must be a non-zero whole number of contracts, e.g. 1000 for 10 YES or -500 for 5 NO.

price_centicentsinteger required

YES price per contract in centicents (cents x 100), in whole cents, even when moving NO. For example, 4500 is 45 cents.

Response

Position transferred

position_transfer_idstring required

Id of the executed transfer. Store it; no Trade API endpoint lists past transfers.

Changes