> ## Documentation Index
> Fetch the complete documentation index at: https://docs.architect.exchange/llms.txt
> Use this file to discover all available pages before exploring further.

# Changelog

> Release notes for AX

## 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.
