2.12.0 Test Environment Current

v.2.12.0 - Test Environment

2026-09-15 - Planned deployment to Live 2026-09-01 - Test Environment

2026-09-15 - Planned deployment to Live

2026-09-01 - Test Environment


Breaking Changes

Traditional Assets - Order Status Enum

The status field and status query filter on the traditional order reads now use TraditionalAssetOrderStatusV2Enum, which removes four statuses the platform never emits. The change stays on the existing endpoints - there is no new URI version; partners already reading these orders continue on the same paths.

  • Endpoint: GET /traditional/orders, GET /traditional/orders/{orderId}, and the /v2 traditional order reads
  • Change: four values removed from the order-status enum in the response and the status query filter - UPDATED, RECONCILIATION_CORRECTION, CANCELLATION_REJECTED, CANCELLATION_ACCEPTED
  • Required Partner Action: remove those four values from any client-side enum validation or switch/case over the order status before the Live deployment date. No path change is required - the endpoints and URI versions are unchanged. These statuses were never emitted, so no live response payload changes.

Added

Tokenized Assets - eWP Cost Disclosure

The eWP ex-ante (assetType: eWP, symbol TVDY) now returns a full MiFID II cost disclosure - itemised annual holding costs, an aggregate total, and the cumulative cost over the assumed holding period - alongside the immutable snapshot that is retained and rendered as the disclosure PDF.

  • Documentation Location: API REFERENCE - Trading - Tokenized Assets
  • Endpoint: POST /wawex/ex-ante
  • Added field: costs.holdingCosts[] - itemised annual holding costs in disclosure order (ONGOING_PRODUCT_COST then PERFORMANCE_FEE); returned on an eWP BUY only, omitted on an eWP SELL and on every tracker/ETF response
  • Added field: costs.holdingPeriod - cumulative cost over the assumed holding period; eWP only
  • Added field: WawexOrderCostInfo.aggregate - aggregate total cost (product costs plus transaction fees); eWP only
  • New enum: WawexHoldingCostTypeEnum - ONGOING_PRODUCT_COST, PERFORMANCE_FEE (MiFID II requires the two disclosed separately)
  • Note: for eWP the productCosts.ter slot carries the aggregate annual product cost - the sum of every holdingCosts[] entry - not the TER alone; for tracker/ETF assets ter remains 0
  • Note: on an eWP SELL, productCosts, total and timeline are always present with every value explicitly 0; a sale discloses no holding cost

Appropriateness Test - eWP Asset Type

The eWP asset class is now a first-class option in the appropriateness test and trading-profile asset types, so partners can drive an appropriateness check for TVDY the same way they do for security tokens.

  • Documentation Location: API REFERENCE - Entities
  • New enum value: AppropriatenessTestAssetTypeEnum - EWP
  • New enum value: TradingProfileAssetTypeEnum - EWP

Traditional Asset Order Notification - New Error Codes

The traditional-asset order notification webhook can now report four additional failure reasons, so partners can distinguish these rejection causes without inspecting the free-text message.

  • Documentation Location: API REFERENCE - Webhooks
  • New enum value: TraditionalAssetOrderNotificationErrorCodeEnum - POSITION_BLOCKED_BY_OPEN_ORDER, NO_FRACTIONAL_POSITION, SELL_ALREADY_IN_PROGRESS, PRICE_DATA_UNAVAILABLE

Changed

Traditional Assets - Sell-All Split Into Two Orders

POST /traditional/orders/sell-all (introduced in v.2.11.0, not yet Live and not yet integrated by any partner) now settles a position as two disjoint orders instead of one, so the whole-share leg trades on the exchange in the customer's own name and the sub-one-share remainder is disposed separately. This finalises the sell-all contract before it reaches production.

  • Documentation Location: API REFERENCE - Trading - Traditional Assets
  • Endpoint: POST /traditional/orders/sell-all
  • Changed: response is now SellAllResult (was CreateOrderResult) and carries two ids - wholeShareOrderId and fractionOrderId; the two quantities are disjoint and sum to the position
  • Behavior change: the whole-share leg is an ordinary order - it appears on the /v1 order reads and the TRADITIONAL_ASSET_ORDER_NOTIFICATION webhook as well as /v2, and is charged the ordinary exchange sell fee; the fraction leg is not charged again, so the sale pays one fee but issues two trade invoices (the legs fill at two different prices)
  • Behavior change: cancellation is asymmetric - DELETE on the whole-share leg responds 202 (cancelling it leaves a non-zero position), while DELETE on the fraction leg responds 409
  • Behavior change: if the whole-share leg fails terminally, the savings plans deactivated by the sell-all are reactivated
  • Note: a leg with nothing to sell still resolves - an exactly-whole position rejects the fraction leg, a sub-one-share position rejects the whole-share leg; PATCH remains 501 for all traditional orders

Tokenized Assets - eWP Ex-Ante Now Addresses a Recipient

An eWP ex-ante is a legally retained cost disclosure rather than a throwaway quote, so it must resolve the customer it is addressed to. eWP ex-ante is not yet integrated by any partner, so these fields become part of its finalised design rather than a breaking change.

  • Documentation Location: API REFERENCE - Trading - Tokenized Assets
  • Endpoint: POST /wawex/ex-ante
  • Added field: walletCustomerProductId - required for eWP symbols, rejected with 400 when absent; ignored for tracker/ETF symbols
  • Added field: cashCustomerProductId - required for eWP symbols, rejected with 400 when absent; ignored for tracker/ETF symbols
  • Changed: exchangeCode is no longer a required field on the execution response - it is returned as TVM for tracker/ETF instruments and omitted for eWP, which does not trade on an exchange

Traditional Assets - Richer Partial Executions

The partial-execution detail returned on the traditional order reads is expanded.

  • Documentation Location: API REFERENCE - Trading - Traditional Assets
  • Endpoint: GET /traditional/orders, GET /traditional/orders/{orderId}
  • Added field: PartialExecutionV2 adds taxData[], feeAmount and feeDescription to each partial execution

Users - Corrected Query Filters

Three defects in the GET /users query parameters are fixed, two of which affected the running API.

  • Documentation Location: API REFERENCE - Users
  • Endpoint: GET /users
  • Behavior change: the lastName filter now works - the parameter was misspelled lasttName, so a partner sending lastName silently matched nothing
  • Behavior change: the email and globalId filters are unswapped - previously ?email= filtered by globalId and ?globalId= filtered by email