HomeDocumentationAPI Reference
Log In
API Reference

Transfer Position

Method Name

private/transfer_position

Transfers a positions from one subaccount to another, owned by the same wallet.

The transfer is executed as a pair of orders crossing each other.
The maker order is created first, followed by a taker order crossing it.
The order amounts, limit prices and instrument name must be the same for both orders.
Fee is not charged and a zero max_fee must be signed.
The maker order is forcibly considered to be reduce_only, meaning it can only reduce the position size.

History: For position transfer history, use the private/get_trade_history RPC (not private/get_erc20_transfer_history).
Required minimum session key permission level is admin

Parameters

wallet  string required
Public key (wallet) of the account
maker_params  object required
Maker order parameters and signature. Maximum transfer amount is limited by the size of the maker position. Transfers that increase the maker's position size are not allowed.
maker_params. amount  string required
Order amount in units of the base
maker_params. direction  string required
Order direction
enum buy sell
maker_params. instrument_name  string required
Instrument name
maker_params. limit_price  string required
Limit price in quote currency.
This field is still required for market orders because it is a component of the signature. However, market orders will not leave a resting order in the book in case of a partial fill.
maker_params. max_fee  string required
Max fee PER contract, denominated in USDC.
For resting orders (maker orders), max_fee must be > 2 x max(taker_fee, maker_fee) x spot_price + extra_fee / amount.For crossing orders (taker order), max_fee must be > maker max_fee + base_fee / fill_amount.
Note, in this calculation, regardless of the custom account taker / maker fees, the standard taker / maker fees are used.
The max(limit_price, index_price) is used to calculate the notional volume.
maker_params. nonce  integer required
Unique nonce defined as (UTC_timestamp in ms)(random_number_up_to_3_digits) (e.g. 1695836058725001, where 001 is the random number).
Note, using a random number beyond 3 digits will cause JSON serialization to fail.
maker_params. signature  string required
Ethereum signature of the order
maker_params. signature_expiry_sec  integer required
Unix timestamp in seconds. Order signature becomes invalid after this time, and the system will cancel the order.
Expiry MUST be at least 5 min from now.
maker_params. signer  string required
Owner wallet address or registered session key that signed order
maker_params. subaccount_id  integer required
Subaccount ID
taker_params  object required
Taker order parameters and signature
taker_params. amount  string required
Order amount in units of the base
taker_params. direction  string required
Order direction
enum buy sell
taker_params. instrument_name  string required
Instrument name
taker_params. limit_price  string required
Limit price in quote currency.
This field is still required for market orders because it is a component of the signature. However, market orders will not leave a resting order in the book in case of a partial fill.
taker_params. max_fee  string required
Max fee PER contract, denominated in USDC.
For resting orders (maker orders), max_fee must be > 2 x max(taker_fee, maker_fee) x spot_price + extra_fee / amount.For crossing orders (taker order), max_fee must be > maker max_fee + base_fee / fill_amount.
Note, in this calculation, regardless of the custom account taker / maker fees, the standard taker / maker fees are used.
The max(limit_price, index_price) is used to calculate the notional volume.
taker_params. nonce  integer required
Unique nonce defined as (UTC_timestamp in ms)(random_number_up_to_3_digits) (e.g. 1695836058725001, where 001 is the random number).
Note, using a random number beyond 3 digits will cause JSON serialization to fail.
taker_params. signature  string required
Ethereum signature of the order
taker_params. signature_expiry_sec  integer required
Unix timestamp in seconds. Order signature becomes invalid after this time, and the system will cancel the order.
Expiry MUST be at least 5 min from now.
taker_params. signer  string required
Owner wallet address or registered session key that signed order
taker_params. subaccount_id  integer required
Subaccount ID

Response

id  string or integer required
result  object required
result. maker_order  object required
result.maker_order. amount  string required
Order amount in units of the base
result.maker_order. average_price  string required
Average fill price
result.maker_order. cancel_reason  string required
If cancelled, reason behind order cancellation
enum user_request mmp_trigger insufficient_margin signed_max_fee_too_low cancel_on_disconnect ioc_or_market_partial_fill session_key_deregistered subaccount_withdrawn compliance trigger_failed validation_failed algo_completed
result.maker_order. creation_timestamp  integer required
Creation timestamp (in ms since Unix epoch)
result.maker_order. direction  string required
Order direction
enum buy sell
result.maker_order. filled_amount  string required
Total filled amount for the order
result.maker_order. instrument_name  string required
Instrument name
result.maker_order. is_transfer  boolean required
Whether the order was generated through private/transfer_position
result.maker_order. label  string required
Optional user-defined label for the order
result.maker_order. last_update_timestamp  integer required
Last update timestamp (in ms since Unix epoch)
result.maker_order. limit_price  string required
Limit price in quote currency
result.maker_order. max_fee  string required
Max fee PER contract, denominated in USDC.Max fee must be > 2 x max(taker_fee, maker_fee) x spot_price + extra_fee / amount.If the order crosses the book, it must be >= 2 x max(taker_fee, maker_fee) x spot_price + base_fee / fill_amount + extra_fee / amount.Note, in this calculation, regardless of the account taker / maker fees, the standard taker / maker fees are used.
result.maker_order. mmp  boolean required
Whether the order is tagged for market maker protections
result.maker_order. nonce  integer required
Unique nonce defined as (UTC_timestamp in ms)(random_number_up_to_3_digits) (e.g. 1695836058725001, where 001 is the random number)
result.maker_order. order_fee  string required
Order fee paid so far
result.maker_order. order_id  string required
Order ID
result.maker_order. order_status  string required
Order status
enum open filled cancelled expired untriggered algo_active
result.maker_order. order_type  string required
Order type
enum limit market
result.maker_order. quote_id  string or null required
Quote ID if the trade was executed via RFQ
result.maker_order. signature  string required
Ethereum signature of the order
result.maker_order. signature_expiry_sec  integer required
Signature expiry timestamp
result.maker_order. signer  string required
Owner wallet address or registered session key that signed order
result.maker_order. subaccount_id  integer required
Subaccount ID
result.maker_order. time_in_force  string required
Time in force
enum gtc post_only fok ioc
result.maker_order. algo_duration_sec  integer or null
Total execution window in seconds
result.maker_order. algo_num_slices  integer or null
Number of child executions
result.maker_order. algo_slices_completed  integer or null
Number of slices executed so far
result.maker_order. algo_type  string or null
Algo order type (twap or vwap)
enum twap
result.maker_order. extra_fee  string or null
(Optional) Extra fee in USDC added to the total final fee paid by user (must be between 0.000001 and 1,000 USDC).
result.maker_order. replaced_order_id  string or null
If replaced, ID of the order that was replaced
result.maker_order. signed_limit_price  string or null
The original limit price that the user signed. Only set when the order was adjusted (i.e., for post-only orders with reject_post_only=false that would have crossed). Used for on-chain submission.
result.maker_order. trigger_price  string or null
(Required for trigger orders) Index or Market price to trigger order at
result.maker_order. trigger_price_type  string or null
(Required for trigger orders) Trigger with Index or Mark Price
enum mark index
result.maker_order. trigger_reject_message  string or null
(Required for trigger orders) Error message if error occured during trigger
result.maker_order. trigger_type  string or null
(Required for trigger orders) Stop-loss or Take-profit.
enum stoploss takeprofit
result. maker_trade  object required
result.maker_trade. direction  string required
Order direction
enum buy sell
result.maker_trade. expected_rebate  string required
Expected rebate for this trade
result.maker_trade. extra_fee  string required
Extra fee in USDC added by the referring client (included in trade fee)
result.maker_trade. index_price  string required
Index price of the underlying at the time of the trade
result.maker_trade. instrument_name  string required
Instrument name
result.maker_trade. is_transfer  boolean required
Whether the trade was generated through private/transfer_position
result.maker_trade. label  string required
Optional user-defined label for the order
result.maker_trade. liquidity_role  string required
Role of the user in the trade
enum maker taker
result.maker_trade. mark_price  string required
Mark price of the instrument at the time of the trade
result.maker_trade. order_id  string required
Order ID
result.maker_trade. quote_id  string or null required
Quote ID if the trade was executed via RFQ
result.maker_trade. realized_pnl  string required
Realized PnL for this trade
result.maker_trade. realized_pnl_excl_fees  string required
Realized PnL for this trade using cost accounting that excludes fees
result.maker_trade. rfq_id  string or null required
RFQ ID if the trade was executed via RFQ
result.maker_trade. subaccount_id  integer required
Subaccount ID
result.maker_trade. timestamp  integer required
Trade timestamp (in ms since Unix epoch)
result.maker_trade. trade_amount  string required
Amount filled in this trade
result.maker_trade. trade_fee  string required
Base_fee (only takers) + unit_fee (adjusted via rebates / discounts) + extra_fee (set by referrring client))
result.maker_trade. trade_id  string required
Trade ID
result.maker_trade. trade_price  string required
Price at which the trade was filled
result.maker_trade. transaction_id  string required
The transaction id of the related settlement transaction
result.maker_trade. tx_hash  string or null required
Blockchain transaction hash
result.maker_trade. tx_status  string required
Blockchain transaction status
enum requested pending settled reverted ignored timed_out
result. taker_order  object required
result.taker_order. amount  string required
Order amount in units of the base
result.taker_order. average_price  string required
Average fill price
result.taker_order. cancel_reason  string required
If cancelled, reason behind order cancellation
enum user_request mmp_trigger insufficient_margin signed_max_fee_too_low cancel_on_disconnect ioc_or_market_partial_fill session_key_deregistered subaccount_withdrawn compliance trigger_failed validation_failed algo_completed
result.taker_order. creation_timestamp  integer required
Creation timestamp (in ms since Unix epoch)
result.taker_order. direction  string required
Order direction
enum buy sell
result.taker_order. filled_amount  string required
Total filled amount for the order
result.taker_order. instrument_name  string required
Instrument name
result.taker_order. is_transfer  boolean required
Whether the order was generated through private/transfer_position
result.taker_order. label  string required
Optional user-defined label for the order
result.taker_order. last_update_timestamp  integer required
Last update timestamp (in ms since Unix epoch)
result.taker_order. limit_price  string required
Limit price in quote currency
result.taker_order. max_fee  string required
Max fee PER contract, denominated in USDC.Max fee must be > 2 x max(taker_fee, maker_fee) x spot_price + extra_fee / amount.If the order crosses the book, it must be >= 2 x max(taker_fee, maker_fee) x spot_price + base_fee / fill_amount + extra_fee / amount.Note, in this calculation, regardless of the account taker / maker fees, the standard taker / maker fees are used.
result.taker_order. mmp  boolean required
Whether the order is tagged for market maker protections
result.taker_order. nonce  integer required
Unique nonce defined as (UTC_timestamp in ms)(random_number_up_to_3_digits) (e.g. 1695836058725001, where 001 is the random number)
result.taker_order. order_fee  string required
Order fee paid so far
result.taker_order. order_id  string required
Order ID
result.taker_order. order_status  string required
Order status
enum open filled cancelled expired untriggered algo_active
result.taker_order. order_type  string required
Order type
enum limit market
result.taker_order. quote_id  string or null required
Quote ID if the trade was executed via RFQ
result.taker_order. signature  string required
Ethereum signature of the order
result.taker_order. signature_expiry_sec  integer required
Signature expiry timestamp
result.taker_order. signer  string required
Owner wallet address or registered session key that signed order
result.taker_order. subaccount_id  integer required
Subaccount ID
result.taker_order. time_in_force  string required
Time in force
enum gtc post_only fok ioc
result.taker_order. algo_duration_sec  integer or null
Total execution window in seconds
result.taker_order. algo_num_slices  integer or null
Number of child executions
result.taker_order. algo_slices_completed  integer or null
Number of slices executed so far
result.taker_order. algo_type  string or null
Algo order type (twap or vwap)
enum twap
result.taker_order. extra_fee  string or null
(Optional) Extra fee in USDC added to the total final fee paid by user (must be between 0.000001 and 1,000 USDC).
result.taker_order. replaced_order_id  string or null
If replaced, ID of the order that was replaced
result.taker_order. signed_limit_price  string or null
The original limit price that the user signed. Only set when the order was adjusted (i.e., for post-only orders with reject_post_only=false that would have crossed). Used for on-chain submission.
result.taker_order. trigger_price  string or null
(Required for trigger orders) Index or Market price to trigger order at
result.taker_order. trigger_price_type  string or null
(Required for trigger orders) Trigger with Index or Mark Price
enum mark index
result.taker_order. trigger_reject_message  string or null
(Required for trigger orders) Error message if error occured during trigger
result.taker_order. trigger_type  string or null
(Required for trigger orders) Stop-loss or Take-profit.
enum stoploss takeprofit
result. taker_trade  object required
result.taker_trade. direction  string required
Order direction
enum buy sell
result.taker_trade. expected_rebate  string required
Expected rebate for this trade
result.taker_trade. extra_fee  string required
Extra fee in USDC added by the referring client (included in trade fee)
result.taker_trade. index_price  string required
Index price of the underlying at the time of the trade
result.taker_trade. instrument_name  string required
Instrument name
result.taker_trade. is_transfer  boolean required
Whether the trade was generated through private/transfer_position
result.taker_trade. label  string required
Optional user-defined label for the order
result.taker_trade. liquidity_role  string required
Role of the user in the trade
enum maker taker
result.taker_trade. mark_price  string required
Mark price of the instrument at the time of the trade
result.taker_trade. order_id  string required
Order ID
result.taker_trade. quote_id  string or null required
Quote ID if the trade was executed via RFQ
result.taker_trade. realized_pnl  string required
Realized PnL for this trade
result.taker_trade. realized_pnl_excl_fees  string required
Realized PnL for this trade using cost accounting that excludes fees
result.taker_trade. rfq_id  string or null required
RFQ ID if the trade was executed via RFQ
result.taker_trade. subaccount_id  integer required
Subaccount ID
result.taker_trade. timestamp  integer required
Trade timestamp (in ms since Unix epoch)
result.taker_trade. trade_amount  string required
Amount filled in this trade
result.taker_trade. trade_fee  string required
Base_fee (only takers) + unit_fee (adjusted via rebates / discounts) + extra_fee (set by referrring client))
result.taker_trade. trade_id  string required
Trade ID
result.taker_trade. trade_price  string required
Price at which the trade was filled
result.taker_trade. transaction_id  string required
The transaction id of the related settlement transaction
result.taker_trade. tx_hash  string or null required
Blockchain transaction hash
result.taker_trade. tx_status  string required
Blockchain transaction status
enum requested pending settled reverted ignored timed_out

Example

{request_example_shell}
{request_example_javascript}
{request_example_python}

The above command returns JSON structured like this:

{response_example_json}