# API changelog

Every backend release that changes the public REST or WebSocket API adds an entry here, generated from the OpenAPI and AsyncAPI specs. Changes that need action on your side also get a numbered [change notice](change-notices.md).

## v3.23063 — 2026-10-21

### REST API

**New endpoints**

- [`GET /api/v2/strategies/campaigns`](reference/campaigns.md) — List the team's PAPER-farm campaigns
- [`GET /api/v2/strategies/campaigns/byId`](reference/by-id.md) — Get one campaign
- [`POST /api/v2/strategies/campaigns/create`](reference/create.md) — Start a PAPER-farm campaign
- [`POST /api/v2/strategies/campaigns/kill`](reference/kill.md) — Hard-kill a campaign
- [`POST /api/v2/strategies/campaigns/pause`](reference/pause.md) — Pause a campaign
- [`POST /api/v2/strategies/campaigns/resume`](reference/resume.md) — Resume a paused or errored campaign
- [`POST /api/v2/strategies/campaigns/stop`](reference/stop.md) — Stop a campaign gracefully

**Objects**

- [`CreateStrategyCampaignRequest`](reference/schemas.md#createstrategycampaignrequest): new object. <small>Used by `POST /api/v2/strategies/campaigns/create`.</small>
- [`PnlDateRange`](reference/schemas.md#pnldaterange): new object. <small>Used by `GET /api/v2/portfolio/pnl`.</small>
- [`StrategyCampaign`](reference/schemas.md#strategycampaign): new object. <small>Used by `GET /api/v2/strategies/campaigns`, `GET /api/v2/strategies/campaigns/byId`, `POST /api/v2/strategies/campaigns/create`, `POST /api/v2/strategies/campaigns/kill`, `POST /api/v2/strategies/campaigns/pause`, `POST /api/v2/strategies/campaigns/resume` and 1 more.</small>
- [`StrategyCampaignActionRequest`](reference/schemas.md#strategycampaignactionrequest): new object. <small>Used by `POST /api/v2/strategies/campaigns/kill`, `POST /api/v2/strategies/campaigns/pause`, `POST /api/v2/strategies/campaigns/resume`, `POST /api/v2/strategies/campaigns/stop`.</small>
- [`StrategyCampaignCycle`](reference/schemas.md#strategycampaigncycle): new object. <small>Used by `GET /api/v2/strategies/campaigns`, `GET /api/v2/strategies/campaigns/byId`, `POST /api/v2/strategies/campaigns/create`, `POST /api/v2/strategies/campaigns/kill`, `POST /api/v2/strategies/campaigns/pause`, `POST /api/v2/strategies/campaigns/resume` and 1 more.</small>
- [`StrategyCampaignLeg`](reference/schemas.md#strategycampaignleg): new object. <small>Used by `GET /api/v2/strategies/campaigns`, `GET /api/v2/strategies/campaigns/byId`, `POST /api/v2/strategies/campaigns/create`, `POST /api/v2/strategies/campaigns/kill`, `POST /api/v2/strategies/campaigns/pause`, `POST /api/v2/strategies/campaigns/resume` and 1 more.</small>
- [`StrategyCampaignList`](reference/schemas.md#strategycampaignlist): new object. <small>Used by `GET /api/v2/strategies/campaigns`.</small>
- [`StrategyStopRules`](reference/schemas.md#strategystoprules): new object. <small>Used by `GET /api/v2/strategies/campaigns`, `GET /api/v2/strategies/campaigns/byId`, `POST /api/v2/strategies/campaigns/create`, `POST /api/v2/strategies/campaigns/kill`, `POST /api/v2/strategies/campaigns/pause`, `POST /api/v2/strategies/campaigns/resume` and 1 more.</small>
- [`ExchangeCode`](reference/schemas.md#exchangecode): new values `PAPERTRADE`. <small>Used by `GET /api/v2/data/instruments`.</small>
- [`OrderLegParams`](reference/schemas.md#orderlegparams): added `timer_iceberg_delay_max` (number), `timer_iceberg_delay_min` (number). <small>Used by `POST /api/v2/trading/order/createMany/multilegs`, `POST /api/v2/trading/order/create_multiLegs`.</small>
- [`OrderParams`](reference/schemas.md#orderparams): added `timer_iceberg_delay_max` (number), `timer_iceberg_delay_min` (number). <small>Used by `GET /api/v2/trading/order/byId`, `GET /api/v2/trading/order/cancelAll`, `GET /api/v2/trading/order/find`, `GET /api/v2/trading/order/open`, `POST /api/v2/trading/order/create`, `POST /api/v2/trading/order/createMany`.</small>
- [`PnlGroup`](reference/schemas.md#pnlgroup): added `reconstructed_range` (PnlDateRange); now required: `reconstructed_range`. <small>Used by `GET /api/v2/portfolio/pnl`.</small>
- [`PnlPoint`](reference/schemas.md#pnlpoint): added `reconstructed` (boolean); now required: `reconstructed`. <small>Used by `GET /api/v2/portfolio/pnl`.</small>
- [`PnlSummary`](reference/schemas.md#pnlsummary): added `reconstructed_range` (PnlDateRange); now required: `reconstructed_range`. <small>Used by `GET /api/v2/portfolio/pnl`.</small>
- [`TradingExchange`](reference/schemas.md#tradingexchange): new values `PAPERTRADE`. <small>Used by `GET /api/v2/trading/balance`, `GET /api/v2/trading/margin`, `GET /api/v2/trading/order/byId`, `GET /api/v2/trading/order/cancelAll`, `GET /api/v2/trading/order/find`, `GET /api/v2/trading/order/open` and 6 more.</small>

## v3.22928 — 2026-10-16

Covers releases v3.22713 to v3.22928. New [Portfolio](resources/portfolio.md) endpoints report daily PnL, realized PnL/funding/fees by symbol, and deposits, withdrawals and transfers. New order parameters: `timer_iceberg_delay` and `randomize_iceberg_timer` (Iceberg and Scale), `extend_duration` (TWAP, VWAP, IS), and `placement_infos.depth_mode` for placement in basis points from the midpoint (see [Request examples](resources/examples.md)). [Get account margin](reference/get-account-margin.md) adds the venue's own ratio as `raw_margin_ratio` / `raw_margin_field`. Two behavior changes that the specs do not show: since v3.22713, [Cancel all open orders](reference/cancel-all-open-orders.md) needs a key with trade permission and answers `403` to a read-only key, like the other endpoints that create or cancel orders; since v3.22864, a `429` carries a JSON body with `reason` and `retry_after_ms` plus a `Retry-After` header, and the WebSocket connection limit is set per account (see [Rate limits](resources/rate-limits.md)).

### REST API

**New endpoints**

- [`GET /api/v2/portfolio/flows`](reference/flows.md) — Returns deposits, withdrawals and internal transfers
- [`GET /api/v2/portfolio/pnl`](reference/pnl.md) — Returns the daily PnL of the team (NAV based)
- [`GET /api/v2/portfolio/pnl/ledger`](reference/ledger.md) — Returns realized PnL, funding and fees by day and symbol

**Objects**

- [`DepthMode`](reference/schemas.md#depthmode): new object. <small>Used by `GET /api/v2/trading/order/byId`, `GET /api/v2/trading/order/cancelAll`, `GET /api/v2/trading/order/find`, `GET /api/v2/trading/order/open`, `POST /api/v2/trading/order/create`, `POST /api/v2/trading/order/createMany` and 2 more.</small>
- [`FlowRecord`](reference/schemas.md#flowrecord): new object. <small>Used by `GET /api/v2/portfolio/flows`.</small>
- [`FlowTotals`](reference/schemas.md#flowtotals): new object. <small>Used by `GET /api/v2/portfolio/flows`.</small>
- [`LedgerCoverage`](reference/schemas.md#ledgercoverage): new object. <small>Used by `GET /api/v2/portfolio/pnl/ledger`.</small>
- [`LedgerRow`](reference/schemas.md#ledgerrow): new object. <small>Used by `GET /api/v2/portfolio/pnl/ledger`.</small>
- [`LedgerTotals`](reference/schemas.md#ledgertotals): new object. <small>Used by `GET /api/v2/portfolio/pnl/ledger`.</small>
- [`PnlGroup`](reference/schemas.md#pnlgroup): new object. <small>Used by `GET /api/v2/portfolio/pnl`.</small>
- [`PnlGroupKey`](reference/schemas.md#pnlgroupkey): new object. <small>Used by `GET /api/v2/portfolio/pnl`.</small>
- [`PnlPoint`](reference/schemas.md#pnlpoint): new object. <small>Used by `GET /api/v2/portfolio/pnl`.</small>
- [`PnlSummary`](reference/schemas.md#pnlsummary): new object. <small>Used by `GET /api/v2/portfolio/pnl`.</small>
- [`PortfolioAccountRef`](reference/schemas.md#portfolioaccountref): new object. <small>Used by `GET /api/v2/portfolio/pnl`.</small>
- [`PortfolioFlowsResponse`](reference/schemas.md#portfolioflowsresponse): new object. <small>Used by `GET /api/v2/portfolio/flows`.</small>
- [`PortfolioLedgerResponse`](reference/schemas.md#portfolioledgerresponse): new object. <small>Used by `GET /api/v2/portfolio/pnl/ledger`.</small>
- [`PortfolioPnlResponse`](reference/schemas.md#portfoliopnlresponse): new object. <small>Used by `GET /api/v2/portfolio/pnl`.</small>
- [`AccountMarginResponse`](reference/schemas.md#accountmarginresponse): added `raw_margin_field` (string), `raw_margin_ratio` (number/double). <small>Used by `GET /api/v2/trading/margin`.</small>
- [`OrderLegParams`](reference/schemas.md#orderlegparams): added `extend_duration` (boolean), `randomize_iceberg_timer` (boolean), `timer_iceberg_delay` (number). <small>Used by `POST /api/v2/trading/order/createMany/multilegs`, `POST /api/v2/trading/order/create_multiLegs`.</small>
- [`OrderParams`](reference/schemas.md#orderparams): added `extend_duration` (boolean), `randomize_iceberg_timer` (boolean), `timer_iceberg_delay` (number). <small>Used by `GET /api/v2/trading/order/byId`, `GET /api/v2/trading/order/cancelAll`, `GET /api/v2/trading/order/find`, `GET /api/v2/trading/order/open`, `POST /api/v2/trading/order/create`, `POST /api/v2/trading/order/createMany`.</small>
- [`PlacementInfo`](reference/schemas.md#placementinfo): added `depth_mode` (DepthMode). <small>Used by `GET /api/v2/trading/order/byId`, `GET /api/v2/trading/order/cancelAll`, `GET /api/v2/trading/order/find`, `GET /api/v2/trading/order/open`, `POST /api/v2/trading/order/create`, `POST /api/v2/trading/order/createMany` and 2 more.</small>

## v3.22639 — 2026-10-08

New [pre-trade analysis](reference/pre-trade-analysis.md) endpoint: estimated cost, market impact and a suggested duration for an order before you send it. POV orders can be placed through the API: `params.pov_ratio` (percent of market volume, 0.01 to 33) is required and `params.pov_risk` is optional; a POV order without a valid `pov_ratio` is rejected with `INVALID_PARAM` (see the [POV example](resources/examples.md#pov-percentage-of-volume)). [Get account margin](reference/get-account-margin.md) adds a cross-venue margin meter: `remaining_cushion`, `liq_distance`, `vol_cover` with `vol_sigma_window`, and `margin_estimated`.

### REST API

**New endpoints**

- [`GET /api/v2/data/preTradeAnalysis`](reference/pre-trade-analysis.md) — Pre-trade analysis of an order

**Objects**

- [`PovRisk`](reference/schemas.md#povrisk): new object. <small>Used by `GET /api/v2/trading/order/byId`, `GET /api/v2/trading/order/cancelAll`, `GET /api/v2/trading/order/find`, `GET /api/v2/trading/order/open`, `POST /api/v2/trading/order/create`, `POST /api/v2/trading/order/createMany`.</small>
- [`PreTradeAdvice`](reference/schemas.md#pretradeadvice): new object. <small>Used by `GET /api/v2/data/preTradeAnalysis`.</small>
- [`PreTradeAnalysis`](reference/schemas.md#pretradeanalysis): new object. <small>Used by `GET /api/v2/data/preTradeAnalysis`.</small>
- [`PreTradeCostEstimate`](reference/schemas.md#pretradecostestimate): new object. <small>Used by `GET /api/v2/data/preTradeAnalysis`.</small>
- [`PreTradeExecution`](reference/schemas.md#pretradeexecution): new object. <small>Used by `GET /api/v2/data/preTradeAnalysis`.</small>
- [`PreTradeImpact`](reference/schemas.md#pretradeimpact): new object. <small>Used by `GET /api/v2/data/preTradeAnalysis`.</small>
- [`PreTradeImpactModel`](reference/schemas.md#pretradeimpactmodel): new object. <small>Used by `GET /api/v2/data/preTradeAnalysis`.</small>
- [`PreTradeMarket`](reference/schemas.md#pretrademarket): new object. <small>Used by `GET /api/v2/data/preTradeAnalysis`.</small>
- [`PreTradePov`](reference/schemas.md#pretradepov): new object. <small>Used by `GET /api/v2/data/preTradeAnalysis`.</small>
- [`PreTradeThresholds`](reference/schemas.md#pretradethresholds): new object. <small>Used by `GET /api/v2/data/preTradeAnalysis`.</small>
- [`AccountMarginResponse`](reference/schemas.md#accountmarginresponse): added `liq_distance` (number/double), `margin_estimated` (boolean), `remaining_cushion` (number/double), `vol_cover` (number/double), `vol_sigma_window` (string). <small>Used by `GET /api/v2/trading/margin`.</small>
- [`OrderParams`](reference/schemas.md#orderparams): added `pov_ratio` (number), `pov_risk` (PovRisk). <small>Used by `GET /api/v2/trading/order/byId`, `GET /api/v2/trading/order/cancelAll`, `GET /api/v2/trading/order/find`, `GET /api/v2/trading/order/open`, `POST /api/v2/trading/order/create`, `POST /api/v2/trading/order/createMany`.</small>

## v3.22428 — 2026-09-29

First entry. Covers everything published since the documentation moved to this site on 2026-08-31: a new account margin endpoint, parent-order fields on order responses, fills on order endpoints, and documented subscribe/unsubscribe operations for every WebSocket topic. The `TradeDetails` renames and the `trade_id` type are documentation corrections: the API already returned these fields this way. See [CH-003](change-notices.md#ch-003-trade-fill-schema-corrected).

### REST API

**New endpoints**

- [`GET /api/v2/trading/margin`](reference/get-account-margin.md) — Returns the margin and equity summary of a futures account on an exchange

**Query parameters**

- [`GET /api/v2/trading/order/find`](reference/find-orders.md): added `include_fees`, `include_trades`
- [`GET /api/v2/trading/order/open`](reference/get-open-orders.md): added `include_fees`, `include_trades`

**Objects**

- [`AccountMarginResponse`](reference/schemas.md#accountmarginresponse): new object. <small>Used by `GET /api/v2/trading/margin`.</small>
- [`ExchangeCode`](reference/schemas.md#exchangecode): new object. <small>Used by `GET /api/v2/data/instruments`.</small>
- [`CreateParentOrderRequest`](reference/schemas.md#createparentorderrequest): added `limit_is_arrival` (boolean). <small>Used by `POST /api/v2/trading/order/create`, `POST /api/v2/trading/order/createMany`.</small>
- [`Instrument`](reference/schemas.md#instrument): `exchange` is now ExchangeCode (was Exchange_1). <small>Used by `GET /api/v2/data/instruments`.</small>
- [`OrderDetails`](reference/schemas.md#orderdetails): added `clip_size_type` (ClipSizeType), `clip_size_val` (number), `limit_price` (number), `params` (OrderParams), `progress` (number), `quantity` (number), `target_value` (number). <small>Used by `GET /api/v2/trading/order/byId`, `GET /api/v2/trading/order/cancelAll`, `GET /api/v2/trading/order/find`, `GET /api/v2/trading/order/open`.</small>
- [`OrderParams`](reference/schemas.md#orderparams): added `limit_bps` (string), `limit_is_arrival` (boolean); removed `post_only`. <small>Used by `GET /api/v2/trading/order/byId`, `GET /api/v2/trading/order/cancelAll`, `GET /api/v2/trading/order/find`, `GET /api/v2/trading/order/open`, `POST /api/v2/trading/order/create`, `POST /api/v2/trading/order/createMany`.</small>
- [`TradeDetails`](reference/schemas.md#tradedetails): added `child_order_id` (integer/int64), `parent_order_id` (integer/int64); renamed `clientOrderId` → `client_order_id`, `exchangeOrderId` → `exchange_order_id`, `execTime` → `exec_time`, `feeCurrency` → `fee_currency`, `makerOrTaker` → `maker_or_taker`; `direction`: new values `BUY`, `SELL`; `trade_id` is now string (was integer/int64). <small>Used by `GET /api/v2/trading/order/byId`, `GET /api/v2/trading/order/cancelAll`, `GET /api/v2/trading/order/find`, `GET /api/v2/trading/order/open`, `GET /api/v2/trading/userTrades`.</small>
- [`TradingExchange`](reference/schemas.md#tradingexchange): new values `KRAKEN`. <small>Used by `GET /api/v2/trading/balance`, `GET /api/v2/trading/margin`, `GET /api/v2/trading/order/byId`, `GET /api/v2/trading/order/cancelAll`, `GET /api/v2/trading/order/find`, `GET /api/v2/trading/order/open` and 6 more.</small>
- [`WouldInfo`](reference/schemas.md#wouldinfo): added `would_bps` (string). <small>Used by `GET /api/v2/trading/order/byId`, `GET /api/v2/trading/order/cancelAll`, `GET /api/v2/trading/order/find`, `GET /api/v2/trading/order/open`, `POST /api/v2/trading/order/create`, `POST /api/v2/trading/order/createMany` and 2 more.</small>
- `Exchange_1`: removed.

### WebSocket API

- New messages: `subscribeChildOrder`, `subscribeOhlcv`, `subscribeOpenInterest`, `subscribePositionRisk`, `subscribeTicker`, `unsubscribeChildOrder`, `unsubscribeOhlcv`, `unsubscribeOpenInterest`, `unsubscribePositionRisk`, `unsubscribeTicker`
- 15 subscribe/unsubscribe operations now documented
