# Changelog

Changes to the Arrow Trading API, the SDKs and these docs, newest first. Dates are when a change was published in the docs.

<span class="cl-tag cl-breaking">Breaking</span> needs a change in your code &nbsp;
<span class="cl-tag cl-new">New</span> new capability &nbsp;
<span class="cl-tag cl-changed">Changed</span> different behaviour or limits &nbsp;
<span class="cl-tag cl-fixed">Fixed</span> the docs were wrong &nbsp;
<span class="cl-tag cl-docs">Docs</span> documentation only

## October 2026

### 12 October

- <span class="cl-tag cl-fixed">Fixed</span> Error responses are documented as the API returns them: `"status": "failure"` with a numeric `errorCode` equal to the HTTP status. [Response structure](rest-api/response-structure.md), [Error codes](rest-api/error-codes.md)
- <span class="cl-tag cl-fixed">Fixed</span> The [Symbols](rest-api/symbols.md) field reference now matches the instrument CSV: all 25 columns, a table mapping CSV segments to API exchange codes, and a note that `NSECO` and `NSECD` are data only.
- <span class="cl-tag cl-fixed">Fixed</span> Instrument tokens in the Python SDK examples were labelled with the wrong symbols (`3045` is SBIN, `2885` is RELIANCE). [WebSocket streaming](python-sdk/websocket-streaming.md)
- <span class="cl-tag cl-fixed">Fixed</span> `triggerPrice` is listed in the place and modify order parameters. [Orders](rest-api/orders.md)
- <span class="cl-tag cl-docs">Docs</span> `llms-full.txt` follows the site's reading order, and `llms.txt` lists the WebSocket streams in their own section.

## September 2026

### 29 September

- <span class="cl-tag cl-new">New</span> Interactive [checksum generator](rest-api/authentication.md#checksum-generator) and [HFT packet decoder](rest-api/hft-stream.md#packet-decoder). Both run entirely in your browser.
- <span class="cl-tag cl-docs">Docs</span> Redesigned homepage and doc pages, with light and dark themes. Code tabs now switch language together across a page.

### 23 September

- <span class="cl-tag cl-changed">Changed</span> Python SDK: `connect()` is asynchronous, so subscribe to the data and HFT streams from the `on_connect` callback, not on the line after connecting. [WebSocket streaming](python-sdk/websocket-streaming.md)
- <span class="cl-tag cl-docs">Docs</span> Every page can be copied or viewed as Markdown, for use with AI coding tools.

### 16 September

- <span class="cl-tag cl-docs">Docs</span> CAS packet fields are now listed with their exact wire types (for example, prices are `uint64`). [HFT stream](rest-api/hft-stream.md#cas-packet-cas-mode-168-bytes)

## August 2026

### 31 August

- <span class="cl-tag cl-new">New</span> Official [Go SDK](go-sdk/getting-started.md) documentation for `github.com/arrow-trade/go-arrow`, current release v1.8.0.
- <span class="cl-tag cl-breaking">Breaking</span> Refresh tokens are not supported. When an access token expires, log in again. The Go SDK no longer has `GetRefreshToken` or `Config.RefreshToken`. [Authentication](rest-api/authentication.md)

### 27 August

- <span class="cl-tag cl-docs">Docs</span> The order-updates WebSocket is documented as push-only: no subscription is needed, fills arrive as `ORDER_UPDATE` messages with `reportType: "Fill"`, and position changes are not sent on this stream. [Order updates](rest-api/order-data.md)

### 21 August

- <span class="cl-tag cl-new">New</span> HFT stream: after 3:20 PM IST, index symbols carry the indicative equilibrium price (IEP) in the `ltp` field of their `ltpc` and `full` packets. Index symbols cannot be subscribed in `cas` mode.

### 19 August

- <span class="cl-tag cl-new">New</span> `cas` mode on the HFT stream: 168-byte closing-auction packets with four price levels, imbalance and indicative price. [HFT stream](rest-api/hft-stream.md#cas-packet-cas-mode-168-bytes)
- <span class="cl-tag cl-changed">Changed</span> The HFT limit of 1,024 active symbols now applies per trading account across all HFT connections, not per connection. A single request can still include up to 512 symbols.

### 12 August

- <span class="cl-tag cl-new">New</span> Data Stream: from 3:15 PM IST every mode carries 16 extra bytes of closing-auction data (`imbalance_qty`, `indicative_close`, `ref_price`), so packets grow from 13/17/93/249 to 29/33/109/265 bytes. [Market data](rest-api/market-data.md)

### 7 August

- <span class="cl-tag cl-fixed">Fixed</span> The redirect `checksum` is SHA-256 of `checksumID:appID:request-token`. The docs previously gave a different formula. [Authentication](rest-api/authentication.md)

## July 2026

### 27 July

- <span class="cl-tag cl-new">New</span> MCX futures and options (`MCXFO`) for orders, margin, quotes and streaming.

### 8 July

- <span class="cl-tag cl-breaking">Breaking</span> zstd compression became mandatory on the HFT stream. Connect with `zstd=1` and decompress every inbound message before parsing; current `pyarrow-client` releases do this for you. [HFT stream](rest-api/hft-stream.md#inbound-compression-zstd)

### 1 July

- <span class="cl-tag cl-changed">Changed</span> HFT subscription limits: up to 1,024 symbols (previously 500) and up to 512 symbols per request (previously 4,096).
- <span class="cl-tag cl-changed">Changed</span> The zstd deadline moved from 1 July to 8 July 2026.
- <span class="cl-tag cl-fixed">Fixed</span> Modify order is `PATCH /order/regular/{orderID}`. The docs previously showed `POST`. [Orders](rest-api/orders.md)

## June 2026

### 25 June

- <span class="cl-tag cl-docs">Docs</span> Futures volume on the HFT stream (built from tick-by-tick data) is often lower than on the Data Stream (built from broadcast data), which can include spread-order-book activity.

### 22 June

- <span class="cl-tag cl-new">New</span> zstd compression on the HFT stream with `zstd=1`, announced as mandatory from 1 July 2026.

### 4 June

- <span class="cl-tag cl-fixed">Fixed</span> The Data Stream `full` packet is 249 bytes, with 8 reserved bytes before the market depth. The docs previously said 241. [Market data](rest-api/market-data.md)

## May 2026

### 18 May

- <span class="cl-tag cl-changed">Changed</span> Order `remarks` are limited to 16 characters.

### 14 May

- <span class="cl-tag cl-new">New</span> [Instrument quotes](rest-api/symbol-quotes.md): REST snapshots in `ltp`, `ohlcv` and `full` modes.

### 8 May

- <span class="cl-tag cl-breaking">Breaking</span> Plain market (`MKT`) orders are disabled by default on the API. Set `mpp` to send a limit order at the upper limit or DPR boundary for market-style execution. [Orders](rest-api/orders.md)

### 6 May

- <span class="cl-tag cl-new">New</span> [Utility endpoints](rest-api/utility.md): holidays, index list, option chain symbols, option chain and Greeks.

## April 2026

### 13 April

- <span class="cl-tag cl-new">New</span> Python SDK: HFT stream support through `HFTDataStream`.

### 11 April

- <span class="cl-tag cl-breaking">Breaking</span> HFT `full` packet grew from 192 to 196 bytes: open interest became a `uint64` at offset 172, moving the server timestamp to offset 180. [HFT stream](rest-api/hft-stream.md#full-packet-full-mode-196-bytes)

### 4 April

- <span class="cl-tag cl-breaking">Breaking</span> The Python SDK is imported as `pyarrow_client`, not `pyarrow`, to avoid clashing with Apache Arrow's `pyarrow` package. Install it with `pip install pyarrow-client`.

## March 2026

### 13 March

- <span class="cl-tag cl-new">New</span> [Python SDK](python-sdk/getting-started.md) documentation.

## January 2026

### 5 January

- <span class="cl-tag cl-new">New</span> [HFT-grade market data stream](rest-api/hft-stream.md) with a binary protocol and configurable tick intervals.
