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-slotsendpoint returns a full trading day’s funding settlements for a perpetual symbol. It takes a requiredsymboland an optionaldate(defaults to the current date in the symbol’s funding-schedule timezone). The response reports the fundingvariant(daily_close, a single settlement at the close, orintraday_twap, a fixed number of intraday slots each charging its share of the day’s TWAP premium), the scheduletimezone, the scheduledinterval_count, and an optional per-slotcap_bps. Each slot carries itsindex,funding_time, astatusofrealized/projected/skipped/pending, the mark and underlying TWAPs,premium_bpsandfunding_rate_bps(positive means longs pay shorts), acappedflag, and areasonon skipped slots. Two running totals —realized_sum_bps(realized so far) andprojected_eod_bps(realized plus the projection for remaining slots) — give the projected end-of-day funding.
v15.10.0 — 2026-07-06
GET /open-ordersnow supportslimit/offsetpagination and asort_tstimestamp sort direction (ascordesc, defaultdesc).limitdefaults to 100 andoffsetto 0; responses includetotal_countalongside the resolvedlimitandoffset.GET /funding-ratesnow supports cursor-based pagination vialimit,cursor, andsort_ts(asc/desc, defaultdesc) query parameters, returningnext_cursorandtotal_countfor paging through large result sets.
v15.8.0 — 2026-07-04
- Added
GET /underlying-pricesand deprecatedGET /index-prices. The new endpoint takes a requiredsymbolplus an optional time range (start_timestamp_ns/end_timestamp_ns), cursor pagination (cursor,limit— default 1000), andsort_ts(asc/desc, defaultdesc); it returns anunderlying_pricesarray of{ symbol, timestamp, price }entries withnext_cursor,limit, andtotal_countpage metadata.GET /index-pricesremains served as a deprecated alias that returns identical data under the legacyindex_priceskey — migrate by switching the path and readingunderlying_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 /ordersnow supportsorder_idandorder_idsfilters.order_idtakes a single ID;order_idstakes 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_idfield from fills, positions, transactions, funding transactions, and admin trades; useaccount_idinstead. Renamed the risk-snapshot response type toAccountRiskSnapshot.
v14.24.0 — 2026-06-16
- The GET /tickers endpoint now supports
limit,offset, andsymbolsort query parameters and returnstotal_countplus 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)subscribemessage now supports streaming only what you need. A newlevel: "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 optionaltradesandtickerfields (both defaulttrue) independently suppress trade (t = "t") or ticker (t = "s") delivery — set both tofalsefor 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 optionalaccount_idquery parameter to scope the stream to a single account; omitting it defaults to your own account. Anaccount_idyou are not authorized to read returns403, and a malformed value returns400.
v14.13.0 — 2026-06-03
GET /fills,GET /liquidations,GET /transactions, andGET /funding-transactionsnow require an explicit time range no wider than 7 days (bothstart_timestamp_nsandend_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 (bothstart_timestamp_nsandend_timestamp_ns); requests that omit the range or exceed 7 days return 400.
v14.11.0 — 2026-06-02
- New
GET /estimated-funding-rateendpoint 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
GetEstimatedFundingRaterequest (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_idfield is now included on everyFillDetailsevent and everyBalanceentry 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
ofield, matching the shape of other order events.
v14.5.0 — 2026-05-25
- The order-gateway WebSocket login response now includes a
codfield 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
OrderReplacedOrAmendedWebSocket event whosereplacement_orderreportedFILLEDwithfilled_quantity = 0when the new order matched immediately on cancel-replace. The replacement’s filled/remaining quantities now match its order state. GET /funding-transactionsnow supports cursor-based pagination viastart_timestamp_ns,end_timestamp_ns,sort_ts,limit, andcursorquery parameters; responses includenext_cursor,limit, andtotal_count. The endpoint also accepts an optionalsymbolfilter.
v14.1.0 — 2026-05-12
- Added request type
t="s"to/ws/ordersto get order status byoidorcid; matchesGET /order-statusREST equivalent. - Cancel requests sent before the exchange has acknowledged the original order now return error code
409 order not yet acknowledged by exchange; retry shortlyinstead of500 internal server error.
v14.0.1 — 2026-05-07
GET /order-statusnow accepts only query parametersoidandcid, matchingPOST /cancel-orderandPOST /replace-order. The previous parameter namesorder_id/client_order_idare no longer accepted and will result in HTTP400response 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.