# Arcus Docs ## Docs - [Claude Code](https://docs.arcus.xyz/ai-tools/claude-code.md): Add the Arcus MCP server to Claude Code - [Cursor](https://docs.arcus.xyz/ai-tools/cursor.md): Add the Arcus MCP server to Cursor - [Arcus MCP server](https://docs.arcus.xyz/ai-tools/mcp.md): Connect your AI assistant to the Arcus docs over the Model Context Protocol - [Windsurf](https://docs.arcus.xyz/ai-tools/windsurf.md): Add the Arcus MCP server to Windsurf - [Account](https://docs.arcus.xyz/api-reference/account/account.md): > **Endpoint:** `wss://api.testnet.arcus.xyz/v1/ws` — one socket multiplexes every channel and RPC request. Click **Connect**, then send the example subscribe message below to start receiving data. - [Account attribute updates](https://docs.arcus.xyz/api-reference/account/accountattributeupdates.md): > **Endpoint:** `wss://api.testnet.arcus.xyz/v1/ws` — one socket multiplexes every channel and RPC request. Click **Connect**, then send the example subscribe message below to start receiving data. - [Funding](https://docs.arcus.xyz/api-reference/account/funding.md): > **Endpoint:** `wss://api.testnet.arcus.xyz/v1/ws` — one socket multiplexes every channel and RPC request. Click **Connect**, then send the example subscribe message below to start receiving data. - [Orders](https://docs.arcus.xyz/api-reference/account/orders.md): > **Endpoint:** `wss://api.testnet.arcus.xyz/v1/ws` — one socket multiplexes every channel and RPC request. Click **Connect**, then send the example subscribe message below to start receiving data. - [Positions](https://docs.arcus.xyz/api-reference/account/positions.md): > **Endpoint:** `wss://api.testnet.arcus.xyz/v1/ws` — one socket multiplexes every channel and RPC request. Click **Connect**, then send the example subscribe message below to start receiving data. - [User fills](https://docs.arcus.xyz/api-reference/account/userfills.md): > **Endpoint:** `wss://api.testnet.arcus.xyz/v1/ws` — one socket multiplexes every channel and RPC request. Click **Connect**, then send the example subscribe message below to start receiving data. - [Authentication](https://docs.arcus.xyz/api-reference/authentication.md): Ed25519 API keys and request signing - [Batch cancel orders](https://docs.arcus.xyz/api-reference/exchange/batch-cancel-orders.md): Cancel up to 100 orders in a single request. - [Batch modify orders (stubbed)](https://docs.arcus.xyz/api-reference/exchange/batch-modify-orders-stubbed.md): Batch modify endpoint. **Not implemented yet** — the spec and SDK surfaces are declared so consumers can wire against the final shape, but the server returns `501 Not Implemented` today. Requires `address` query parameter matching the master Ethereum address for `X-API-Key` once live. - [Cancel all open orders](https://docs.arcus.xyz/api-reference/exchange/cancel-all-open-orders.md): Cancel every open order for `(address, accountIndex)`. - [Cancel order](https://docs.arcus.xyz/api-reference/exchange/cancel-order.md): Cancel an open order by ID. - [Modify order](https://docs.arcus.xyz/api-reference/exchange/modify-order.md): Modify the price and/or quantity of an open order (cancel + replace). - [Place batch orders](https://docs.arcus.xyz/api-reference/exchange/place-batch-orders.md): Place up to 100 orders in a single request. - [Place order](https://docs.arcus.xyz/api-reference/exchange/place-order.md): Place a single order. - [Set leverage for a market](https://docs.arcus.xyz/api-reference/exchange/set-leverage-for-a-market.md): Set per-(account, market) leverage. - [Submit withdrawal](https://docs.arcus.xyz/api-reference/exchange/submit-withdrawal.md): Submit a withdrawal of collateral to the chain. - [Introduction](https://docs.arcus.xyz/api-reference/introduction.md): REST and WebSocket APIs for Arcus - [Bbo](https://docs.arcus.xyz/api-reference/market-data/bbo.md): > **Endpoint:** `wss://api.testnet.arcus.xyz/v1/ws` — one socket multiplexes every channel and RPC request. Click **Connect**, then send the example subscribe message below to start receiving data. - [Candles](https://docs.arcus.xyz/api-reference/market-data/candles.md): > **Endpoint:** `wss://api.testnet.arcus.xyz/v1/ws` — one socket multiplexes every channel and RPC request. Click **Connect**, then send the example subscribe message below to start receiving data. - [Exchange attribute updates](https://docs.arcus.xyz/api-reference/market-data/exchangeattributeupdates.md): > **Endpoint:** `wss://api.testnet.arcus.xyz/v1/ws` — one socket multiplexes every channel and RPC request. Click **Connect**, then send the example subscribe message below to start receiving data. - [L2 orderbook](https://docs.arcus.xyz/api-reference/market-data/l2orderbook.md): > **Endpoint:** `wss://api.testnet.arcus.xyz/v1/ws` — one socket multiplexes every channel and RPC request. Click **Connect**, then send the example subscribe message below to start receiving data. - [L2 orderbook updates](https://docs.arcus.xyz/api-reference/market-data/l2orderbookupdates.md): > **Endpoint:** `wss://api.testnet.arcus.xyz/v1/ws` — one socket multiplexes every channel and RPC request. Click **Connect**, then send the example subscribe message below to start receiving data. - [Markets](https://docs.arcus.xyz/api-reference/market-data/markets.md): > **Endpoint:** `wss://api.testnet.arcus.xyz/v1/ws` — one socket multiplexes every channel and RPC request. Click **Connect**, then send the example subscribe message below to start receiving data. - [Oracle prices](https://docs.arcus.xyz/api-reference/market-data/oracleprices.md): > **Endpoint:** `wss://api.testnet.arcus.xyz/v1/ws` — one socket multiplexes every channel and RPC request. Click **Connect**, then send the example subscribe message below to start receiving data. - [Trades](https://docs.arcus.xyz/api-reference/market-data/trades.md): > **Endpoint:** `wss://api.testnet.arcus.xyz/v1/ws` — one socket multiplexes every channel and RPC request. Click **Connect**, then send the example subscribe message below to start receiving data. - [Get market metadata](https://docs.arcus.xyz/api-reference/marketmetadata/get-market-metadata.md): Returns curated reference data (company profile, branding, headline financials, TradingView chart identifiers, …) for one or all markets served by the api-meta service. - [Get market overview](https://docs.arcus.xyz/api-reference/marketmetadata/get-market-overview.md): Returns a consolidated per-market overview keyed by base asset. - [Get spot candles](https://docs.arcus.xyz/api-reference/marketmetadata/get-spot-candles.md): Returns OHLCV candlestick bars for an api-meta spot/equity market, aggregated at query time from a backfilled 1-minute dataset. - [Get spot market overview](https://docs.arcus.xyz/api-reference/marketmetadata/get-spot-market-overview.md): Returns the spot market universe from the spot-router `/tokens` source of truth, in listed order, augmented with `name`, `logoUrl`, `quote`, and `financials` from the latest stored market metadata profile when available. - [List notifications for an address](https://docs.arcus.xyz/api-reference/notifications/list-notifications-for-an-address.md): Returns the most recent notifications for `address`, newest-first. - [Mark notifications as seen](https://docs.arcus.xyz/api-reference/notifications/mark-notifications-as-seen.md): Flips `seen=true` either on an explicit list of `(created_at_ns, notification_id)` pairs (`ids`) or on the most recent `limit` rows for the calling wallet (`all=true`). - [Register an Expo push token](https://docs.arcus.xyz/api-reference/notifications/register-an-expo-push-token.md): Registers an Expo push token for the calling wallet so the notifications consumer can deliver a push to that device when a matching event (resting fill, liquidation, TP/SL trigger) lands. - [Unregister an Expo push token](https://docs.arcus.xyz/api-reference/notifications/unregister-an-expo-push-token.md): Removes a previously registered Expo push token. - [Create API key](https://docs.arcus.xyz/api-reference/onboarding/create-api-key.md): Create an API key for the ethereum address. - [Get API keys](https://docs.arcus.xyz/api-reference/onboarding/get-api-keys.md): Returns all API keys associated with the given Ethereum address. No authentication required — API keys are Ed25519 public keys and are not secret. Use this to bootstrap: check whether a locally stored key is still active before attempting authenticated requests, and trigger key creation if not. - [Revoke API key](https://docs.arcus.xyz/api-reference/onboarding/revoke-api-key.md): Revoke (remove) an existing API key. - [Get a single trade by ID](https://docs.arcus.xyz/api-reference/public/get-a-single-trade-by-id.md): Returns one trade row. The `market` query parameter is required: `trades_by_market` is partitioned by `market_id` first, so without it the lookup would scan every market's parts. - [Get account](https://docs.arcus.xyz/api-reference/public/get-account.md): Returns account information for the requested address, including balances, collateral, and open positions. No authentication header is required. - [Get account stats](https://docs.arcus.xyz/api-reference/public/get-account-stats.md): Returns trading statistics for any Ethereum address: 30-day rolling notional fill volume and the current trading fee tier (level + BPS). - [Get account transfer updates](https://docs.arcus.xyz/api-reference/public/get-account-transfer-updates.md): Returns deposits, withdrawals, and transfers for the requesting account, newest-first. - [Get all mid prices](https://docs.arcus.xyz/api-reference/public/get-all-mid-prices.md): Returns mids from the precomputed Redis aggregate (`mids:all`) written by go-core. Markets with no bid, no ask, or no top-of-book return an empty string for that key. - [Get Best Bid Offer (BBO)](https://docs.arcus.xyz/api-reference/public/get-best-bid-offer-bbo.md): Returns the best bid and best ask for a market, derived from the orderbook snapshot. Returns null for bestBid/bestAsk when no data is available. - [Get compliance status](https://docs.arcus.xyz/api-reference/public/get-compliance-status.md): Returns the caller's compliance posture for rendering banners and gating product UI. - [Get current rate-limit usage](https://docs.arcus.xyz/api-reference/public/get-current-rate-limit-usage.md): Returns the rate-limit state of both per-subaccount pools (order and cancel) so callers can self-pace and inspect which throttle is constraining them. - [Get fee tier table](https://docs.arcus.xyz/api-reference/public/get-fee-tier-table.md): Returns the complete exchange-wide fee tier table, sorted ascending by level. - [Get fills](https://docs.arcus.xyz/api-reference/public/get-fills.md): Returns fill and trade history for the requested account address, newest-first. Optional `from`/`to` (epoch ms) bound the time window. No authentication header is required. - [Get funding payments](https://docs.arcus.xyz/api-reference/public/get-funding-payments.md): Returns funding payment history for the requested account address, newest-first. When `to` is omitted it defaults to now; when `from` is omitted it defaults to 30 days before `to`. An explicit `from` is honored as-is, so a wider range (e.g. a full year for tax) is returned in full subject to data re… - [Get L2 orderbook snapshot](https://docs.arcus.xyz/api-reference/public/get-l2-orderbook-snapshot.md): Returns the current L2 orderbook snapshot for a market, truncated to the requested number of levels per side. - [Get leverage for an account across all markets](https://docs.arcus.xyz/api-reference/public/get-leverage-for-an-account-across-all-markets.md): Returns the effective leverage for `(address, accountIndex)` across every market, sorted by ascending `marketId`. Each entry reflects the user's override (set via `POST /v1/setLeverage`) when one exists, otherwise the market default. - [Get live prices for all markets](https://docs.arcus.xyz/api-reference/public/get-live-prices-for-all-markets.md): Returns the latest oracle / mark price and per-market sequence number for every configured market, keyed by numeric `marketId` (as a string). - [Get market funding rates](https://docs.arcus.xyz/api-reference/public/get-market-funding-rates.md): Returns historical funding rates for a market, newest-first. No authentication header is required. - [Get markets](https://docs.arcus.xyz/api-reference/public/get-markets.md): Returns all markets with details, sorted by ascending `marketId`. Optionally filter by market name. - [Get OHLCV candles](https://docs.arcus.xyz/api-reference/public/get-ohlcv-candles.md): Returns OHLCV candlestick bars for a market and timeframe. Results include closed bars (gap-filled with O=H=L=C=prev_close, vol=0 for empty buckets) plus the current open bar. Bars are returned oldest-first; the last entry is the in-progress bar with `isFinal: false`. - [Get open orders](https://docs.arcus.xyz/api-reference/public/get-open-orders.md): Returns every open order for the requested account address. The endpoint is parameter-free beyond `address`: open-order counts are bounded by go-core's per-account 10k-clientId cap (see `TOO_MANY_CLIENT_IDS` rejection), so the full set always fits in one response without paging. No authentication he… - [Get order history](https://docs.arcus.xyz/api-reference/public/get-order-history.md): Returns the order history (open, filled, canceled, rejected) for the requested account address, newest-first by event time. Optional `from`/`to` (epoch ms) bound the time window for follow-on pagination. No authentication header is required. - [Get order status](https://docs.arcus.xyz/api-reference/public/get-order-status.md): Returns the status of a specific order by order ID. Requires `address` query parameter for the owning account because both ScyllaDB (`open_orders`) and ClickHouse (`orders_by_id_account`) partition by account_id, so the lookup needs the owning account. - [Get portfolio history](https://docs.arcus.xyz/api-reference/public/get-portfolio-history.md): Returns bundled account-equity and PnL time series for the requested address across preset ranges (24h, 7d, 30d, all-time) and per product (total/perp; spot when launched). - [Get positions](https://docs.arcus.xyz/api-reference/public/get-positions.md): Returns all open positions for the requested account address. No authentication header is required. - [Get recent public trades](https://docs.arcus.xyz/api-reference/public/get-recent-public-trades.md): Returns recent public trades for a market, newest-first. One row per maker/taker pairing — a market sweep that hit 3 makers produces 3 rows. Same shape as the `trades` WebSocket channel. No authentication header is required. - [Get referral commission rate schedule](https://docs.arcus.xyz/api-reference/public/get-referral-commission-rate-schedule.md): Returns the referral commission rate schedule used by go-attribution to compute affiliate payouts on each fill. - [Get the all-traders leaderboard](https://docs.arcus.xyz/api-reference/public/get-the-all-traders-leaderboard.md): Returns the top-N traders ranked by `sortBy` (`volume`, `pnl`, or `fees`; default `volume`) over the requested rolling window (`all`, `30d`, or `24h`; default `30d`). - [Health check](https://docs.arcus.xyz/api-reference/public/health-check.md) - [Service info](https://docs.arcus.xyz/api-reference/public/service-info.md): Returns service metadata and the list of available endpoints. Use `GET /health` for a liveness/readiness check. - [Rate limits](https://docs.arcus.xyz/api-reference/rate-limits.md): How requests are weighted and throttled across REST, WebSocket, and the trading path - [Check whether a referral code is available](https://docs.arcus.xyz/api-reference/referral/check-whether-a-referral-code-is-available.md): Returns `{ code, available }` for a single referral code string. - [Claim accrued commission](https://docs.arcus.xyz/api-reference/referral/claim-accrued-commission.md): Submits a claim for accrued affiliate commission. - [Create referral code](https://docs.arcus.xyz/api-reference/referral/create-referral-code.md): Creates a new referral code for the authenticated affiliate. Requires Ed25519 signature. The `address` in the body must match the API key's master Ethereum address. - [Get affiliate claim history](https://docs.arcus.xyz/api-reference/referral/get-affiliate-claim-history.md): Returns one page of an affiliate's claim history, newest-first by `timestampMs`. - [Get affiliate commission history](https://docs.arcus.xyz/api-reference/referral/get-affiliate-commission-history.md): Returns one page of an affiliate's per-fill commission events, ordered by `fillId DESC, tier ASC, referee ASC`. - [Get affiliate info](https://docs.arcus.xyz/api-reference/referral/get-affiliate-info.md): Returns affiliate information including code, tier, commission totals, and referee count. - [Get affiliate leaderboard](https://docs.arcus.xyz/api-reference/referral/get-affiliate-leaderboard.md): Returns the top-N affiliates by lifetime commission, all-time. The query is served by ClickHouse (`LIMIT 1 BY affiliate ORDER BY fill_id DESC` over `referral_commissions`) and cached 60s in the api-gateway. Cardinality is bounded by the affiliate count, not the commission count. - [Get my referrer](https://docs.arcus.xyz/api-reference/referral/get-my-referrer.md): Returns the referrer information for the given address, if any. - [Get referees](https://docs.arcus.xyz/api-reference/referral/get-referees.md): Returns the affiliate's T1/T2/T3 referee list, newest-first by each referee row's own `boundAt`. Optional `from`/`to` (epoch ms) bound the time window for follow-on pagination. Use `nextCursor` for exact pagination when multiple rows share the same `boundAt`. - [Look up a single claim](https://docs.arcus.xyz/api-reference/referral/look-up-a-single-claim.md): Returns a single claim row identified by `(address, id)`. Both parameters are required — claims are partitioned by affiliate in Scylla, so a global `id`-only lookup would require a secondary index we deliberately don't maintain (see `analysis/referrals-redesign-spec.md` § Scope). - [Register as referee](https://docs.arcus.xyz/api-reference/referral/register-as-referee.md): Binds the authenticated user to a referral code, registering them as a referee of the code's owner. When the registration volume gate is enabled, the referee's rolling 30-day volume must be strictly below `REGISTRATION_VOLUME_LIMIT_QUANTUMS` (default $1M quote quantums). - [Revoke referral code](https://docs.arcus.xyz/api-reference/referral/revoke-referral-code.md): Revokes the authenticated affiliate's referral code. Existing bindings remain but no new referees can register. - [Update kickback rate](https://docs.arcus.xyz/api-reference/referral/update-kickback-rate.md): Updates the kickback rate (BPS) for the authenticated affiliate's referral code. - [Order operations](https://docs.arcus.xyz/api-reference/trading/orderoperations.md): > **Endpoint:** `wss://api.testnet.arcus.xyz/v1/ws` — one socket multiplexes every channel and RPC request. Click **Connect**, then send the example subscribe message below to start receiving data. - [Delete a user preference](https://docs.arcus.xyz/api-reference/userpreferences/delete-a-user-preference.md): Removes a single preference key for the address bound to `X-API-Key`. Idempotent — a `key` that does not exist still returns `200`. The key lives in the query string so the resource has a single canonical URL. - [Get user preferences](https://docs.arcus.xyz/api-reference/userpreferences/get-user-preferences.md): Returns the full preference bag for `address`. - [Upsert user preferences](https://docs.arcus.xyz/api-reference/userpreferences/upsert-user-preferences.md): Upserts one or more preference keys for the address bound to `X-API-Key`. - [Get current server time](https://docs.arcus.xyz/api-reference/utility/get-current-server-time.md): Returns the current server wall-clock time as Unix nanoseconds. Rate-limited to 1 token per call. - [WebSocket](https://docs.arcus.xyz/api-reference/websocket.md): Real-time market data and order routing - [Changelog](https://docs.arcus.xyz/changelog.md): Product updates and release notes for Arcus - [Disclaimer and Terms](https://docs.arcus.xyz/concepts/disclaimer.md): Important information about the Arcus protocol, Stock Tokens, and the risks of trading. - [Architecture](https://docs.arcus.xyz/concepts/exchange-architecture.md): How the Arcus perpetuals exchange combines a high-performance off-chain matching engine with a permissioned appchain and an EVM rootchain to settle trades non-custodially - [Onboarding & deposits](https://docs.arcus.xyz/concepts/onboarding.md): What you need to start trading on Arcus, how deposits work through the Fun flow, and how funds settle as USDG - [Fees](https://docs.arcus.xyz/concepts/perpetuals/fees.md): How trading fees work on Arcus — the maker/taker fee-tier model and where to read live fee values - [Funding](https://docs.arcus.xyz/concepts/perpetuals/funding.md): How funding payments keep Arcus perps anchored to the underlying, how real-world-asset events are handled, and the off-hours funding and price-band regime - [Liquidations](https://docs.arcus.xyz/concepts/perpetuals/liquidations.md): A high-level look at when an Arcus perp position is liquidated, what happens to it, and how off-hours price bands reduce cascade risk - [Margin & leverage](https://docs.arcus.xyz/concepts/perpetuals/margin.md): How initial and maintenance margin work on Arcus perps, leverage limits, and the higher initial-margin regime when an underlying market is closed - [Oracle prices](https://docs.arcus.xyz/concepts/perpetuals/oracle-prices.md): How Arcus determines the reference price for each perp market, including external pricing for real-world assets and the off-hours mark price - [Order types](https://docs.arcus.xyz/concepts/perpetuals/order-types.md): Order types, time-in-force options, and take-profit / stop-loss on Arcus perps, at a conceptual level - [Perpetuals overview](https://docs.arcus.xyz/concepts/perpetuals/overview.md): What perpetual futures are on Arcus, the asset classes they cover, and how 24/7 trading works across crypto and real-world assets - [Real-world asset perps](https://docs.arcus.xyz/concepts/perpetuals/real-world-assets.md): How Arcus perps on equities, commodities, and indices give 24/7 leveraged exposure that tracks the total return of the underlying — including dividends, splits, and futures rolls - [Stock Tokens](https://docs.arcus.xyz/concepts/spot-overview.md): What Stock Tokens are on Arcus — self-custodied, on-chain tokenized equities traded spot with zero fees, 24/7, and how spot differs from perps - [Spot RFQ](https://docs.arcus.xyz/concepts/spot-rfq.md): How Arcus prices and settles spot trades through a request-for-quote flow with off-chain makers and atomic on-chain settlement - [Wrapped tokens](https://docs.arcus.xyz/concepts/wrapped-tokens.md): How Arcus Spot RFQ represents stock tokens as upgradeable wrapped tokens that are minted as a fallback when no native fill is available, held in your account until the maker settles them, and settled by makers - [Fund a testnet account](https://docs.arcus.xyz/guides/fund-testnet-account.md): Deposit collateral on-chain when the Testnet Deposit button is not enough — for API traders who need a larger or programmatic balance - [Trade over REST](https://docs.arcus.xyz/guides/rest-trading.md): Register a key and place your first order over REST — the simplest way to get started - [Trade over WebSocket](https://docs.arcus.xyz/guides/websocket-trading.md): Register a key and place your first order over WebSocket — the primary trading interface ## OpenAPI Specs - [openapi](https://docs.arcus.xyz/api-reference/openapi.yml) ## AsyncAPI Specs - [asyncapi](https://docs.arcus.xyz/api-reference/asyncapi.yaml)