# IG Streaming TRADE:{account identifier}

Independent and unofficial. Not affiliated with or endorsed by any broker or platform named here. Educational only: nothing here is advice, and nothing here recommends a broker or a trade.

This is the markdown version of https://openbrokerapi.com/brokers/ig/messages/trade, written from the same records as that page.

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.

Trade notifications for one account in three fields: CONFIRMS for deal confirmations, OPU for open position updates and WOU for working order updates. The value of each is a JSON object.

- Message: `TRADE:{account identifier}`
- Interface: IG Streaming API
- Group: Account and trades
- Status: verified. Source: [labs.ig.com](https://labs.ig.com/streaming-api-reference.html), checked 2026-10-12.

This is a subscription of the IG Streaming API, not an HTTP endpoint. It has no method and no path: it travels over a Lightstreamer connection that stays open, which a Lightstreamer client library manages. It is in no OpenAPI file on this site and the request builder does not list it.

Note: IG's guide says DISTINCT mode, where every update yields a notification, is required for trade notifications. Its sample code parses the value of a field as JSON to read a confirmation.

## The message

- Name: `TRADE:{account identifier}`
- Direction: Subscription, opened by the client and then fed by the server
- Subscribed to as: `TRADE:{account identifier}`, in the mode `DISTINCT`
- Carried by: Lightstreamer. IG's Streaming API Guide (labs.ig.com/streaming-api-guide.html), opened the same day, says the server address is the Lightstreamer address returned by the REST /session call and should not be hard coded, that the user is the active account identifier, and that the password is built from the CST and X-SECURITY-TOKEN tokens of the REST session. It gives 40 as the default number of simultaneous subscriptions on one connection.

## Fields

- `CONFIRMS` (type not stated, optional): Deal confirmations for the account. A JSON object with the fields listed below under CONFIRMS.
- `CONFIRMS.direction` (type Constant, optional): BUY or SELL.
- `CONFIRMS.limitLevel` (type Number, optional): The limit level.
- `CONFIRMS.stopLevel` (type Number, optional): The stop level.
- `CONFIRMS.dealId` (type String, optional): The deal identifier.
- `CONFIRMS.expiry` (type String, optional): The expiry of the instrument.
- `CONFIRMS.size` (type Number, optional): The size of the trade.
- `CONFIRMS.epic` (type String, optional): The epic of the instrument.
- `CONFIRMS.level` (type Number, optional): The level of the trade.
- `CONFIRMS.guaranteedStop` (type Boolean, optional): True where a guaranteed stop is in place.
- `CONFIRMS.dealReference` (type String, optional): The deal reference.
- `CONFIRMS.dealStatus` (type Constant, optional): ACCEPTED or REJECTED.
- `CONFIRMS.affectedDeals` (type Array[Object], optional): The deals affected. Each entry holds a dealId and a status, one of AMENDED, DELETED, FULLY_CLOSED, OPENED and PARTIALLY_CLOSED.
- `CONFIRMS.status` (type Constant, optional): The status of the position or working order that results: AMENDED, CLOSED, DELETED, OPEN or PARTIALLY_CLOSED.
- `CONFIRMS.repeatDealingWindow` (type Object, optional): The repeat dealing windows. Its entries each hold a size and an expiry timestamp.
- `OPU` (type not stated, optional): Open position updates for the account. A JSON object with the fields listed below under OPU.
- `OPU.direction` (type Constant, optional): BUY or SELL.
- `OPU.limitLevel` (type Number, optional): The limit level.
- `OPU.stopLevel` (type Number, optional): The stop level.
- `OPU.dealId` (type String, optional): The deal identifier.
- `OPU.expiry` (type String, optional): The expiry of the instrument.
- `OPU.size` (type Number, optional): The size of the trade.
- `OPU.epic` (type String, optional): The epic of the instrument.
- `OPU.level` (type Number, optional): The level of the trade.
- `OPU.guaranteedStop` (type Boolean, optional): True where a guaranteed stop is in place.
- `OPU.dealReference` (type String, optional): The deal reference.
- `OPU.dealStatus` (type Constant, optional): ACCEPTED or REJECTED.
- `OPU.dealIdOrigin` (type String, optional): The deal identifier of the deal this one came from.
- `OPU.timestamp` (type Date, optional): The date and time of the event.
- `OPU.status` (type Constant, optional): The status of the position: OPEN for opened, UPDATED for updated, DELETED for closed.
- `OPU.channel` (type String, optional): The channel the user dealt through. The page says not to bind to this value, because it will become a constant.
- `OPU.currency` (type String, optional): The currency.
- `OPU.trailingStopDistance` (type Number, optional): The distance of the trailing stop.
- `OPU.trailingStep` (type Number, optional): The increment of the trailing stop.
- `WOU` (type not stated, optional): Working order updates for the account. A JSON object with the fields listed below under WOU.
- `WOU.direction` (type Constant, optional): BUY or SELL.
- `WOU.limitDistance` (type Number, optional): The limit distance.
- `WOU.stopDistance` (type Number, optional): The stop distance.
- `WOU.dealId` (type String, optional): The deal identifier.
- `WOU.expiry` (type String, optional): The expiry of the instrument.
- `WOU.size` (type Number, optional): The size of the trade.
- `WOU.epic` (type String, optional): The epic of the instrument.
- `WOU.level` (type Number, optional): The level of the trade.
- `WOU.guaranteedStop` (type Boolean, optional): True where a guaranteed stop is in place.
- `WOU.dealReference` (type String, optional): The deal reference.
- `WOU.dealStatus` (type Constant, optional): ACCEPTED or REJECTED.
- `WOU.timestamp` (type Date, optional): The date and time of the event.
- `WOU.status` (type Constant, optional): The status of the working order: OPEN for opened, UPDATED for updated, DELETED for closed.
- `WOU.currency` (type String, optional): The currency.
- `WOU.orderType` (type Constant, optional): LIMIT for a limit order, STOP for a stop order.
- `WOU.timeInForce` (type Constant, optional): GOOD_TILL_CANCELLED or GOOD_TILL_DATE.
- `WOU.goodTillDate` (type Date, optional): The date the order is good until.
- `WOU.channel` (type String, optional): The channel the user dealt through. The page says not to bind to this value, because it will become a constant.

## Limits that apply at IG

- Historical price data points a week: 10,000 data points per week
  - Scope: Per account, price history endpoints only
  - Status: verified. Source: [labs.ig.com](https://labs.ig.com/faq.html), checked 2026-10-12.
- Non trading requests a minute: 30 requests per minute
  - Scope: Per account, non trading calls only
  - Status: verified. Source: [labs.ig.com](https://labs.ig.com/faq.html), checked 2026-10-12.
- Non trading requests a minute: 60 requests per minute
  - Scope: Per application, that is per API key, non trading calls only
  - Status: verified. Source: [labs.ig.com](https://labs.ig.com/faq.html), checked 2026-10-12.
- Concurrent streaming subscriptions: 40 subscriptions
  - Scope: Per streaming connection
  - Status: verified. Source: [labs.ig.com](https://labs.ig.com/faq.html), checked 2026-10-12.
  - Corroborated by [labs.ig.com/streaming-api-guide.html](https://labs.ig.com/streaming-api-guide.html)
- Trading requests a minute: 100 requests per minute
  - Scope: Per account, trading calls only
  - Sources conflict: [ig.com](https://www.ig.com/en/trading-platforms/trading-apis/how-to-use-ig-api) states around 40 trade requests per minute, checked 2026-10-05. IG's own pages disagree. The conflict is labelled, not resolved. Pace against 40.
  - Status: conflicting. Source: [labs.ig.com](https://labs.ig.com/faq.html), checked 2026-10-12.

## Related IG Streaming messages: Account and trades

- [ACCOUNT:{account identifier}](https://openbrokerapi.com/brokers/ig/messages/account): Live figures for one account: profit and loss, margin, funds, equity and the cash available to trade, each sent again as it changes.

## More on IG

- [All IG messages](https://openbrokerapi.com/brokers/ig/messages): 5 documented here, grouped by what they do.
- [Subscribe to a stream: the call at each API](https://openbrokerapi.com/endpoints/streaming-subscribe): The same job at every broker and platform API recorded here, HTTP or not.
- [IG API quickstart](https://openbrokerapi.com/brokers/ig/quickstart)
- [All IG error codes](https://openbrokerapi.com/errors/ig)
- [IG API page](https://openbrokerapi.com/brokers/ig): The full record: access, authentication, limits and the source for each.

## Licence and how to cite

The records behind this page are all rights reserved. This file is the page itself, at its own address, in another format. It is not part of the CC BY 4.0 downloads listed at https://openbrokerapi.com/data. Quote from it with a link to the page.

Cite as: IG Streaming TRADE:{account identifier}. Broker API Hub, https://openbrokerapi.com/brokers/ig/messages/trade, newest check 2026-10-12.

Where you rely on a single figure, cite the source and the checked date printed beside it as well. Where this page and a broker's own documentation differ, the documentation wins.
