Release notes
Trade Server
26.10.54
15 Oct 2026What's new
- Order and position filters in Trade History (admin) — The admin Trade History report now accepts
orderIdsandpositionIdsfilters, returning the trades of the listed orders or positions. A position reversal is returned for both the position it closed and the position it opened. - Market-data delay in Get Symbol — Each group's market-data delay is now resolved per symbol, and the public Get Symbol endpoint returns the resulting delay for the requesting client's group in whole minutes (
dlyI), present only when a delay applies. - Transfer timestamp no longer required (admin) — The admin transfer request no longer requires the
tfield; requests that still send it are accepted and the value is ignored.
Bug fixes
- Minor bug fixes and improvements.
Misc
- Logging — Request trace information is now logged consistently for rejected requests across all request types, and the first
X-Forwarded-Foraddress recorded in the audit log may now include a port, which is ignored.
26.10.53
08 Oct 2026What's new
- Symbol and group export — The PostgreSQL export now supports two new entities, Symbol Events (
symbol_events) and Group Events (group_events). Each records every create, modify and delete of a symbol or group configuration, along with resync markers. Nested fields (symbol quote and trade sessions, group symbol profiles and commission profiles) are not exported in this version. - Statement type in statement files — The statement summary now includes the statement type (
st): Daily, Monthly or Yearly.
Bug fixes
- Minor bug fixes and improvements.
Misc
- Logging — TRACE logs now record why common requests are rejected, and they no longer report routine connection disconnects as errors.
26.10.52
01 Oct 2026What's new
- [Breaking Changes] Retired the Reopen swap mode — The
Reopenswap mode has been removed. The admin REST and WebSocket APIs now reject it, and the public API no longer returns it as a symbol's swap mode. Any symbol or symbol group profile still set toReopenis switched toDisabledduring the upgrade, so it stops being charged overnight swaps. Before this release reaches your deployment, move every symbol and symbol group profile that usesReopento a supported swap mode, and stop sendingReopenfrom admin integrations.
Bug fixes
- Liquidity Provider connectors now stay connected when a market-data snapshot contains an entry with a missing or unreadable price or size: only that entry is dropped, the rest of the book is still published.
Misc
- Documentation — The admin WebSocket API specification now lists
Disabledas a swap mode, no longer markseligibleForCurrencyConversionas a required Symbol field, and no longer describes the unsupportedreportsEmailandcompanyTemplatesFoldercompany fields. The public API specification now documents error code21(Duplicate symbol group profile mask).
26.9.51
25 Sep 2026What's new
- Tick export — The Trade Server can now export ticks to ClickHouse. A tick records the top of the order book of a symbol — best bid and best ask, each with its volume — and is written whenever a price publication changes either side, in price or in volume. The
tickentity, thetickstable and its retention are described in the export setup guide. - Configurable price throttling per symbol — A symbol's
throttlingsetting now accepts values from 0 to 1000 price updates per second, up from the previous range of 1 to 5. Setting it to 0 disables throttling entirely and publishes every update immediately. Values above 5 can substantially increase bandwidth use across symbols and client connections, so review system capacity before raising the rate. - Custom tags for clients (admin) — Clients now carry a free-form
tagsfield of up to 511 characters, accepted and returned by the admin API, streamed over the admin WebSocket, and included in the client export.
Bug fixes
- Order History now returns the complete set of records when sorted in descending order; previously a descending sort could truncate the response.
- A malformed entry in
endpoints.jsonorexport_config.jsonno longer terminates the server without a diagnostic. The offending entry is logged with its location and reason, and inexport_config.jsonthe remaining pipelines still start. - The ClickHouse
batch_timeout_mssetting now accepts its documented minimum of 1000, which was previously rejected.
Misc
- Duplicate symbol profile masks rejected (admin) — The group edit and batch group edit endpoints now validate that every symbol group profile mask within a group is unique. A single edit is answered with the new error code 21, "Duplicate symbol group profile mask"; a batch edit marks only the offending group as failed and processes the rest.
- Logging — Group add and update operations are now logged field by field, recording the previous and new value of each changed field.
- Documentation — The export setup guide now covers tick export, its ClickHouse schema and its retention. The
fromandtofilters of the order history reports are documented as filtering on the order's last-modification (close) time.
26.9.50
18 Sep 2026What's new
- Margin probe endpoint — Added a public endpoint that checks the margin requirement for a candidate order without placing it. It returns current equity, required margin with and without the order, and whether the order would be accepted; market, limit and stop orders are supported, with an optional position ID for netting against a specific position.
- ClickHouse export target — The export subsystem now writes to ClickHouse as well as PostgreSQL. A ClickHouse pipeline needs no cursor table, and every exported row carries three service columns the server fills itself:
sender_id,sequenceandbatch_time. - ClickHouse server failover — A ClickHouse pipeline now takes a list of servers instead of a single connection. The exporter moves to the next server immediately on a connection or transient insert error and backs off only after every configured server has failed in a row.
- Client events export — Client lifecycle changes are now exported as an ordered event log — upsert, delete and resync markers — so the full history of a client can be reconstructed from its creation through every modification to its removal.
- Export snapshot on demand (admin) — Added an admin endpoint that triggers a full snapshot resync for a chosen entity type: trading accounts, clients, groups or symbols. The call is asynchronous and returns
202 Acceptedonce the request is queued. - Market data delay configuration — Symbols now carry a market data delay interval in whole minutes and a delay mode (
RealtimeorDelayed), both readable and writable through the admin API and over the admin WebSocket. Group profiles can override the delay mode for the symbols they cover. This release adds the configuration only — the settings are stored and returned but do not yet affect quote distribution; the delayed feed itself follows in a later release. - Per-specification request body limits —
MaxRequestBodyLengthnow defaults per API specification — 16 MB for admin endpoints, 1 MB for user endpoints — with a 256 MB ceiling. The default request deadline (SocketTimeout) has been raised to 31 seconds so that large admin payloads remain deliverable. - New API error codes — The public and admin APIs can now return
Duplicate name,Not configuredandNot implementederror codes.
Misc
- Documentation — The export setup guide covers the ClickHouse pipeline, its table scripts and the client events schema. The endpoints configuration reference now documents the request deadline and request body size rules, including the effective cap logged at startup.
26.9.49
11 Sep 2026What's new
- Trading Account Events export — The PostgreSQL export pipeline now supports a
trading_accountentity that streams account lifecycle events — creation, every modification, and deletion — into atrading_account_eventstable. Each row carries the account's full current state with a version counter, so the complete history of an account can be reconstructed from the log. - Export buffer upgrades on start-up (admin) — On every start, before any pipeline comes up, the server brings leftover export buffer files up to the record layout of the running release, so buffered records survive an upgrade. A file that cannot be upgraded is named in the log and left byte for byte as it was.
- Export initialization permissions (admin) — Added four manager permissions covering the initialization of exports:
initializeSymbolExport,initializeTradingAccountExport,initializeClientExportandinitializeGroupExport.
Bug fixes
- The export queue no longer treats a corrupted segment as permanently backlogged, which had biased the pipeline toward writing later records to disk for the life of the process.
Misc
- The exporter now reports how many records were actually lost from a corrupted buffer file, instead of reporting the segment's full capacity.
- Logging — Export log messages now carry a consistent prefix identifying the database side, the local buffer files, or the start-up buffer upgrade, and a skipped-records line is emitted at error level. The export setup guide documents each message, its meaning, and the operator action it calls for.
26.9.48
04 Sep 2026Bug fixes
- Execution reports from liquidity connectors are now priced at the symbol's last known tick. Previously, a fill arriving after the quote session closed was dropped, leaving no trade, no position, and the margin still reserved.
- A manager can no longer revoke the access token of an account belonging to another managers' group, and revoking another account's token now requires the access-token management permission.
Misc
- Commission configured in points is now charged on every fill, including fills on symbols with no current price. Previously such fills were charged nothing.
- Logging — The server no longer logs an error when a symbol has no current price, which is an expected condition on thin liquidity and at session close.
- Logging — Export configuration errors now include the reason for the failure.
- Documentation — The data export setup guide has been separated from the internal design notes and expanded, the worked examples in the liquidity connector guide have been corrected, and the public REST and WebSocket API specifications have been tidied and made consistent.
26.8.47
21 Aug 2026What's new
- Symbol permission filtering on the Symbol channel (admin) — The admin WebSocket Symbol channel now filters broadcasts by the subscriber's permissions: a subscriber receives symbol add, update and delete events only for symbols supported by the group of the trading account it is subscribed as. Group and trading-account channels apply the same permission check, and a change to a permission set, group or trading account is picked up immediately.
Bug fixes
- A holiday whose symbol mask names a single symbol exactly now applies to that symbol. Holiday masks are matched against the symbol's full path, with the same wildcard, exclusion and first-match-wins rules used by symbol group profiles and group masks.
- Transfers with the
CreditBonustrade type are now accepted and adjust the account's credit.CreditBonusand stop-out credit adjustments are authorized by the credit-operations permission, in line with regular credit transfers. - Minor bug fixes and improvements.
Misc
- Position corrections are validated against the account (admin) — Creating an open position is now refused when the account already holds a position on the instrument and the pair keeps a single net position — always on an exchange instrument, and on any instrument in a group configured for netting. A non-zero swap is refused on an exchange instrument, at create and at modify alike, and invalid input in the average open price, swaps, commission, fee, stop loss or take profit is reported as bad input rather than as an internal error.
- Server-assigned liquidity connector identifiers (admin) — Adding a liquidity connector through the admin API now mints the connector identifier on the server and returns it in the response; an add that supplies a non-zero identifier, or an identifier already in use, is refused before the connector is constructed.
- End-of-day marker in the By Time order routing filter (admin) — The
By Timefilter now accepts24:00:00as an end-of-day marker for both the start and the end of the window, so a rule can cover the remainder of the day without losing the final second. Invalid times are now rejected when the routing configuration is loaded instead of being silently accepted. - Correcting the commission or fee recorded on an open position no longer moves the account's daily and monthly charge totals, so the statement no longer disagrees with the balance in the period of the correction.
- The
By Timeorder routing filter now treats its window consistently as half-open — the start time is inclusive and the end time is exclusive — and a window whose start equals its end matches nothing. - Logging — Admin requests that create, update or delete a permission set, singly or in a batch, are now trace-logged.
26.8.46
14 Aug 2026What's new
- Centroid FIX connector — Added the
CENTROID-FIX-QUOTESandCENTROID-FIX-TRADESliquidity connector types. Centroid sessions authenticate with a newUsernamesession parameter, sent in FIX tag 553 alongside the password, and trade sessions require anAccountsession parameter, which is sent in FIX tag 1 on every order. - Holidays WebSocket channel (admin) — Added a
holidayschannel to the admin WebSocket API that streams holiday additions, updates and deletions in real time, with an optional snapshot on subscribe. - Closed volume on trades — Trade records now carry
cq, the volume the trade closed against the position it acted on and the volume its profit was realized on. It is returned by Trade History and streamed on the trade channels of both the public and the admin API. Trades executed before this release reportcqas 0. Theppfield is now documented as the average open price the trade's profit was measured from. - Symbol exchange type is immutable (admin) — A symbol update that switches between OTC and exchange-traded margin calculation modes is now rejected. Within the same classification the margin calculation mode can still be changed freely.
Bug fixes
- The profit conversion rate on a trade record now matches the rate the trade's profit was converted at; the two could differ when a group's currency conversion was reconfigured between a position being opened and a later fill on it.
- An exchange symbol now keeps a single net position on accounts whose group is configured for hedging, since exchange trading is netting-only.
- The admin symbol listing now follows a symbol that is moved to a different path: the symbol is listed under its new path, and it disappears from a group whose symbol masks no longer match it.
- Realized P&L excludes commissions and fees — Realized P&L is now the price result of closed volume — profit plus swaps — on every account, regardless of the commission charge mode. Instant commissions and fees previously entered the realized figure while Daily and Monthly ones did not; they continue to move the balance and to accumulate in the commission and fee totals.
Misc
- A reversal trade now reports the average open price of the position it closed as the position price, instead of repeating the execution price.
- Admin position creation no longer debits commission and fee from the account balance; those charges are recorded when the original position closes.
- Admin WebSocket subscriptions now always answer with a snapshot message, empty where the subscriber has no matching entities, instead of sending no snapshot at all.
- Logging — Admin cash and asset transfer requests now record the originating account, the source and forwarded IP addresses, and the client application name and version. Rejected symbol add and update requests now log the reason for the rejection.
- Documentation — The liquidity connector guide now documents symbol mask evaluation order, how
ConnectorSymbolNameandMarketDepthare resolved against entry filters, and the 31-character limit on the substitutedAccountvalue.
26.8.45
07 Aug 2026Bug fixes
- A StopLimit order modification that supplies only one of the stop and limit prices is now rejected, instead of being accepted with the supplied price silently discarded.
- Minor bug fixes and improvements.
Misc
- Logging — Order and position requests on both the client and admin APIs are now logged with their trace information: originating account, socket and forwarded IP addresses, and the caller-supplied trace code, application name and version.
- Documentation — The public API specification now documents the X-Forwarded-For, X-YB-TRACE-CODE, X-YB-APP-NAME and X-YB-APP-VERSION request headers.
- Third-party dependencies have been updated to the latest versions.
26.7.44
31 Jul 2026What's new
- Listener port override via environment variable — The listening port of any transport endpoint can now be overridden at startup via environmental variable, without editing the configuration file. The override is resolved before any listener binds and is never written back to the file.
- Deeper market depth (admin) — A symbol's maximum number of price bands per side can now be set up to 64; the previous limit was 32.
Bug fixes
- An order-routing time-of-day filter whose window crosses midnight — start time after end time — now matches orders placed in that overnight window; previously such a rule never matched.
- The modification time on a completed order's history record now matches the value published in the order notification, and a successful modification of a working order — expiration, volume or price — now advances it.
- Minor bug fixes and improvements.
Misc
- Logging — Request trace information taken from the request headers — the forwarded client IP, trace code, and client application name and version — is now recorded for authorization requests, admin token issue and revoke, trading account and client configuration changes, and trade requests, on both the public and admin APIs. An automated rate-limiter IP ban is now logged with its duration.
- API specifications — The balances/collateral endpoints and WebSocket channels have been removed from the public and admin specifications; they were not implemented by the server.
26.7.43
24 Jul 2026What's new
- Larger page sizes for REST query endpoints — The maximum number of results per request has been raised across the admin API — up to 10,000 trading accounts, 1,000 clients, 1,000 permission sets, 1,000 symbols, and 250 groups — and the public Get Symbols endpoint now returns up to 1,000 symbols per request.
- Configurable FIX connector order-execution timeout — Added a configurable per-session order-execution timeout to the FIX connector (OrderExecutionTimeout, default 30 seconds). When a liquidity provider accepts an order but sends no execution report within the timeout, the connector now cancels the in-flight FOK/IOC order and frees the position, instead of leaving it locked as "being executed" until the provider replies or the session restarts.
Bug fixes
- The FIX market-data connector no longer drops a live subscription when a late rejection arrives for a request that was already superseded by re-subscribing the same symbol, which previously left that symbol without quotes.
- Automated per-IP rate-limit bans (HTTP 403) now expire after the configured reject interval, instead of persisting until the server is restarted — which previously could block REST access for every client sharing an egress IP behind a proxy or load balancer.
- Scheduled backups now run at every configured interval; certain start-offset and interval combinations previously caused some runs to be skipped silently, so backups ran less often than configured.
- Minor bug fixes and improvements.
Misc
- Logging — Admin configuration changes are now recorded in the audit log with the originating client IP — read from the X-Forwarded-For header for deployments behind a reverse proxy or load balancer — along with optional caller-supplied trace, application-name, and application-version headers for request correlation.
26.7.42
18 Jul 2026What's new
- Higher WebSocket inbound rate limit — The public and admin WebSocket APIs now accept up to 64 inbound messages per second per connection (up from 5). Bursts above the limit are throttled — the server briefly pauses reading and resumes shortly after — instead of disconnecting the connection, and each inbound message must now be sent as a single, unfragmented frame.
- Client/Admin API identifier in the health check — The health-check endpoint now reports whether a response came from the Client or Admin API, so a client can confirm it is connected to the intended API.
Bug fixes
- Minor bug fixes and improvements.
Misc
- The FIX connector now safely skips and logs a well-formed message of an unhandled type instead of dropping the connection.
26.7.41
10 Jul 2026What's new
- Modify GTD order expiration — The order modification endpoint now accepts a new expiration time for Good-Till-Date (GTD) orders, so you can reschedule when an order expires without having to cancel and re-submit it.
- Reversed position ID in trades — Trade messages now report the position closed by a reversal in a new field, alongside the newly opened position, so both sides of a position reversal are available on the public and admin trade streams.
- Server timezone for daily charts — Daily (1D) chart bars are now calculated using the server's configured timezone, so candle open and close times align to the trading day in that timezone instead of UTC.
- Own manager permissions (admin) — Added an admin endpoint that returns the requesting manager's own permission set, identified by API key. Unlike the existing manager lookup, it does not require the View Managers permission, so any enabled manager can always read their own permissions.
Bug fixes
- Minor bug fixes and improvements.
26.7.40
03 Jul 2026What's new
- Market session status streaming — The public WebSocket API now lets clients subscribe to a symbol's market session status. Subscribers receive an initial snapshot and, optionally, a live stream of updates, with the quote-session and trade-session status (Open or Closed) reported separately.
- Journal severity filter (admin) — The Journal admin API now supports filtering log lines by one or more severity levels (trace, debug, info, warning, error, critical), and each returned line reports its severity as a separate field.
Bug fixes
- The Journal admin log filter now accepts masks that were previously rejected as suspected XSS, so filter expressions using the boolean AND, OR, and NOT operators are no longer blocked.
Misc
- 3rd party dependencies have been updated to the latest versions.
26.6.39
25 Jun 2026What's new
- Industry tag on symbols — The public Get Symbol endpoint now returns an industry tag for each symbol: a free-form classification string for grouping instruments, for example into sector-based watchlists. The same field is available through the admin REST and WebSocket symbol APIs.
- Order routing by manager login ID (admin) — Added a new order-routing filter that matches orders by the initiating manager's login ID, so you can apply dedicated execution rules to orders that managers place on behalf of their clients. Only manager-initiated order placements are matched; system-generated activations such as stop-outs and triggered Stop and Limit orders are never matched.
Misc
- Logging — Loading or saving an empty data set, such as zero price-extrema snapshots on startup and shutdown, no longer produces spurious read and write error log entries.
- Documentation — Fixed the download links for the public and admin WebSocket (AsyncAPI) specifications.
26.6.38
19 Jun 2026What's new
- Symbol margin parameters in Get Symbol — The public Get Symbol endpoint now returns each symbol's full margin configuration: margin and profit calculation modes, per-lot initial and maintenance margin, and the complete matrix of initial and maintenance margin rates by order type and side.
- Server timezone in health check — The health-check endpoint now reports the server's configured IANA timezone (e.g.
Europe/Helsinki) alongside the current time and version. - Exchange-mode margin engine (WIP) — Continued the per-symbol margin build-out, adding a symbol-type-agnostic margin seam and Exchange exposure handling for order modifications, and began migrating OTC margin onto the same engine.
Bug fixes
- Trade History now reports the correct position price for partially filled orders.
- Minor bug fixes and improvements.
26.6.37
12 Jun 2026What's new
- Log journal query (admin) — Added an admin endpoint to search the server's log journal. Admins can retrieve paginated log lines within a time range and refine results with a pattern mask supporting AND, OR and NOT operators.
- Position margin in price updates — Live position updates now carry the margin currently required for the position, so consumers no longer need a separate lookup to track it.
- Exchange-mode margin engine (WIP) — Continued the per-symbol margin build-out for the Exchange trading mode, adding the trading-account risk model that sizes required margin to the worst case of current and potential exposure. Remains internal and not yet enabled for live trading.
Bug fixes
- Minor bug fixes and improvements
Misc
- Daily log files now rotate and timestamp in UTC, keeping log-journal time-range queries consistent across time zones.
26.6.36
05 Jun 2026What's new
- Exchange-mode margin engine (WIP) — Added per-symbol margin calculation for the Exchange trading mode: Observable and Acceptance margin across limit, stop, stop-limit and in-flight market orders, with position offsetting and what-if previews for order placement and modification.
Bug fixes
- Position stop-loss and take-profit no longer trigger on a stale price after the position has been modified.
- A position's margin now updates immediately after the position is increased or affected by a collateral transfer, instead of lagging behind.
- The entity update publisher no longer drops updates or leaves partial state when an entity is deleted.
- Minor bug fixes and improvements.
Misc
- Logging — Server log timestamps are now emitted in UTC ISO 8601 format, and console output is color-coded by log level.
- 3rd party dependencies have been updated to the latest versions.
26.5.35
29 May 2026What's new
- Margin call monitoring (admin) — Added real-time margin call tracking. Admins can subscribe to margin call status updates and snapshots over a new
margin_callWebSocket channel, and list the accounts currently in a margin call through a new paged admin REST endpoint. - Look up clients by external ID (admin) — Added an admin endpoint to retrieve clients by their external identifier, so integrations can resolve accounts without an internal client id.
- Per-symbol currency-conversion eligibility — Symbols now carry an
eligibleForCurrencyConversionflag, exposed in the admin API, that controls whether a symbol can act as a hop when building cross-currency conversion rates. Only eligible symbols with differing base and profit currencies contribute edges, so misconfigured non-FX instruments no longer distort conversions. Existing symbols are migrated automatically, with the flag enabled for standard Forex pairs.
Bug fixes
- Minor bug fixes and improvements.
Misc
- Higher Web API backpressure and timeout defaults — Increased the default WebSocket backpressure capacity and write-buffer size to improve resilience under heavy streaming load.
- 3rd party dependencies have been updated to the latest versions.
26.5.34
15 May 2026What's new
- Market and trigger prices in trade history (admin) — Admin trade history now records the market bid and ask price (with group markup) at the moment an order was triggered or placed, together with the stop or limit price of the triggering order where applicable, exposed as
mpb,mpa,spandlp. - Exchange trading mode for groups (admin) — Added a group-level Exchange trading mode (Margin or Cash) that controls how exchange-traded symbols are settled. The setting is optional in the admin API and defaults to Margin when omitted. The fields and settings are present in the API now, but enforcement and computation land in a later phase.
- Exchange margin calculation modes and price corridor for symbols (admin) — Symbols can now use the new Exchange Stocks and Exchange Bonds margin calculation modes and define a price-corridor threshold; the threshold is required for exchange instruments and ignored for OTC symbols. The fields and settings are present in the API now, but enforcement and computation land in a later phase.
- Assets and liabilities in account state — Trading account state now carries Assets (
as) and Liabilities (ls) for hybrid exchange accounts. The fields and settings are present in the API now, but enforcement and computation land in a later phase. Assets/Liabilities currently default to 0.0.
Bug fixes
- Minor bug fixes and improvements.
Misc
- HMAC signing guidance for empty request bodies — Clarified how requests with empty bodies must be signed and added curl examples to the API documentation.
- 3rd party dependencies have been updated to the latest versions.
26.5.33
08 May 2026Misc
- Diagnostic log when partial-fill volume is not a multiple of OrderSizeIncrement — Trade server now emits an error log when a liquidity provider reports a partial-fill cumulative quantity that does not align with the symbol's configured OrderSizeIncrement, recording the originator order id, symbol, the reported quantity and the adjusted value. Previously the alignment fix-up was applied silently, which could cause partial fills to be reported as full-order volume without any trace in the logs.
- Request id propagated through trading-engine logs — Order routing context metadata, including the originating client request id, is now threaded through the order-engine command pipeline and surfaced in the corresponding log lines for placement, modification, SL/TP modification, force-delete and stop/stop-loss/take-profit/stop-out trigger paths, so an individual client request can be followed end-to-end through all stages of order handling.
- PostgreSQL exporter and export persistence logging — The PostgreSQL exporter and the file-based export persistence layer now produce more detailed log output: table names are included in batch log messages, state-file save operations are confirmed in the log, and stream-level I/O failures are reported with their underlying error context, making export-pipeline issues easier to diagnose.
- 3rd party dependencies have been updated to the latest versions.
26.4.32
01 May 2026What's new
- Configurable timezone for symbol sessions and holidays — Symbol session schedules and holiday calendars are now evaluated in a configurable timezone instead of being fixed to UTC.
Bug fixes
- Floating P&L refreshed after group markup change — Floating P&L was computed against the group markup snapshot taken at position open and never updated, so admin changes to a group's BidGroupMarkup or AskGroupMarkup left clients seeing stale P&L until the position was closed. Markup-only profile changes now patch the close-side group markup on the affected group's positions, and the next idle tick recomputes P&L without touching margin.
- Charts endpoint duplicated data with descending sort order — Fixed an issue where the charts endpoint returned doubled candles when sortOrder was set to desc.
- Minor bug fixes and improvements.
Misc
- Account floating P&L recomputed on server startup — Trading account floating P&L is now rebuilt from open-position P&L and swaps at startup, so any residual bias from a previous delta-update bug no longer survives a restart. Equity is overwritten in step, and a warning is logged when the persisted and recomputed values diverge, giving operations visibility into any remaining drift.
26.4.31
24 Apr 2026What's new
- PostgreSQL export for orders, positions and daily statements — Added PostgreSQL writers and a daily-statement subscriber to the export pipeline, allowing orders, positions and daily statements to be streamed into PostgreSQL tables alongside the existing exporters.
Bug fixes
- Minor bug fixes and improvements.
Misc
- Protocol logging on HTTP and WebSocket transport — HTTP and WebSocket server sessions can now emit protocol-level logs through the standard transport configuration, making client integration issues easier to diagnose.
- 3rd party dependencies have been updated to the latest versions.
26.4.30
17 Apr 2026What's new
- Force-delete bad orders (admin) — Added a new admin endpoint with a dedicated permission for force-deleting orders that cannot be removed through the regular cancellation flow. Lets operations resolve stuck orders without direct database access.
- Bid and ask prices in trades history — The trades history report now includes bid and ask prices alongside the trade price, giving downstream consumers full quote context for each execution.
Bug fixes
- Rate limits honoured on the client API — Configured rate limits are now correctly enforced on the client API, and the accompanying documentation has been refreshed so integrators can see which limits apply to which endpoints.
- SL/TP restrictions from symbol config and group profile overrides — Stop Loss and Take Profit limits defined on a symbol, or overridden in a group profile, are now applied consistently when validating orders.
- Take Profit validation error code — Fixed an issue where Take Profit validation could return kInvalidSL instead of kInvalidTP, making the cause of rejection ambiguous for clients.
- Minor bug fixes and improvements
26.4.29
11 Apr 2026Bug fixes
- Minor bug fixes and improvements
26.4.28
03 Apr 2026Bug fixes
- Minor bug fixes and improvements
Misc
- Trading account soft-delete — Deleting a trading account now marks it as deleted rather than removing it outright, preventing the account ID from being reused by a new trading account. This preserves audit history, avoids ID collisions, and lays the groundwork for restoring deleted accounts in a future release.
26.3.27
27 Mar 2026What's new
- Close Bid/Ask (previous trading day last price) — Previous trading day closing prices (Bid Close and Ask Close) are now streamed via the WebSocket API, enabling clients to display daily change indicators. Values are persisted so they survive restarts.
Bug fixes
- Group markups on floating P/L — Group markups are now applied to floating (unrealised) profit/loss calculations, ensuring that unrealised P/L reflects the correct marked-up prices.
- SL/TP double-trigger prevention — Fixed a race condition where Stop Loss and Take Profit service orders could trigger twice. The execution lifecycle for service orders has been corrected.
- Group/client deletion with linked accounts — Fixed a bug that allowed deletion of groups or clients that still had linked trading accounts. The server now returns a "dependencies exist" error instead.
- Minor bug fixes and improvements
Misc
- API error codes documentation — Standardised error code enum (ApiErrorCode) added across all API specifications (REST and WebSocket). Updated password field requirements for trading account creation and group field clarifications.
- 3rd party dependencies have been updated to the latest versions
26.3.26
20 Mar 2026What's new
- SL/TP applied from order to position — Stop Loss and Take Profit levels set on an order are now automatically carried over to the resulting position.
- Access Tokens Admin API — The Access Tokens Admin API allows managers to create, view, and revoke API access tokens for trading accounts, with granular permissions (AdminViewAccessTokens / AdminManageAccessTokens) and support for both long-lived and short-lived tokens.
Misc
- Manager/client API separation — Non-manager accounts can no longer access manager API endpoints, and vice versa, enforcing proper authorization boundaries.
- Enhanced logging — Log messages now include position information where available, making it easier to trace activity.
- Holidays documentation
- Manager permissions documentation
26.3.25
13 Mar 2026Bug fixes
- Minor bug fixes and improvements
Misc
- Better margin logging — Enhanced log output when an operation fails due to insufficient margin, making it easier to diagnose rejected trades.
- Spike filter documentation
- Data export documentation (PostgreSQL exporter)
- 3rd party dependencies have been updated to the latest versions
26.3.24
06 Mar 2026What's new
- PostgreSQL trade exporter — Added a PostgreSQL exporter for the Trade entity, enabling database-level trade reporting.
- Bid/Ask High/Low tracking — Full implementation of Bid/Ask High/Low extrema: new calculation logic with an "extrema reset" flag on the market data publisher, plus persistent storage so values survive restarts.
Bug fixes
- Minor bug fixes and improvements
Misc
- Liquidity connectors documentation
26.2.23
27 Feb 2026Bug fixes
- Minor bug fixes and improvements
26.2.22
21 Feb 2026What's new
- Position conversion rates in API — Conversion rates used for position P&L calculations are now exposed via the API.
- Conversion rate REST endpoint — New REST API endpoint for querying conversion rates, supporting batch requests up to 100 elements with 12 decimal place precision.
Bug fixes
- Trade/order history time range fix — Corrected time range filtering in trade and order history requests.
- Symbol update in currency converter — Fixed the currency converter factory not properly updating when symbol configuration changes.
- Minor bug fixes and improvements
Misc
- TransfersSubscription API cleanup — Removed the unused "snapshot" option from the TransfersSubscription WebSocket API documentation.
26.2.21
13 Feb 2026What's new
- Conversion rate API spec — Published the API specification for the upcoming conversion rate REST endpoint.
- Access token admin permissions — New AdminViewAccessTokens and AdminManageAccessTokens permissions for granular access token management.
Bug fixes
- Stopout trade reason missing — Stopout trades now correctly carry the kStopout reason flag.
- API spec token field name — Corrected the account field name in the Issue Token API specification.
- Minor bug fixes and improvements
Misc
- Prevent admin/client role switching — Trading accounts can no longer have their status changed between Admin and Client, preventing accidental privilege changes.
26.2.20
09 Feb 2026What's new
- Intraday swaps — Full intraday swap support: scheduler for timing swap events plus the business logic for calculating and applying intraday swap charges.
- Signing Token — Token signing capability for secure API authentication.
- Configurable end-of-day timezone for statements — The end-of-day cutoff for statements is now configurable per timezone.
- SL/TP order ID linkage — Orders now expose their associated Stop Loss and Take Profit order IDs, enabling clients to track linked protective orders.
- Pending order volume modification — Volume on pending orders can now be modified after placement.
- Exchange field in public Symbol API — The Exchange property is now included in the public Symbol GET endpoint.
Bug fixes
- Minor bug fixes and improvements
Misc
- Admin WebSocket delete notifications — Added delete event notification specs for symbols, groups, clients, trading accounts, and managers.
- 3rd party dependencies have been updated to the latest versions
26.1.19
23 Jan 2026What's new
- Agent commissions — The system now calculates and deposits agent commissions automatically.
- Position amendment APIs — New Trade Engine APIs for amending open positions (e.g. modifying SL/TP on existing positions).
Bug fixes
- Minor bug fixes and improvements
- Performance optimisations
Misc
- Group settings documentation
26.1.18
17 Jan 2026What's new
- Netting account support — Full netting account support across order placement, order triggering, and connector execution, enabling hedging-free account modes.
- Intraday swaps API configuration — Extended Symbol, Group/SymbolGroupProfile, and Client API endpoints with intraday swap configuration.
- Position amendment API — New REST endpoints for updating and deleting positions (single and batch), with updated API specifications.
- Cross-conversion support — Currency converter now handles cross-conversion (e.g. EUR/GBP via EUR/USD and GBP/USD) when a direct rate is unavailable.
- Trading hours and swap rates in public API — Trading hours and swap fee rates are now exposed through the public Symbol API.
- Statement response filtering — Statement GET requests now support flags to include/exclude orders or positions from the response.
- Statement and email permissions — New granular permissions: ViewStatements, ViewEmailServices, and ConfigureEmailServices.
Bug fixes
- Prohibit account currency change on group update — Changing account currency via group update is now blocked.
- Prohibit OpenPositionType change on group update — Prevents changing netting/hedging mode on existing groups.
- Block cross-currency group transfers — Trading accounts can no longer be moved to a group with a different account currency.
- Admin Chart Bars symbol selector — Fixed the "BySymbolName" selector not working in the Admin Chart Bars API.
- Group ID not updated on account transfer — Open positions and working orders now correctly reflect the new group ID/name when an account is moved.
- Skip empty email statements — Statements are no longer sent when the trading account has no email address configured.
- Trading hours API regression — Fixed a regression in exposing trading hours via the public API.
- AsyncAPI CSS fix — Fixed missing CSS in AsyncAPI specification pages.
Misc
- Symbol configuration documentation
- Order routing documentation
- Email statements documentation
- Removed unused group fields — Removed "Report Email" and "Report Template Folder" from the Group entity.
25.12.17
30 Dec 2025What's new
- WebSocket Admin API for entity updates — Real-time WebSocket notifications for admin-level changes to symbols, groups, clients, permission sets, and trading accounts.
- Quantity in instrument units — Positions now expose quantity in instrument units (lots × lot size), in addition to lots.
Bug fixes
- Minor bug fixes and improvements