Skip to main content
Subaccounts let a Direct account partition its balance and positions into independent buckets under one set of API credentials. Every account has a primary subaccount (number 0) and may use numbered subaccounts 163.
Subaccounts are currently an API-only feature — they are not yet supported in the Kalshi web or mobile app. Numbered-subaccount balances and positions are managed through the trade API.

Numbering

NumberMeaning
0Primary subaccount (the default account)
163User-managed numbered subaccounts

Transfers

You can move value between your own subaccounts. Transfers net to zero at the account level — nothing leaves your account.
TypeEndpointMoves
CashPOST /portfolio/subaccounts/transferFunds (in cents)
PositionPOST /portfolio/subaccounts/positions/transferAn open market position
Both are idempotent on a client-supplied client_transfer_id: retrying with the same value returns 409 instead of applying the transfer twice.

Position transfer pricing

price_cents sets the per-contract cost basis on each subaccount and the realized P&L on the source. For example, moving 100 YES contracts from subaccount 0 to 1:
price_centsSourceDestinationNet
40closes 100 @ 40c (+$40 cash)opens 100 @ 40c (-$40 cash), basis 40c$0
60closes 100 @ 60c, realizes +$20opens 100 @ 60c, basis 60c$0
The aggregate always nets to zero at the account level.

Listing transfers

GET /portfolio/subaccounts/transfers returns both cash and position transfers, paginated. Each row carries a transfer_type field (cash or position); position rows additionally include market_ticker, side, count, and price_cents.