Skip to main content
Mainnet runs production-v0.4.0-2. This page tracks what is live in production, anchored to the production release that shipped each change; verify the running version at any time with GET / on https://api.arcus.xyz. Changes reach testnet first — see the testnet changelog for what is queued ahead of production.
production-v0.4.0-2

API changes

Order management

  • POST /v1/scheduleCancel accepts an optional marketId to arm a per-market dead man’s switch, independent of the account-wide switch. A wallet may hold a bounded number of armed switches; arming beyond it returns 429, and refreshing an armed switch is always allowed.

WebSocket

  • Equity and free collateral streamed over WebSocket now net funding that has accrued but not yet settled, matching the values the margin engine uses.
production-v0.4.0-2

Orders and fills

  • Partially filled orders that are then canceled now report avgFillPrice. A CANCELED order with filledSize above zero on GET /v1/orders carries avgFillPrice, the volume-weighted price of its fills; until now it was omitted.
  • closedPnl on closing fills is now computed from the cost basis the fill releases. On GET /v1/fills, a fill that reduces or closes a position reports its notional against the cost basis it releases, minus the fee, instead of using a truncated per-unit average entry price. Opening and add legs still report −fee.
  • Liquidation fills now report closedPnl. The liquidated account’s leg of a forced closure (liquidation.method LIQUIDATION) on GET /v1/fills carries the realized PnL of the close, net of taker trading fees (the liquidation penalty included in fee is not deducted); until now it read "0". Earlier liquidation fills are not backfilled.
production-v0.3.0

WebSocket

  • WebSocket connections now receive a 1001 (Going Away) close frame before the server drains them on restart, instead of being closed without a close frame.

Liquidations and risk

  • Liquidation orders closed on the book carry the limit price the engine computed for the close, or 0 when that limit is not a positive price.
  • Liquidation updates report the full fee charged, including the liquidated account’s taker trading fees, and forced-close order rows (liquidation and ADL) report avgFillPrice.
  • Orders, modifies, and fills that would take a position past the engine’s maximum position notional, one fixed bound for all markets (about $922M), are rejected with POSITION_SIZE_CAP_EXCEEDED.
  • A triggered TP/SL order keeps its trigger metadata on its terminal cancel, so GET /v1/order/{orderId} still shows the stop after an IOC partial fill.
production-v0.2.0

Margin

  • Per-account isolated margin is now enabled in production. Set a market to isolated mode with the optional isolated flag on POST /v1/setLeverage, move collateral onto or off an isolated position’s leg with POST /v1/adjustIsolatedMargin, and read the mode from marginMode/isolated on position rows, GET /v1/leverages, and the accountAttributeUpdates channel. The API surface shipped in production-v0.1.10.0 and read CROSS/false for every account until now; isolated behaviour is active for all accounts as of this update. Testnet has carried the full mechanics since testnet-v1.8.0 — see the testnet changelog for the detailed marginUsed, rejection-reason, and streaming semantics.
production-v0.2.0

WebSocket / Order book

Markets

  • 13 new crypto markets enabled and tradeable: DOGE, ENA, PUMP, NEAR, PENGU, FARTCOIN, SUI, WLFI, LINK, BNB, TAO, AAVE, UNI.
production-v0.1.10.0

Breaking changes

API changes

Order management

  • New POST /v1/scheduleCancel dead man’s switch: arm, refresh, or disarm a per-subaccount deadline; if it elapses the gateway fires cancelAllOrders for that subaccount.
  • GET /v1/positions no longer returns 500 when the oracle price read times out.
  • Position rows and GET /v1/leverages carry marginMode and isolated. When this release shipped both read CROSS and false for every account, as per-account isolated margin was not yet enabled in production; it has since been turned on (see the latest entry above).
  • Cancel + place: every modify emits CANCELED (cancelReason: MODIFY_CANCELED) then the replacement outcome —PLACED, fills, orREJECTED— under the same orderId. Same-price size decreases keep queue priority. You can expect to see the cancel + place/fill messages on the same GSN but increasing account subsequence numbers for clarity about ordering. Cancels should always arrive first before any fills/place from the newly modified order.

WebSocket / Order book

  • market filter on positions, orders, and userFills subscriptions and on the get RPCs for fills, orders, positions, leverages, mids, and prices. It is part of subscription identity, so unsubscribe must repeat it.
  • userFills subscribe accepts nFills (1–500, default 500) to bound the initial snapshot.
  • isolated and marginMode are always present on accountAttributeUpdates leverage entries.
  • A fill could produce a duplicate account snapshot with a repeated lastSequenceId, and an AccountUpdate could be applied twice when a snapshot was scheduled.

Markets

  • CPER-USD, GME-USD, and QNT-USD are enabled and tradeable, having been listed offline in production-v0.1.8.
production-v0.1.8

API changes

  • New filters on GET /v1/orders and GET /v1/fills: a market param (ticker or numeric id, case-insensitive). GET /v1/fills also gets a role param (MAKER/TAKER). The same market filter works on GET /v1/markets.
  • GET /v1/apiKeys with no accountIndex now returns keys for all subaccounts under the address, each tagged with its own accountIndex (previously just the default one).

Authentication

Rate limits

  • GET /v1/openOrders costs less against the account rate limit: the per-item charge is now one unit per 50 orders returned, down from one per 20, so a full page costs roughly 2.5× less budget.

WebSocket / Order book

  • l2Orderbook subscriptions now support multiple simultaneous aggregation levels per market on one connection. Frames echo sigFigs/roundStep so views can be demultiplexed.
  • Order book snapshots now carry up to 300 price levels (raised cap).

Markets

  • MRNA-USD, NBIS-USD, MRVL-USD, BOT-USD, and MSTR-USD enabled. CPER-USD, GME-USD, and QNT-USD listed at 10x leverage, offline.
production-v0.1.7

Market data

  • The mark price no longer holds a stale premium when the book is too thin to sample an impact mid. The 2.5-minute impact-mid EWMA previously froze at its last value for as long as depth was missing, then stepped when depth returned; it now decays toward the oracle price during regular trading hours, and toward the sealed RTH settlement price off-hours. Mark price is what margin, unrealized PnL, and liquidations are valued off, so a stale premium moved those too.

Order management

  • Fixed a case where a closed position could still read as open. An entry fill and a stop-loss close landing in the same engine tick could be persisted out of order, leaving a flat position showing a size; closing it was then rejected with REDUCE_ONLY_WOULD_INCREASE. Position rows are now versioned by publish order.
  • Mark price stability during thin markets — The oracle now falls back to the oracle or settlement price when the orderbook is too thin to sample an impact-mid price, preventing mark price gaps during low-liquidity conditions.
  • Increased WebSocket frame buffer — The WebSocket server’s maximum request body size has been increased from 64 KB to 1 MB, reducing connection errors for clients sending larger payloads.
  • More reliable position history — Fixed an edge case in position write ordering that could cause duplicate or out-of-order position records under high sequencer throughput.
production-v0.1.6

Breaking changes

API changes

  • GET /v1/openOrders is now bounded and paginated: limit (1–1000) plus from/to on createdAt. An account can hold up to 10,000 live orders, so more than one page may be needed.

Authentication

  • API keys can be scoped to a non-zero subaccount index.

WebSocket / Order book

  • userFills default snapshot size increased to 500.

Market data

production-v0.1.5

Breaking changes

  • Deprecated *Bps fee-tier fields removed. Use makerFeePpm/takerFeePpm (and maker_fee_ppm/taker_fee_ppm); the values are unchanged.

API changes

  • GET /v1/markets exposes minOrderSize and maxOrderSize in base-asset units. maxOrderSize is a per-order gate — reduce-only orders are not exempt.
  • pnlHistory on GET /v1/portfolio is rebased per timeframe, so each timeframe’s first point is 0.

WebSocket / Order book

  • l2Orderbook accepts sigFigs (2–5) and roundStep (1, 2, or 5) to bucket price levels. Bids round down and asks round up, so the displayed spread is never tighter than the true book.
  • Off-hours trading-band shapes updated; boundEvent is now always present on delta entries, with exitRth/enterRth derived from RTH state.
  • Fee-tier account attribute updates now fan out to all subaccounts.
production-v0.1.4

API changes

WebSocket / Order book

  • L2 order book now publishes every 200 ms.

Order management

  • Fills carry a liquidation/ADL marker, and forced-closure status is consistent between live and persisted views.
production-v0.1.2

Breaking changes

  • Fee-tier fields renamed from bps to ppm.

Market data

  • Spread filter applied to BBO candles.
production-v0.1.0-quiesce

Breaking changes

  • API-key create/revoke signing migrated to EIP-712, with a dual-accept window during which the legacy scheme still works.

API changes

Authentication

  • API keys are scoped to (address, publicKey), closing a cross-account revocation path.
  • Replayed withdrawal nonces are rejected at the gateway — a signed withdrawal is single-use.
  • API-key subaccount authorization enforced on modifyOrder.

Order management

  • Maximum order size enforced at the gateway.
  • Per-market open-interest caps enforced in the engine.
  • TPSL handling corrected after trading-band expansion and liquidations.

Market data

  • Fee-tier volume window widened from 14 to 30 days.
  • priceChange24H computed from mark price rather than trade fills.
  • Candles priced from mark price; no-trade buckets filled from the BBO mid.
  • Off-hours trading behavior reworked, including the EWMA anchor-price fallback.
production-v0.0.9-skhy-cc

API changes

  • GET /v1/candles serves oracle-priced candles, with oracle OHLC overlaid on no-trade gap buckets.

Authentication

  • Ordersign signature verification enforced on REST cancelOrder and WebSocket batchCancelOrders.

Order management

  • reduceOnly no longer requires IOC or FOK.

Rate limits

  • cancelAllOrders charges zero IP budget.
  • get/post frames exempt from the WebSocket outbound-message rate limit.
production-v0.0.9

API changes

  • Exchange write responses return the account’s remaining rate-limit allowance.
  • Rate-limit failures return the client id.

Rate limits

  • Order-write endpoints cost zero against the IP bucket; the account-pool cost is configurable.

WebSocket / Order book

  • setLeverage rejections are surfaced on the accountAttributes channel.

Market data

  • SOFR-carry funding formula for RWA perps, quoted on the ACT/360 divisor.
  • Off-hours endpoints always advertise a distinct next trading bound.

Order management

  • Off-hours partial-fill takers are rejected when the limit price violates the trading bound.
  • A resting order is preserved when a modify is rejected in pre-flight.
production-v0.0.8

Market data

  • Historical 1h and 1d candle volume was repaired for 2025-06-01 through 2026-06-30. Those buckets had kept stale volume because the rollup only re-derived each aggregate forward from its newest stored bucket, so a 1m re-fetch never reached them. Re-pull any 1h/1d candles cached from that window.
production-v0.0.6

API changes

Market data

  • Funding formula corrected.
production-v0.0.4

API changes

  • Flat $5 minimum order notional enforced.
  • Minimum withdrawal size of $1 enforced.
  • Trading stat endpoints added.
  • Settlement price and trading bounds surfaced on the market endpoint; open interest added.

Authentication

  • API keys upsert by name — re-creating with the same apiWalletName revokes the old key.
  • Wallet block-list enforced across the trade, withdraw, and key paths.

Order management

  • Entry TPSL support, including rejecting entryTpsl children when the parent entry order is rejected.
  • Reduce-only margin check corrected.
production-v0.0.0

Initial mainnet release

  • First production release of the Arcus API at https://api.arcus.xyz.
Releases production-v0.0.1 through production-v0.0.5 covered launch-period stabilization with no separately documented public API changes; production-v0.0.7, production-v0.1.1, and production-v0.1.3 shipped no changes an API trader needs to act on.