Broker API HubMenu

DXtrade Push AccountPortfoliosSubscriptionRequest

messageAccountPortfoliosSubscriptionRequestDXtrade Push APIWebSocketAccount

Subscribes to the portfolios of chosen accounts, or of all. A snapshot comes first, then the whole portfolio is sent again whenever an order is issued, changed or cancelled, a position changes, or a cash balance changes.

Risk warning: CFDs and spread bets are complex instruments and come with a high risk of losing money rapidly due to leverage. You can lose money on these products, and each provider publishes its own loss figure under FCA rules. You should consider whether you understand how they work and whether you can afford to take the high risk of losing your money. Automated and API trading can amplify losses through bugs, connectivity failures and runaway orders.

Independent and unofficialdemo.dx.tradechecked

This is a message of the DXtrade Push API, not an HTTP endpoint. It has no method and no path: it is sent as JSON or XML over an open WebSocket connection.

The specification says no differences are sent: each update is the full portfolio, and the account's version number shows which update is newer. Orders in a final state and closed positions appear once, in the first update after they complete. The specification says subscriptions with the request type ALL are rate limited for each user and subscription name, with a default of 1 a minute, and that passing the rate brings a Reject message with 429 Too Many Requests. The specification's own example sends accounts as a JSON list, while its Account Request table describes a string of codes separated by commas: the sample here follows the table.

The message

Name
AccountPortfoliosSubscriptionRequest
Direction
Request, sent by the client
Carried by
WebSocket. Sent on the WebSocket resource for business events, the one used for every subscription except market data. The specification writes the address with a placeholder for the host, which each broker or firm that offers DXtrade supplies. Two optional query string arguments are set when connecting: format, XML or JSON, and compression, which can only be gzip.

Fields

NameTypeDescription
typerequiredStringAlways AccountPortfoliosSubscriptionRequest.
requestIdrequiredStringAn id of your own for the request. The answer names it in inReplyTo. The specification says to keep ids unique within a session.
timestamprequiredTimestampWhen the message was sent, in UTC.
sessionrequiredStringThe token of the session the message belongs to. It comes from the token login of the DXtrade REST API.
payloadrequired or not: not statedAccount RequestThe accounts to subscribe to, with the fields below. The table gives no required mark for it.
payload.requestTyperequiredStringALL for every account, LIST for the accounts named.
payload.accountsStringThe account codes, separated by commas. Required where requestType is LIST.
payload.includeOffsetBooleantrue also processes offset accounts, where requestType is ALL.

What arrives

AccountPortfolios: The portfolios of the accounts subscribed to.

NameTypeDescription
typerequiredStringAlways AccountPortfolios.
inReplyTorequiredStringThe requestId of the AccountPortfoliosSubscriptionRequest message it answers.
timestamprequiredTimestampWhen the message was sent, in UTC.
sessionrequiredStringThe token of the session the message belongs to. It comes from the token login of the DXtrade REST API.
payload.portfoliosrequiredPortfolioA list of account portfolios.
payload.portfolios[].accountrequiredAccount codeThe code of the account.
payload.portfolios[].versionrequiredNumberThe version of the account, which rises with each change.
payload.portfolios[].balancesrequiredList of balance objectsCash balances by currency. Zero balances are left out.
payload.portfolios[].positionsrequiredList of position objectsThe positions on the account.
payload.portfolios[].ordersrequiredList of order objectsThe orders on the account.
payload.portfolios[].ownerUserThe user who owns the account. Absent for an account with no owner.

Sample

Written by this site from the fields recorded on this page. It has not been run against a terminal, a server or an account, and the values in it are placeholders. No credential is typed into it: where a field holds one, the placeholder says where it comes from. Nothing is entered on this site.

{
  "type": "AccountPortfoliosSubscriptionRequest",
  "requestId": "1",
  "timestamp": "2026-10-12T09:00:00.000Z",
  "session": "<the session token from the REST login, from your own environment>",
  "payload": {
    "requestType": "LIST",
    "accounts": "default:demo1,default:demo2"
  }
}