Migration Guide

Common Recommendations

When updating your application to use a more recent protocol version, consider reviewing the protocol changes relevant to your application. This can be helpful if new scenarios are now supported — for example, if new fields have been introduced that provide additional information about the domain, or if a comment has been updated to describe behavior in more detail.

      Avoid deprecated fields: Stop using deprecated fields during migration. They may not work as expected (e.g., be not filled anymore, filled only for clients with older protocol versions). They will be removed in the future.

Potentially Breaking Changes

2.213

AccountSummaryStatus.deleted field introduced. When an account is removed from a subscription, a status with deleted=true is sent.

2.205

Field type for scaled[_*]_price changed from sint32 to sint64.

2.197

The volume and tick_volume fields in VolumeProfileItem may be omitted. Previously, these fields were always populated with 0 when empty.

2.70

Incremental updates are now sent instead of snapshots for last statement balances (LastStatementBalancesReport).

2.65

Fractional quantity support (market data): In market and historical data, scaled[_*]_volume fields are deprecated. New fields named [*_]volume of type cqg.Decimal are introduced.

2.55

Orders with unexpected date/duration combinations are now rejected instead of ignored. For example, an OrderRequest with good_thru_date and a duration other than Order::DURATION_GTD will be rejected.

2.51

(Ignore if upgrading to version 2.70 or later) Last statement balances are sent as full snapshots (LastStatementBalancesReport).

2.50

Duplicate subscription scopes are no longer allowed in TradeSubscription.subscription_scopes.

2.30

Client applications must specify MarketDataSubscription.request_id.

2.1

The protocol files have been reorganized - webapi_1.proto is now split across multiple files and renamed to webapi_2.proto.

1.153

Order.is_manual is deprecated. Use OrderRequest.is_automated or TransactionStatus.is_automated instead.

1.130

End-of-day market data subscriptions (MarketDataSubscription) are now available. Subscriptions that previously failed may now start returning end-of-day market data for clients using this or a newer protocol version.

1.99

Fractional quantity support: Contracts with fractional volumes are supported. Fields named [*_]qty are renamed to uint32[_*]_qty and marked as deprecated. New clients must use the new cqg.Decimal typed fields.

1.86

InformationReport.StatusCode REQUEST_LIMIT_VIOLATION = 105 is split on 3:

      REQUEST_RATE_LIMIT_VIOLATION = 105

      SUBSCRIPTION_LIMIT_VIOLATION = 106

      ACTIVE_REQUESTS_LIMIT_VIOLATION = 107

1.82

SessionSegment.session_segment_id changed to type int64.

1.80

OrderStatus now provides leg_parameters in OrderStatus.strategy_properties.strategy_trading_parameters.

1.77

In case of an invalid publication ID in a trade subscription (TradeSubscription), STATUS_CODE_INVALID_PUBLICATION_ID = 103 is sent instead of STATUS_CODE_FAILURE = 101.

1.51

The ModifyUserAttributes message now includes the is_checked field. Previously, this value was implicitly treated as true.

1.28

Clients must specify Logon.session_settings to restore or join a session. In RestoreOrJoinSession requests, clients must specify client_app_id. Upon successful session join, other connections will receive a ConcurrentConnectionJoin message.

1.11

The WebAPI server periodically sends Ping messages. Clients are expected to respond with Pong. If no response is received in time, a UserMessage will be sent regarding the unanswered Ping.