Method Name
private/transfer_positions
private/transfer_positionsTransfers multiple positions from one subaccount to another, owned by the same wallet.
The transfer is executed as a an RFQ. A mock RFQ is first created from the taker parameters, followed by a maker quote and a taker execute.
The leg amounts, prices and instrument name must be the same in both param payloads.
Fee is not charged and a zero max_fee must be signed.
Every leg in the transfer must be a position reduction for either maker or taker (or both).
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
| walletstringrequired Public key (wallet) of the account |
| maker_paramsobjectrequired Maker quote parameters and signature |
| maker_params.directionstringrequired Quote direction, buy means trading each leg at its direction, sell means trading each leg in the opposite direction.enum buysell |
| maker_params.max_feestringrequired Max fee ($ for the full trade). Request will be rejected if the supplied max fee is below the estimated fee for this trade. |
| maker_params.nonceintegerrequired Unique nonce defined as a concatenated UTC timestamp in ms and random number up to 6 digits (e.g. 1695836058725001, where 001 is the random number) |
| maker_params.signaturestringrequired Ethereum signature of the quote |
| maker_params.signature_expiry_secintegerrequired Unix timestamp in seconds. Expiry MUST be at least 310 seconds from now. Once time till signature expiry reaches 300 seconds, the quote will be considered expired. This buffer is meant to ensure the trade can settle on chain in case of a blockchain congestion. |
| maker_params.signerstringrequired Owner wallet address or registered session key that signed the quote |
| maker_params.subaccount_idintegerrequired Subaccount ID |
| maker_params.legsarray of objectsrequired Quote legs |
| maker_params.legs[].amountstringrequired Amount in units of the base |
| maker_params.legs[].directionstringrequired Leg direction enum buysell |
| maker_params.legs[].instrument_namestringrequired Instrument name |
| maker_params.legs[].pricestringrequired Leg price |
| taker_paramsobjectrequired Taker quote execution parameters and signature |
| taker_params.directionstringrequired Quote direction, buy means trading each leg at its direction, sell means trading each leg in the opposite direction.enum buysell |
| taker_params.max_feestringrequired Max fee ($ for the full trade). Request will be rejected if the supplied max fee is below the estimated fee for this trade. |
| taker_params.nonceintegerrequired Unique nonce defined as a concatenated UTC timestamp in ms and random number up to 6 digits (e.g. 1695836058725001, where 001 is the random number) |
| taker_params.signaturestringrequired Ethereum signature of the quote |
| taker_params.signature_expiry_secintegerrequired Unix timestamp in seconds. Expiry MUST be at least 310 seconds from now. Once time till signature expiry reaches 300 seconds, the quote will be considered expired. This buffer is meant to ensure the trade can settle on chain in case of a blockchain congestion. |
| taker_params.signerstringrequired Owner wallet address or registered session key that signed the quote |
| taker_params.subaccount_idintegerrequired Subaccount ID |
| taker_params.legsarray of objectsrequired Quote legs |
| taker_params.legs[].amountstringrequired Amount in units of the base |
| taker_params.legs[].directionstringrequired Leg direction enum buysell |
| taker_params.legs[].instrument_namestringrequired Instrument name |
| taker_params.legs[].pricestringrequired Leg price |
Response
| idstring or integerrequired |
| resultobjectrequired |
| result.maker_quoteobjectrequired Created maker-side quote object |
| result.maker_quote.cancel_reasonstringrequired Cancel reason, if any enum user_requestinsufficient_marginsigned_max_fee_too_lowmmp_triggercancel_on_disconnectsession_key_deregisteredsubaccount_withdrawnrfq_no_longer_opencompliance |
| result.maker_quote.creation_timestampintegerrequired Creation timestamp in ms since Unix epoch |
| result.maker_quote.directionstringrequired Quote direction enum buysell |
| result.maker_quote.extra_feestringrequired Extra fee in USDC added by the referring client (included in quote fee) |
| result.maker_quote.feestringrequired Fee paid for this quote (if executed) |
| result.maker_quote.fill_pctstringrequired Percentage of the RFQ that this quote would fill, from 0 to 1. |
| result.maker_quote.is_transferbooleanrequired Whether the order was generated through private/transfer_position |
| result.maker_quote.labelstringrequired User-defined label, if any |
| result.maker_quote.last_update_timestampintegerrequired Last update timestamp in ms since Unix epoch |
| result.maker_quote.legs_hashstringrequired Hash of the legs of the best quote to be signed by the taker. |
| result.maker_quote.liquidity_rolestringrequired Liquidity role enum makertaker |
| result.maker_quote.max_feestringrequired Signed max fee |
| result.maker_quote.mmpbooleanrequired Whether the quote is tagged for market maker protections (default false) |
| result.maker_quote.nonceintegerrequired Nonce |
| result.maker_quote.quote_idstringrequired Quote ID |
| result.maker_quote.rfq_idstringrequired RFQ ID |
| result.maker_quote.signaturestringrequired Ethereum signature of the quote |
| result.maker_quote.signature_expiry_secintegerrequired Unix timestamp in seconds |
| result.maker_quote.signerstringrequired Owner wallet address or registered session key that signed the quote |
| result.maker_quote.statusstringrequired Status enum openfilledcancelledexpired |
| result.maker_quote.subaccount_idintegerrequired Subaccount ID |
| result.maker_quote.tx_hashstring or nullrequired Blockchain transaction hash (only for executed quotes) |
| result.maker_quote.tx_statusstring or nullrequired Blockchain transaction status (only for executed quotes) enum requestedpendingsettledrevertedignoredtimed_out |
| result.maker_quote.legsarray of objectsrequired Quote legs |
| result.maker_quote.legs[].amountstringrequired Amount in units of the base |
| result.maker_quote.legs[].directionstringrequired Leg direction enum buysell |
| result.maker_quote.legs[].instrument_namestringrequired Instrument name |
| result.maker_quote.legs[].pricestringrequired Leg price |
| result.taker_quoteobjectrequired Created taker-side quote object |
| result.taker_quote.cancel_reasonstringrequired Cancel reason, if any enum user_requestinsufficient_marginsigned_max_fee_too_lowmmp_triggercancel_on_disconnectsession_key_deregisteredsubaccount_withdrawnrfq_no_longer_opencompliance |
| result.taker_quote.creation_timestampintegerrequired Creation timestamp in ms since Unix epoch |
| result.taker_quote.directionstringrequired Quote direction enum buysell |
| result.taker_quote.extra_feestringrequired Extra fee in USDC added by the referring client (included in quote fee) |
| result.taker_quote.feestringrequired Fee paid for this quote (if executed) |
| result.taker_quote.fill_pctstringrequired Percentage of the RFQ that this quote would fill, from 0 to 1. |
| result.taker_quote.is_transferbooleanrequired Whether the order was generated through private/transfer_position |
| result.taker_quote.labelstringrequired User-defined label, if any |
| result.taker_quote.last_update_timestampintegerrequired Last update timestamp in ms since Unix epoch |
| result.taker_quote.legs_hashstringrequired Hash of the legs of the best quote to be signed by the taker. |
| result.taker_quote.liquidity_rolestringrequired Liquidity role enum makertaker |
| result.taker_quote.max_feestringrequired Signed max fee |
| result.taker_quote.mmpbooleanrequired Whether the quote is tagged for market maker protections (default false) |
| result.taker_quote.nonceintegerrequired Nonce |
| result.taker_quote.quote_idstringrequired Quote ID |
| result.taker_quote.rfq_idstringrequired RFQ ID |
| result.taker_quote.signaturestringrequired Ethereum signature of the quote |
| result.taker_quote.signature_expiry_secintegerrequired Unix timestamp in seconds |
| result.taker_quote.signerstringrequired Owner wallet address or registered session key that signed the quote |
| result.taker_quote.statusstringrequired Status enum openfilledcancelledexpired |
| result.taker_quote.subaccount_idintegerrequired Subaccount ID |
| result.taker_quote.tx_hashstring or nullrequired Blockchain transaction hash (only for executed quotes) |
| result.taker_quote.tx_statusstring or nullrequired Blockchain transaction status (only for executed quotes) enum requestedpendingsettledrevertedignoredtimed_out |
| result.taker_quote.legsarray of objectsrequired Quote legs |
| result.taker_quote.legs[].amountstringrequired Amount in units of the base |
| result.taker_quote.legs[].directionstringrequired Leg direction enum buysell |
| result.taker_quote.legs[].instrument_namestringrequired Instrument name |
| result.taker_quote.legs[].pricestringrequired Leg price |
Example
{request_example_shell}{request_example_javascript}{request_example_python}The above command returns JSON structured like this:
{response_example_json}