# Changelog

## 2026-04-24 (coming soon)

### WebSocket

- **add:** `ft` field on `@aggTrade` and `@user.orders` TRADE fills — fill type (`o` orderbook, `l` liquidation, `b` backstop liquidation, `a` ADL)
- **add:** `z`, `Z`, `rs` fields on `@aggTrade` and `@user.orders` TRADE fills — cumulative filled size, cumulative filled cost, remaining size

## 2026-03-26

### REST API

- **add:** `GET /fapi/v1/userLiquidations` — query liquidation history by address, with optional symbol and time range filters
- **add:** `GET /fapi/v1/userDeposits` — query deposit history by address, with time range filters
- **add:** `GET /fapi/v1/userWithdrawals` — query withdrawal history by address, with time range filters

## 2026-03-25

### Documentation

- **add:** [getting started](./getting-started.md) page — step-by-step guide linking connectivity, account setup, signing, order fields, REST, and WebSocket docs
- **add:** cross-links from WebSocket order methods to the corresponding transaction signing sections
- **add:** [tx status values](./ws/index.md#tx-status-values) table documenting `processed`, `published`, `submitted`, `finalized`, `dropped`, and `unknown`
- **fix:** WebSocket table of contents structure and indentation

## 2026-03-24

### REST API

- **add:** `GET /fapi/v1/openInterest` — open interest per market
- **add:** `GET /fapi/v1/ticker/24hr` — 24-hour rolling window price change statistics for all markets (price, volume, trade count)

## 2026-03-20

### REST API

- **add:** `txHashes` field to `GET /fapi/v1/allOrders` response — deduplicated list of tx hashes per order (place, fills, cancels)
- **add:** `address` and `txHash` fields to `GET /fapi/v1/userTrades` response
- **fix:** OpenAPI spec now uses `Decimal` types for prices and quantities instead of `f64`

### Documentation

- **add:** [order types and fields](./order-fields.md) page — reference for `NewOrderArgs`, order types, TP/SL, and sub-account index
- **note:** `@ticker` and broadcast `tickers` topics marked as coming soon
- **add:** user data stream note — use main account address, not delegate address

## 2026-03-18

### REST API

- **add:** `GET /fapi/v1/allOrders` — query order history (filled, cancelled, expired) by address, with optional symbol, time range, and orderId filters

## 2026-03-17

### REST API

- **add:** `GET /fapi/v1/userTrades` — query account fill history by address, with optional symbol and time range filters

## 2026-03-16

### SDK

- **add:** [Rust SDK](https://github.com/bulletxyz/bullet-rust-sdk) — type-safe client with REST, WebSocket, transaction signing, and keypair management

### Documentation

- **add:** connectivity page — environment hosts and endpoint URLs

## 2026-03-13

### Documentation

- **add:** transaction fields guide — documents all order fields, time-in-force options, and self-trade prevention modes
- **add:** amend order example in transaction signing guide
- **add:** comparison of amend vs cancel-replace order modification strategies
- **add:** account setup guide — sign in, deposit, get a signing key, start trading
- **add:** delegate accounts guide — generate a keypair, register via webapp, trade with scoped and revocable access

## 2026-03-12

### REST API

- **fix:** OpenAPI schema now uses correct unsigned integer types for IDs and quantities
- **fix:** removed internal metrics endpoint from public OpenAPI spec

## 2026-03-10

### Documentation

- **fix:** decimal encoding guide — simplified examples to encode `RustDecimal` directly, removing redundant `SurrogateDecimal` wrapper (no wire format change)

## 2026-03-05

### WebSocket

- **add:** consistency guarantees page — documents snapshot delivery, backend reconnection behavior, and message ordering
- **change:** idle timeout disconnect reason is now `idle_timeout` — server disconnects if no valid message is received within 60 seconds of connecting

## 2026-02-20

### Documentation

- **add:** CancelAllOrders and CancelMarketOrders transaction signing examples
- **add:** decimal encoding guide with C++, Python, and JavaScript examples
- **add:** guides landing page and sidebar section
- **fix:** removed internal terminology from public docs

## 2026-02-19

### Documentation

- **fix:** OrderResult field table now matches actual response schema (`results.tx_id`, `results.status`, `results.order_ids`, `results.client_order_ids`)
- **fix:** transaction signing guide uses correct camelCase field names (`chainInfo.chainId`, `chainHash`) matching REST API response
- **fix:** ListSubscriptions and Error examples now use correct 16-digit microsecond timestamps
- **add:** documented `order.amend` / `order.modify` WebSocket method
- **add:** documented `order.cancelAll` WebSocket method
- **fix:** topic tables now list all accepted aliases (`SYMBOL@liquidations`, `!liquidations`, `!ticker`, `!markPrice`, etc.)
- **fix:** `@liquidations` is now the primary topic name, `@forceOrder` as alias
- **note:** kline topics marked as coming soon
- **change:** WebSocket method names default to lowercase (`order.place`, `subscribe`), uppercase accepted as alias

## 2026-02-18

### Initial Release

- WebSocket API specification with Binance FAPI-compatible format
  - connection lifecycle (status, keepalive, disconnect reasons)
  - subscription streams (subscribe, unsubscribe, list_subscriptions)
  - request-response operations (order.place, order.cancel)
  - market data streams (depthUpdate, aggTrade, bookTicker, markPrice, forceOrder, orderTradeUpdate)
  - topic format reference and error codes
- Transaction signing guide with Rust reference implementation
  - borsh type definitions matching exchange schema
  - ed25519 signing flow
  - PlaceOrders and CancelOrders examples
  - REST and WebSocket submission
- REST API docs (Swagger/OpenAPI) served at `/docs/rest`
