Active symbols
Data
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 from symbol/symbol_type to underlying_symbol/underlying_symbol_type, 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 fields have been renamed in the response
symbol→underlying_symbolsymbol_type→underlying_symbol_type
2. Display name fields removed
What Changed: All translated display name fields have been removed from New response:
display_name(removed)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
Use the
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
Migration Action
If using barrier category filtering, handle filtering client-side after receiving the full symbol list, or use the
contract_type parameter as an alternative filter.6. Additional metadata fields removed
What Changed: Various metadata fields no longer available:
allow_forward_starting(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 "close_only": 0,
5 "display_order": 1,
6 "exchange_is_open": 1,
7 "is_trading_suspended": 0,
8 "market": "forex",
9 "pip": 0.0001,
10 "pip_size": 0.0001, // 🆕 New field
11 "subgroup": "major_pairs",
12 "submarket": "major_pairs",
13 "underlying_symbol": "frxEURUSD", // 🆕 Replaces symbol
14 "underlying_symbol_type": "forex" // 🆕 Replaces symbol_type
15 }
16 ],
17 "msg_type": "active_symbols"
18}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}