Performs a "risk dry run" on an order, returning the estimated fee and whether the order is expected to pass.
For market orders, the fill is assumed to happen at the supplied limit price. For accurate results the caller should calculate an expected fill price from orderbook state and add a small buffer to it to account for latency.
Should any exception be raised in the process of evaluating the order, a standard RPC error will be returned with the error details. Required minimum session key permission level is read_only
Parameters
amountstringrequired Order amount in units of the base
directionstringrequired Order direction enum buysell
instrument_namestringrequired Instrument name
limit_pricestringrequired 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.
max_feestringrequired Max fee per unit of volume, denominated in units of the quote currency (usually USDC).Order will be rejected if the supplied max fee is below the estimated fee for this order.
nonceintegerrequired 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.
signaturestringrequired Ethereum signature of the order
signature_expiry_secintegerrequired 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.
signerstringrequired Owner wallet address or registered session key that signed order
subaccount_idintegerrequired Subaccount ID
is_atomic_signingboolean Used by vaults to determine whether the signature is an EIP-1271 signature.
labelstring Optional user-defined label for the order
mmpboolean Whether the order is tagged for market maker protections (default false)
order_typestring Order type: - limit: limit order (default) - market: market order, note that limit_price is still required for market orders, but unfilled order portion will be marked as cancelled enum limitmarket
reduce_onlyboolean If true, the order will not be able to increase position's size (default false). If the order amount exceeds available position size, the order will be filled up to the position size and the remainder will be cancelled. This flag is only supported for market orders or non-resting limit orders (IOC or FOK)
referral_codestring Optional referral code for the order
reject_timestampinteger UTC timestamp in ms, if provided the matching engine will reject the order with an error if reject_timestamp < server_time. Note that the timestamp must be consistent with the server time: use public/get_time method to obtain current server time.
time_in_forcestring Time in force behaviour: - gtc: good til cancelled (default) - post_only: a limit order that will be rejected if it crosses any order in the book, i.e. acts as a taker order - fok: fill or kill, will be rejected if it is not fully filled - ioc: immediate or cancel, fill at best bid/ask (market) or at limit price (limit), the unfilled portion is cancelled Note that the order will still expire on the signature_expiry_sec timestamp. enum gtcpost_onlyfokioc
trigger_pricestring (Required for trigger orders) "index" or "mark" price to trigger order at
trigger_price_typestring (Required for trigger orders) Trigger with "mark" price as "index" price type not supported yet. enum markindex
trigger_typestring (Required for trigger orders) "stoploss" or "takeprofit" enum stoplosstakeprofit
Response
idstring or integerrequired
resultobjectrequired
result.estimated_feestringrequired An estimate for how much the user will actually pay in fees for the order ($ for the whole trade).
result.estimated_fill_amountstringrequired (Returns 0 for trigger orders) An estimate the amount that will be instantly crossed upon order submission.
result.estimated_fill_pricestringrequired (Returns 0 for trigger orders) An estimate for the average fill price of the order.
result.estimated_order_statusstringrequired An estimate for the order status after submission. Fully filled orders will be marked as filled, unfilled and partially filled limit orders will be marked as open and partially filled market / IOC orders will be marked as cancelled. enum openfilledcancelledexpireduntriggered
result.estimated_realized_pnlstringrequired (Returns 0 for trigger orders) An estimate for the realized PnL of the order. For orders with an estimated cancelled status this only includes PnL of the filled amount.
result.estimated_realized_pnl_excl_feesstringrequired (Returns 0 for trigger orders) An estimate for the realized PnL of the order with cost basis calculated without considering fees. For orders with an estimated cancelled status this only includes PnL of the filled amount.
result.invalid_reasonstring or nullrequired Reason for the order being invalid, if any. enum Account is currently under maintenance margin requirements, trading is frozen.This order would cause account to fall under maintenance margin requirements.Insufficient buying power, only a single risk-reducing open order is allowed.Insufficient buying power, consider reducing order size.Insufficient buying power, consider reducing order size or canceling other orders.Consider canceling other limit orders or using IOC, FOK, or market orders. This order is risk-reducing, but if filled with other open orders, buying power might be insufficient.Insufficient buying power.
result.is_validbooleanrequired True if order is expected to pass margin requirements.
result.max_amountstring or nullrequired Estimated maximum order amount.
result.post_initial_marginstringrequired (Returns 0 for trigger orders) User's hypothetical margin balance if the order or trade were to get accepted. For maker orders (limit and not IOC/FOK) this also includes the margin locked for other outstanding orders.
result.post_liquidation_pricestring or nullrequired Subaccounts's liquidation price if the order were to be fully filled.
result.pre_initial_marginstringrequired (Returns 0 for trigger orders) User's initial margin balance before the order or trade. For maker orders (limit and not IOC/FOK) this also includes the margin locked for other outstanding orders.
result.suggested_max_feestringrequired Recommended value for max_fee of the order (per contract).
Example
{request_example_shell}
{request_example_javascript}
{request_example_python}
The above command returns JSON structured like this: