Skip to main content
POST
/
portfolio
/
subaccounts
/
positions
/
transfer
Transfer Position Between Subaccounts
curl --request POST \
  --url https://external-api.kalshi.com/trade-api/v2/portfolio/subaccounts/positions/transfer \
  --header 'Content-Type: application/json' \
  --header 'KALSHI-ACCESS-KEY: <api-key>' \
  --header 'KALSHI-ACCESS-SIGNATURE: <api-key>' \
  --header 'KALSHI-ACCESS-TIMESTAMP: <api-key>' \
  --data '
{
  "client_transfer_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "from_subaccount": 123,
  "to_subaccount": 123,
  "market_ticker": "<string>",
  "count": 123,
  "price_cents": 123
}
'
{
  "position_transfer_id": "<string>"
}

Authorizations

KALSHI-ACCESS-KEY
string
header
required

Your API key ID

KALSHI-ACCESS-SIGNATURE
string
header
required

RSA-PSS signature of the request

KALSHI-ACCESS-TIMESTAMP
string
header
required

Request timestamp in milliseconds

Body

application/json
client_transfer_id
string<uuid>
required

Unique client-provided transfer ID for idempotency. Retrying with the same value returns 409.

from_subaccount
integer | null
required

Source subaccount number (0 for primary, 1-63 for numbered subaccounts).

to_subaccount
integer | null
required

Destination subaccount number (0 for primary, 1-63 for numbered subaccounts).

market_ticker
string
required

Ticker of the market whose position is being moved. The market must be on exchange shard 0; markets on any other shard are rejected.

side
enum<string>
required

Side of the position to move.

Available options:
yes,
no
count
integer | null
required

Number of contracts to move (must be greater than 0).

price_cents
integer | null
required

Per-contract price in cents (0-100) used to set cost basis and realized P&L.

Response

Position transfer completed successfully

position_transfer_id
string
required

Server-generated identifier for the position transfer.