Active symbols
Retrieves a list of all currently active symbols (underlying markets upon which contracts are available for trading).
6 breaking changes - code updates required
Critical change:
Response field names changed: symbol → underlying_symbol, symbol_type → underlying_symbol_type, display_name → underlying_symbol_name, pip → pip_size, and many filtering and display fields have been removed.
Quick comparison
| Aspect | Legacy | New | Action required |
|---|---|---|---|
Endpoint ✅ Same | active_symbols | active_symbols | None |
Auth Required ✅ Same | No | No | None |
Request Complexity ⚠️ Changed | 9 parameters | 4 parameters | Remove obsolete parameters |
Breaking changes
1. Response field name changes
What changed: Core symbol identification and data fields have been renamed in the response
symbol→underlying_symbolsymbol_type→underlying_symbol_typedisplay_name→underlying_symbol_namepip→pip_size
2. Translated display name fields removed
What changed: Translated display name fields have been removed from the response (note: display_name was renamed to underlying_symbol_name, see section 1):
market_display_name(removed)subgroup_display_name(removed)submarket_display_name(removed)
3. Spot price data removed
What changed: Real-time spot price fields are no longer included:
spot(removed)spot_age(removed)spot_percentage_change(removed)spot_time(removed)
Alternative
ticks endpoint to fetch real-time spot prices.4. Landing company and product type filtering removed
What changed: Request parameters for filtering by landing company and product type removed:
landing_company(deprecated in Legacy, now removed)landing_company_short(removed)product_type(removed)loginid(removed)
5. Barrier category filtering removed
What changed: The barrier_category request parameter has been removed:
barrier_category(removed) - No longer possible to filter by: american, asian, euro_atm, euro_non_atm, non_financial, lookback, reset
Required Change
contract_type parameter as an alternative filter.6. Additional metadata fields removed
What changed: Various metadata fields no longer available:
allow_forward_starting(removed)close_only(removed)display_order(removed)exchange_name(removed)delay_amount(removed)intraday_interval_minutes(removed)quoted_currency_symbol(removed)
Request structure
Legacy Request Example
1{
2 "active_symbols": "brief",
3 "product_type": "basic", // ❌ Removed in New
4 "landing_company_short": "svg", // ❌ Removed in New
5 "contract_type": ["CALL", "PUT"]
6}New Request Example
1{
2 "active_symbols": "brief",
3 "contract_type": ["CALL", "PUT"]
4}Response structure
Legacy Response Example
1{
2 "active_symbols": [
3 {
4 "allow_forward_starting": 1, // ❌ Not in New
5 "close_only": 0,
6 "display_name": "EUR/USD", // ❌ Not in New
7 "display_order": 1,
8 "exchange_is_open": 1,
9 "is_trading_suspended": 0,
10 "market": "forex",
11 "market_display_name": "Forex", // ❌ Not in New
12 "pip": 0.0001,
13 "spot": 1.0850, // ❌ Not in New
14 "spot_age": "2", // ❌ Not in New
15 "subgroup": "major_pairs",
16 "submarket": "major_pairs",
17 "symbol": "frxEURUSD", // ❌ Changed
18 "symbol_type": "forex" // ❌ Changed
19 }
20 ],
21 "msg_type": "active_symbols"
22}New Response Example
1{
2 "active_symbols": [
3 {
4 "exchange_is_open": 1,
5 "is_trading_suspended": 0,
6 "market": "forex",
7 "pip_size": 0.0001,
8 "subgroup": "major_pairs",
9 "submarket": "major_pairs",
10 "trade_count": 0, // 🆕 New field
11 "underlying_symbol": "frxEURUSD", // 🆕 Replaces symbol
12 "underlying_symbol_name": "EUR/USD", // 🆕 Replaces display_name
13 "underlying_symbol_type": "forex" // 🆕 Replaces symbol_type
14 }
15 ],
16 "msg_type": "active_symbols"
17}Code examples
Legacy Implementation
1async function getActiveSymbols() {
2 const request = {
3 active_symbols: "brief",
4 product_type: "basic",
5 landing_company_short: "svg"
6 };
7
8 ws.send(JSON.stringify(request));
9
10 ws.onmessage = (message) => {
11 const data = JSON.parse(message.data);
12 if (data.msg_type === "active_symbols") {
13 data.active_symbols.forEach(symbol => {
14 console.log(`Symbol: ${symbol.symbol}`);
15 console.log(`Type: ${symbol.symbol_type}`);
16 console.log(`Display: ${symbol.display_name}`);
17 });
18 }
19 };
20}New Implementation
1async function getActiveSymbols() {
2 const request = {
3 active_symbols: "brief"
4 };
5
6 ws.send(JSON.stringify(request));
7
8 ws.onmessage = (message) => {
9 const data = JSON.parse(message.data);
10 if (data.msg_type === "active_symbols") {
11 data.active_symbols.forEach(symbol => {
12 console.log(`Symbol: ${symbol.underlying_symbol}`);
13 console.log(`Type: ${symbol.underlying_symbol_type}`);
14 // Display name no longer available
15 });
16 }
17 };
18}