Reverse a futures position
https://app.skylit.ai/api/nexus/v1/trading/accounts/{account}/reverseCloses the position and opens the same size the other way, in one market fill. It's the Reverse button on the Futures Desk, run by the same engine: same fill, same size and risk rules (a reverse opens a position, so an evaluation's contract cap and loss limits apply), same live-price guard.
With a clientOrderId it flips once: sending the same id again answers with the first reversing order and flips nothing. Nothing held answers 422 order_refused.
Authorization
Authorization: Bearer <your API key>Required. A missing header returns 401; an invalid, revoked or expired key returns 403.
Path parameters
accountstringrequiredpractice,agent(your bot's account),evaluationorfunded(when you have exactly one running), or a futures account id from capabilities.
Headers
Idempotency-KeystringYour
clientOrderId, as a header instead of a body field. If you send both they must match.
Request body
tickerstringrequiredThe position, as a product (
NQ) or one contract (NQZ26).clientOrderIdstringMakes the reverse run once in 24 hours. You can send it as the
Idempotency-Keyheader instead.
Responses
- 200
The reversing order (role
entry, twice the position's size), filled. - 400
The request was refused before anything was traded. Codes:
bad_request,bad_contract,invalid_quantity,invalid_price,unsupported_asset_class,unsupported_order_type,only_market_orders,limit_price_required(a limit with nolimitPrice),invalid_limit_price(not in cents, or outside 0.01 to 99,999.99 for options or 999,999.99 for stocks),stop_price_required(a stop with nostopPrice),invalid_stop_price(not in cents, or outside 0.01 to 999,999.99),invalid_take_profit,test_orders_unavailable,test_modify_unavailable. - 401
No key, or a key that isn't valid. Codes:
missing_api_key,invalid_api_key. - 403
The key works but the account can't do this. Codes:
account_suspended,nexus_access_denied,futures_access_denied. - 404
Not on your account. Codes:
trade_not_found,account_not_found,order_not_found. - 409
The order clashes with what you hold or sent before. Codes:
duplicate_position(withtradeId: add to it instead),trade_closed,open_position_limit(open positions plus resting opens through the API are at 50),working_order_limit(50 options and stock orders already resting through the API),position_size_limit(an add would take the position past 1,000 contracts or 100,000 shares),client_order_id_used,request_in_progress,account_locked,account_busy,account_ended,order_not_working(it already filled, expired, or was cancelled or rejected),stop_triggered(a stop that's been set off is filling now, so it can't be cancelled or changed). - 422
Read fine, but the market or the account says no. Codes:
market_closed,contract_expired,contract_not_offered,price_outside_market,insufficient_buying_power,account_not_tradable,account_ambiguous,reduce_only_would_open,order_refused,order_rejected(a resting order that tried to fill right away and couldn't;orderIdpoints to it). A resting order that can't be covered answersinsufficient_buying_powerwithorderIdtoo: it's recorded as rejected. - 429
Over a rate limit. Wait
Retry-Afterseconds, then retry. Codes:rate_limited, andstream_limit_reached(too many live streams open: 3 per key, 6 per account). - 500
Something went wrong on our side. If you sent a
clientOrderId, retry with the same one. Code:internal_error. - 503
Try again in a moment (honour
Retry-Afterwhen it's sent). Codes:stale_quote(the quote, or a stock's last trade, is more than 15 seconds old, so nothing filled),no_live_price,rules_pending,unavailable,auth_unavailable,access_check_unavailable,api_keys_unavailable,trades_api_disabled,stream_unavailable(the live stream isn't on, or the server is restarting: try again shortly, or poll the reads).
Response fields
dataobjectWhat reverse, breakeven and protect answer.
accountobjectorderobjectA futures order. It's not a
Trade: futures keep their own book. Prices are in index points, money in cents.
metaobjectExtra facts about an order. Each field is there only when it applies.
fillobjectThe fill:
price,priceSource(marketorclient), and when you sent a price, thebidandaskit was checked against. On an exit,quantityis how many sold.clientOrderIdstringidempotentReplaybooleanThis answer is a repeat of an earlier order with the same
clientOrderId.testbooleanA test order: nothing was placed.
notCheckedstring[]Futures test orders: what the preview couldn't check, like
account_rules_judgmentorbracket_netting.discordRoutingobjectWhere Nexus routed the trade to Discord, when it did.
nothingToClosebooleanstillOpenstring[]A repeated
closeAll: positions still open.tradeIdstringuuidA resting exit or an options stop: the trade it closes or protects.
triggerOnstringAn options stop:
underlying.underlyingPricenumberAn options stop: the stock's price right now.
marketOpenbooleanAn options stop: whether the market's open for the contract.
firesNowbooleanAn options stop: the stock's already through a level, so it fires on the next check.
firesOnsays which leg.wouldFireNowbooleanA test options stop: what
firesNowwould say.wouldFillNowbooleanA test limit: whether the real one would've filled right away, with
fillPrice.wouldTriggerNowbooleanA test stock stop: the last trade's already through it.
wouldRestBecausestringA test limit: why the real one would rest.
alreadyCancelledbooleanA repeated cancel: it was already cancelled.
Last updated