{
"position_transfer_id": "<string>"
}{
"code": "<string>",
"message": "<string>",
"details": "<string>"
}{
"code": "<string>",
"message": "<string>",
"details": "<string>"
}{
"code": "<string>",
"message": "<string>",
"details": "<string>"
}{
"code": "<string>",
"message": "<string>",
"details": "<string>"
}{
"code": "<string>",
"message": "<string>",
"details": "<string>"
}{
"code": "<string>",
"message": "<string>",
"details": "<string>"
}{
"code": "<string>",
"message": "<string>",
"details": "<string>"
}Create FCM Position Transfer
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_idpicks 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_centicents0 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_centicents10000 instead moves the position with no cash. Sending 0 makes the error account pay the full 1percontract(5.00).
{
"position_transfer_id": "<string>"
}{
"code": "<string>",
"message": "<string>",
"details": "<string>"
}{
"code": "<string>",
"message": "<string>",
"details": "<string>"
}{
"code": "<string>",
"message": "<string>",
"details": "<string>"
}{
"code": "<string>",
"message": "<string>",
"details": "<string>"
}{
"code": "<string>",
"message": "<string>",
"details": "<string>"
}{
"code": "<string>",
"message": "<string>",
"details": "<string>"
}{
"code": "<string>",
"message": "<string>",
"details": "<string>"
}Authorizations
Your API key ID
Base64 signature of the pre-sign text (timestamp + method + path) made with the API key's algorithm - RSA-PSS with SHA-256 for RSA keys, Ed25519 for Ed25519 keys
Request timestamp in milliseconds
Body
Full id of the FCM subtrader giving up the position, as returned by GET /fcm/subtraders.
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.
Ticker of the market whose position is moved.
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.
YES price per contract in centicents (cents x 100), in whole cents, even when moving NO. For example, 4500 is 45 cents.
0 <= x <= 10000Response
Position transferred
Id of the executed transfer. Store it; no Trade API endpoint lists past transfers.