Skip to main content

v15.20.0 — 2026-07-16

  • Creating an API key and editing its IP allowlist no longer prompt for your password.
  • Order-history requests that exceed the server’s query time limit now return a 400 asking you to narrow the time range or add a filter, instead of a generic 500 error.
  • Instruments now include an umbrella product name for grouping sibling contracts.
  • Funding-transactions history now accepts unbounded time ranges and pages via cursor.

v15.19.0 — 2026-07-14

v15.18.0 — 2026-07-13

v15.17.0 — 2026-07-13

  • Price charts now use consistent candle intervals for historical and live data.

v15.16.0 — 2026-07-10

  • Redesigned the funding chart with timeframe zoom and on-demand history.

v15.15.0 — 2026-07-09

  • Dated futures now use readable symbols such as XAU-2026-JUL.

v15.14.0 — 2026-07-08

  • Retired the legacy username/password login, signup, password-reset, and 2FA endpoints (and their SDK request/response types); interactive authentication is now handled by Clerk. Creating or updating API keys no longer requires a password/2FA step-up. API-key authentication is otherwise unchanged.

v15.11.0 — 2026-07-06

  • New GET /funding-slots endpoint returns a full trading day’s funding settlements for a perpetual symbol. It takes a required symbol and an optional date (defaults to the current date in the symbol’s funding-schedule timezone). The response reports the funding variant (daily_close, a single settlement at the close, or intraday_twap, a fixed number of intraday slots each charging its share of the day’s TWAP premium), the schedule timezone, the scheduled interval_count, and an optional per-slot cap_bps. Each slot carries its index, funding_time, a status of realized / projected / skipped / pending, the mark and underlying TWAPs, premium_bps and funding_rate_bps (positive means longs pay shorts), a capped flag, and a reason on skipped slots. Two running totals — realized_sum_bps (realized so far) and projected_eod_bps (realized plus the projection for remaining slots) — give the projected end-of-day funding.

v15.10.0 — 2026-07-06

  • GET /open-orders now supports limit/offset pagination and a sort_ts timestamp sort direction (asc or desc, default desc). limit defaults to 100 and offset to 0; responses include total_count alongside the resolved limit and offset.
  • GET /funding-rates now supports cursor-based pagination via limit, cursor, and sort_ts (asc/desc, default desc) query parameters, returning next_cursor and total_count for paging through large result sets.

v15.8.0 — 2026-07-04

  • Added GET /underlying-prices and deprecated GET /index-prices. The new endpoint takes a required symbol plus an optional time range (start_timestamp_ns / end_timestamp_ns), cursor pagination (cursor, limit — default 1000), and sort_ts (asc/desc, default desc); it returns an underlying_prices array of { symbol, timestamp, price } entries with next_cursor, limit, and total_count page metadata. GET /index-prices remains served as a deprecated alias that returns identical data under the legacy index_prices key — migrate by switching the path and reading underlying_prices.

v15.4.0 — 2026-06-28

  • API keys can now be scoped to specific accounts with granular per-key permissions (list / read / set-limits / reduce-or-close / trade), enforced as the intersection of the key’s permissions and your permissions on the requested account.

v15.2.0 — 2026-06-24

  • GET /orders now supports order_id and order_ids filters. order_id takes a single ID; order_ids takes a comma-separated list (e.g. order_ids=ORD-1,ORD-2). The two are combined into one deduplicated set of up to 100 IDs (more returns 400) and are ANDed with the time range. Supplying an ID filter also relaxes the otherwise-mandatory bounded time range, so you can fetch specific orders without one.
  • Order reject and cancel-reject responses now surface a human-readable reason in reject_message (e.g. “order price is above the exchange’s maximum price limit”, “post-only order would cross the book”, “too late to cancel”) instead of an opaque generic message.

v15.0.0 — 2026-06-19

  • Removed the redundant user_id field from fills, positions, transactions, funding transactions, and admin trades; use account_id instead. Renamed the risk-snapshot response type to AccountRiskSnapshot.

v14.24.0 — 2026-06-16

  • The GET /tickers endpoint now supports limit, offset, and symbol sort query parameters and returns total_count plus the resolved limit and offset.

v14.22.0 — 2026-06-10

  • Estimated funding rates are now available on marketdata ticker updates.

v14.21.0 — 2026-06-09

  • The market data WebSocket (/md/ws) subscribe message now supports streaming only what you need. A new level: "TRADES" subscribes to trade prints only (t = "t"), with no ticker or order book events. For book-level subscriptions (LEVEL_1/LEVEL_2/LEVEL_3), the optional trades and ticker fields (both default true) independently suppress trade (t = "t") or ticker (t = "s") delivery — set both to false for a book-only feed.

v14.18.0 — 2026-06-06

  • Cancel-order and replace-order requests now accept an optional account_id (aid) selecting which account’s client-order-id namespace the order reference resolves against; omit it to use your default account.

v14.17.0 — 2026-06-05

  • The order-entry websocket (/ws/orders) now accepts an optional account_id query parameter to scope the stream to a single account; omitting it defaults to your own account. An account_id you are not authorized to read returns 403, and a malformed value returns 400.

v14.13.0 — 2026-06-03

  • GET /fills, GET /liquidations, GET /transactions, and GET /funding-transactions now require an explicit time range no wider than 7 days (both start_timestamp_ns and end_timestamp_ns); requests that omit the range or exceed 7 days return 400.

v14.12.0 — 2026-06-03

  • GET /orders (order history) now requires an explicit time range no wider than 7 days (both start_timestamp_ns and end_timestamp_ns); requests that omit the range or exceed 7 days return 400.

v14.11.0 — 2026-06-02

  • New GET /estimated-funding-rate endpoint returns the live intraday estimated funding rate for a perpetual symbol.
  • The live estimated funding rate is also available over the WebSocket API via a GetEstimatedFundingRate request (t="ef") on /ws/orders.
  • Order gateway WebSocket sessions accept an optional client_heartbeat_timeout (seconds, up to 300). Send a heartbeat ({"t":"h"}) more often than this; if none arrives in the window, the exchange closes the session and cancels your orders (when cancel-on-disconnect is on), so you recover from a network drop in seconds rather than waiting on the TCP timeout. Only heartbeats reset the deadline.

v14.10.0 — 2026-06-01

  • Orders rejected for breaching the exchange price-limit bands now return a clear “order price is above/below the exchange’s maximum/minimum price limit” message.

v14.8.0 — 2026-05-27

  • The account_id field is now included on every FillDetails event and every Balance entry returned by the balances endpoints.
  • Cancel-reject events on the order gateway websocket now include the full order details (symbol, side, quantity, etc.) under the o field, matching the shape of other order events.

v14.5.0 — 2026-05-25

  • The order-gateway WebSocket login response now includes a cod field indicating whether cancel-on-disconnect is active for the session.

v14.4.0 — 2026-05-20

  • Available balances are now returned as an aggregate USD value.
  • Latencies between matching engine timestamps and time of sending to the client are significantly improved.
  • Fixed an order-gateway race that could send an OrderReplacedOrAmended WebSocket event whose replacement_order reported FILLED with filled_quantity = 0 when the new order matched immediately on cancel-replace. The replacement’s filled/remaining quantities now match its order state.
  • GET /funding-transactions now supports cursor-based pagination via start_timestamp_ns, end_timestamp_ns, sort_ts, limit, and cursor query parameters; responses include next_cursor, limit, and total_count. The endpoint also accepts an optional symbol filter.

v14.1.0 — 2026-05-12

  • Added request type t="s" to /ws/orders to get order status by oid or cid; matches GET /order-status REST equivalent.
  • Cancel requests sent before the exchange has acknowledged the original order now return error code 409 order not yet acknowledged by exchange; retry shortly instead of 500 internal server error.

v14.0.1 — 2026-05-07

  • GET /order-status now accepts only query parameters oid and cid, matching POST /cancel-order and POST /replace-order. The previous parameter names order_id / client_order_id are no longer accepted and will result in HTTP 400 response code.

v13.53.0 — 2026-05-05

  • You can now cancel, replace, and query order status using your client order ID.
  • Order placement and replacement now return actionable HTTP status codes (400/404/429/503/504) with human-readable error messages when the exchange rejects an order, instead of an opaque 500.
  • Order rejections from the exchange now surface the actual reject reason instead of a generic 500 error.
  • Cancel/replace requests with an invalid order id now return 400 with a clear message instead of 500.
  • Fixed rare case where rejected orders could remain in Pending state until the next gateway restart.

v13.48.0 — 2026-04-23

  • Order requests now accept a self-trade prevention behavior flag: cancel-resting, cancel-incoming, or cancel-both; defaults to cancel-incoming, which matches the previous behavior.
  • Order status responses now include reject_reason and reject_message if applicable.

v13.47.0 — 2026-04-21

  • Throttled marketdata WebSocket ticker events { "t": "s", ... } to at most 1/s.