Skip to main content

Chapter 10 – Delayed data

If you want market prices in real time, then in most cases you'll have to pay access fees to the exchange.

However, nearly all exchanges allow you to retrieve recent prices – delayed prices – free of charge via the Workspace desktop application.

It depends on the individual exchange how long the delay is:

  • In some cases, just a few minutes.
  • In others, it might be the closing price at the last trading session.

Important: While delayed data is available free of charge through the Workspace desktop application, accessing it programmatically via the Data Library may still require an access fee depending on the exchange and the type of delayed RIC. Always check your entitlements with your LSEG representative before using delayed RICs in your code.

For a guide to all delayed data, check the WORLD/DELAY page which gives details of the delays for all exchanges (exchange suffix, delay time, etc.).

WORLD/DELAY1

The page lets you navigate through Next and Previous page menus to go to each page detail.

WORLD/DELAY2

Delayed equity and indices full quotes

If you have access to the equity service, but you have not subscribed to a particular exchange, you can still view a delayed full quote on an instrument on that exchange.

To do this, put a forward slash / in front of the RIC code in this /RIC format.

Example:

  • /LSEG.L instead of LSEG.L (London Stock Exchange Quote RIC).
  • /9984.T instead of 9984.T (SoftBank Quote RIC).

/9984.T

The Data Library for Python get_data method supports these delayed RICs too.

Important: While delayed data is available free of charge through the Workspace desktop application, accessing it programmatically via the Data Library may still require an access fee depending on the exchange and the type of delayed RIC. Always check your entitlements with your LSEG representative before using delayed RICs in your code.

The first step is importing the library.

import lseg.data as ld
import pandas as pd

Before we move on, I am expecting that you have open and log in to the LSEG Workspace Desktop application in the same machine that run this Jupyter Notebook.

Next, open the session.

ld.open_session()

Next, use the get_data method and input your interested delayed RICs (/ prefix + RIC_Code).

# Get BID and ASK fields for CHF= (Swiss Franc spot rate) and MSFT.O (Microsoft on NASDAQ)
df = ld.get_data(
universe=['/LSEG.L', '/9984.T'],
fields=['BID', 'ASK','TR.CommonName']
)
df
InstrumentCompany Common NameBIDASK
0/LSEG.LLondon Stock Exchange Group PLC80009200
1/9984.TSoftBank Group Corp38463847

The Data Library get_history method does not support delayed RICs that start with / (for example, /LSEG.L).

To retrieve delayed historical data, use one of these options:

  • Content layer: historical_pricing
  • Delivery layer: endpoint_request with the /data/historical-pricing/ endpoint and qos=delayed

In this notebook, we will use the Delivery layer approach.

For more details, see:

# Use the Delivery Layer's endpoint_request module to call the REST API directly
from lseg.data.delivery import endpoint_request

# The RIC (Instrument Code) for the instrument we want historical data for
RIC = 'LSEG.L'

# Define the API request:
# - url: the Historical Pricing interday-summaries endpoint with a {universe} placeholder
# - method: HTTP GET
# - path_parameters: substitutes {universe} in the URL with the RIC
# - query_parameters:
# qos='delayed' → request delayed (free-tier) data instead of real-time
# interval='P1M' → aggregate data into monthly bars (ISO 8601 duration)
# count=30 → return up to 30 data points
request_definition = endpoint_request.Definition(
url = '/data/historical-pricing/v1/views/interday-summaries/{universe}',
method = endpoint_request.RequestMethod.GET,
path_parameters = {'universe': RIC},
query_parameters = {'qos':'delayed','interval':'P1M','count':30}
)

# Execute the request and store the raw API response
response = request_definition.get_data()
# try printing the raw response to understand its structure and contents
print(response.data.raw)

    [{'universe': {'ric': 'LSEG.L'}, 'interval': 'P1M', 'summaryTimestampLabel': 'endPeriod', 'adjustments': ['exchangeCorrection', 'manualCorrection', 'CCH', 'CRE', 'RTS', 'RPO'], 'defaultPricingField': 'OFF_CLOSE', 'headers': [{'name': 'DATE', 'type': 'string'}, {'name': 'ELG_NUMMOV', 'type': 'number', 'decimalChar': '.'}, {'name': 'IND_AUCVOL', 'type': 'number', 'decimalChar': '.'}, {'name': 'INT_AUC', 'type': 'number', 'decimalChar': '.'}, {'name': 'NAVALUE', 'type': 'number', 'decimalChar': '.'}, {'name': 'TRDPRC_1', 'type': 'number', 'decimalChar': '.'}, {'name': 'MKT_OPEN', 'type': 'number', 'decimalChar': '.'}, {'name': 'VWAP', 'type': 'number', 'decimalChar': '.'}, {'name': 'ORDBK_VWAP', 'type': 'number', 'decimalChar': '.'}, {'name': 'EX_VOL_UNS', 'type': 'number', 'decimalChar': '.'}, {'name': 'IND_AUC', 'type': 'number', 'decimalChar': '.'}, {'name': 'ELG_ACVOL', 'type': 'number', 'decimalChar': '.'}, {'name': 'OPEN_PRC', 'type': 'number', 'decimalChar': '.'}, {'name': 'CLS_AUCVOL', 'type': 'number', 'decimalChar': '.'}, {'name': 'MKT_HIGH', 'type': 'number', 'decimalChar': '.'}, {'name': 'LOW_1', 'type': 'number', 'decimalChar': '.'}, {'name': 'ALL_C_MOVE', 'type': 'number', 'decimalChar': '.'}, {'name': 'ACVOL_UNS', 'type': 'number', 'decimalChar': '.'}, {'name': 'OB_NUMMOV', 'type': 'number', 'decimalChar': '.'}, {'name': 'ORDBK_TRD', 'type': 'number', 'decimalChar': '.'}, {'name': 'PERATIO', 'type': 'number', 'decimalChar': '.'}, {'name': 'TRNOVR_UNS', 'type': 'number', 'decimalChar': '.'}, {'name': 'MID_PRICE', 'type': 'number', 'decimalChar': '.'}, {'name': 'TURN_ORDB', 'type': 'number', 'decimalChar': '.'}, {'name': 'NUM_MOVES', 'type': 'number', 'decimalChar': '.'}, {'name': 'HIGH_1', 'type': 'number', 'decimalChar': '.'}, {'name': 'ASK', 'type': 'number', 'decimalChar': '.'}, {'name': 'OPN_AUC', 'type': 'number', 'decimalChar': '.'}, {'name': 'BID', 'type': 'number', 'decimalChar': '.'}, {'name': 'OFFBK_VOL', 'type': 'number', 'decimalChar': '.'}, {'name': 'INT_AUCVOL', 'type': 'number', 'decimalChar': '.'}, {'name': 'OPN_AUCVOL', 'type': 'number', 'decimalChar': '.'}, {'name': 'MKT_LOW', 'type': 'number', 'decimalChar': '.'}, {'name': 'ORDBK_VOL', 'type': 'number', 'decimalChar': '.'}, {'name': 'TRD_STATUS', 'type': 'number', 'decimalChar': '.'}, {'name': 'CLS_AUC', 'type': 'number', 'decimalChar': '.'}, {'name': 'OFF_CLOSE', 'type': 'number', 'decimalChar': '.'}, {'name': 'VWAP_OPEN', 'type': 'number', 'decimalChar': '.'}, {'name': 'VWAP_HIGH', 'type': 'number', 'decimalChar': '.'}, {'name': 'VWAP_LOW', 'type': 'number', 'decimalChar': '.'}, {'name': 'MID_OPEN', 'type': 'number', 'decimalChar': '.'}, {'name': 'MID_HIGH', 'type': 'number', 'decimalChar': '.'}, {'name': 'MID_LOW', 'type': 'number', 'decimalChar': '.'}, {'name': 'OPEN_BID', 'type': 'number', 'decimalChar': '.'}, {'name': 'BID_HIGH_1', 'type': 'number', 'decimalChar': '.'}, {'name': 'BID_LOW_1', 'type': 'number', 'decimalChar': '.'}, {'name': 'OPEN_ASK', 'type': 'number', 'decimalChar': '.'}, {'name': 'ASK_HIGH_1', 'type': 'number', 'decimalChar': '.'}, {'name': 'ASK_LOW_1', 'type': 'number', 'decimalChar': '.'}], 'data': [['2026-04-30', 26203, 1390966, None, None, 8918, 8940, 8927.4, 8920.45, 3457042, 8876, 3081877, 8940, 1390966, 9034, 8724, 10038, 3457042, 25572, 8876, 37.4302, 30715108907.06871, 8882, 26170401196, 30416, 9034, 8888, 8922, 8876, 509953, None, 50842, 8724, 2947089, 1, 8876, 8876, 8843, 8927.4, 8843, 8824, 8921, 8824, 8822, 8920, 8822, 8826, 8922, 8826], ['2026-03-31', 256773, 12106315, 8610, None, 8830, 8776, 8829, 8831.374, 57627751, 8864, 29869148, 8776, 12106315, 8935, 8220, 13050, 56190655, 252603, 8864, 36.0958, 484241517101.7658, 8865, 244855218192, 280022, 8900, 8866, 8706, 8864, 27781835, 218533, 271007, 8218, 28407771, 1, 8864, 8864, 8786, 8829, 8320, 8777, 8865, 8248, 8776, 8864, 8246, 8778, 8866, 8250], ['2026-02-28', 295401, 14516234, 7864, None, 8986, 8102, 8790, 8835.337, 46701026, 8860, 35804129, 8102, 14516234, 8990, 6684, 17093, 46270200, 286078, 8860, 35.6678, 357059210694.77875, 8859, 256834946530, 757969, 8986, 8860, 8568, 8858, 13392071, 118947, 523833, 6684, 33275848, 1, 8860, 8860, 8209, 8790, 7080, 8235, 8859, 7172, 8234, 8858, 7170, 8236, 8860, 7174], ['2026-01-31', 148795, 7782812, 9228, None, 8146, 9008, 8139, 8138.177, 31438299, 8122, 18411899, 9008, 7782812, 9240, 8050, 15109, 30150576, 144853, 8122, 43.4629, 263883035252.04266, 8125, 151572700077, 419528, 9240, 8128, 8100, 8122, 12540477, 145024, 183355, 8042, 17352007, 1, 8122, 8122, 8867.4, 9146, 8139, 8805, 9185, 8117, 8804, 9184, 8116, 8806, 9186, 8118], ['2025-12-31', 120776, 8610938, 8828, None, 8952, 8888, 8954.4, 8954.53, 22818869, 8952, 17509609, 8888, 8610938, 9000, 8286, 1443, 22678062, 118107, 8952, 47.9816, 197113918247.69357, 8950, 144793166067, 136775, 9000, 8952, 8940, 8948, 5799949, 249669, 197690, 8286, 16634095, 1, 8952, 8952, 8821, 8954.4, 8354, 8793, 8963, 8368, 8792, 8962, 8366, 8794, 8964, 8370], ['2025-11-30', 152854, 11939125, 8594, None, 8922, 9514, 8907.3, 8907.54, 36406321, 8908, 23373029, 9514, 11939125, 9818, 8322, 4850, 35623529, 149479, 8908, 47.4462, 319349848622.64905, 8909, 199915565161, 173321, 9818, 8910, 8836, 8908, 13201073, 100342, 289544, 8322, 22419048, 1, 8908, 8908, 9547, 9697, 8393, 9511, 9733, 8333, 9510, 9732, 8330, 9512, 9734, 8336], ['2025-10-31', 215127, 10859029, 8602, None, 9482, 8750, 9480, 9480.865, 38896852, 9486, 26568417, 8750, 10859029, 10002.4, 8474, 6643, 38781151, 209799, 9486, 50.6907, 347599025450.18085, 9487, 224482258498, 246968, 10000, 9488, 9456, 9486, 13781202, 41226, 378253, 8472, 24942851, 1, 9486, 9486, 8708, 9826, 8574, 8635, 9841, 8536, 8634, 9840, 8534, 8636, 9842, 8538], ['2025-09-30', 201440, 11360101, 8292, None, 8508, 9170, 8500, 8505.691, 37931865, 8516, 25297886, 9170, 11360101, 9360, 8096, 13122, 37873691, 195068, 8516, 44.9727, 326989146203.2995, 8518, 211765009189, 233475, 9360, 8520, 8480, 8516, 13463853, 360557, 266432, 8094, 24397763, 1, 8516, 8516, 9199.1, 9303, 8168.1, 9219, 9314, 8139, 9218, 9306, 8138, 9220, 9322, 8140], ['2025-08-31', 172710, 12081240, 9334, None, 9218, 9356, 9193, 9189.216, 31234271, 9168, 25528534, 9356, 12081240, 10165, 9102, 8795, 31228311, 167165, 9168, 49.4485, 296770246790.81696, 9170, 227661778592, 195987, 10165, 9172, 9220, 9168, 7346876, 97546, 307557, 9102, 23897655, 1, 9168, 9168, 9312, 10031, 9193, 9313, 10095, 9152, 9312, 10090, 9146, 9314, 10100, 9158], ['2025-07-31', 100975, 8789196, 9458, None, 9270, 10680, 9433, 9424.612, 23214401, 9260, 17370774, 10680, 8789196, 10990, 9050, 35466, 23175490, 95943, 9260, 78.0789, 243048548215.16406, 9259, 169672346852, 128938, 10990, 9260, 10270, 9258, 7017549, 34116, 269171, 9050, 16495148, 1, 9260, 9260, 10655, 10898, 9433, 10652.5, 10882.5, 9259, 10650, 10880, 9258, 10655, 10885, 9260], ['2025-06-30', 66946, 8072395, 10900, None, 10655, 11205, 10641.9, 10639.255, 29048607, 10635, 14653342, 11205, 8072395, 11435, 10510, 3819, 28948109, 64222, 10635, 83.0874, 316586639910.8722, 10632.5, 153272082137.5, 84154, 11430, 10635, 10700, 10630, 14943782, 169533, 253395, 10510, 14003327, 1, 10635, 10635, 11252, 11382.8, 10641.9, 11307.5, 11387.5, 10632.5, 11305, 11385, 10630, 11310, 11390, 10635], ['2025-05-31', 83597, 5985584, 11565, None, 11420, 11600, 11340, 11288.959, 28841015, 11275, 13110105, 11600, 5985584, 11810, 11080, 4427, 28840414, 80903, 11275, 88.2513, 329744164905.58344, 11272.5, 141905777917.5, 99943, 11805, 11275, 11420, 11270, 16445222, 88640, 259327, 11080, 12422097, 1, 11275, 11275, 11525, 11627, 11249.8, 11362.5, 11627.5, 11267.5, 11360, 11625, 11265, 11365, 11630, 11270], ['2025-04-30', 119967, 7623889, 11230, None, 11510, 11480, 11536, 11598.845, 22179533, 11625, 16451299, 11480, 7623889, 11895, 10220, 4608, 22179070, 116404, 11625, 88.5619, 248890479913.13806, 11615, 179487833460, 134354, 11895, 11625, 11475, 11605, 6156952, 50715, 363015, 10220, 16013868, 1, 11625, 11625, 11561.2, 11775, 10470, 11580, 11812.5, 10330, 11570, 11810, 10325, 11590, 11815, 10335], ['2025-03-31', 109105, 9576963, 11335, None, 11462.25, 11890, 11471, 11469.413, 31324511, 11460, 18218222, 11890, 9576963, 11915, 10620, 5048, 30042752, 105865, 11460, 89.5325, 334975470825.8962, 11457.5, 196378705717.5, 125913, 11915, 11460, 11470, 11455, 11111608, 189277, 301329, 10620, 17641105, 1, 11460, 11460, 11836.69, 11836.69, 10738, 11747.5, 11747.5, 10705, 11745, 11745, 10695, 11750, 11750, 10715], ['2025-02-28', 86803, 8523323, 11650, None, 11735, 11845, 11813.78, 11821.932, 23829215, 11845, 15146149, 11845, 8523323, 12185, 11070, 6736, 22913000, 73491, 11845, 91.435, 267106395680.7584, 11840, 171954916770, 94071, 12185, 11845, 11795, 11835, 8126073, 76883, 251392, 11070, 14766772, 1, 11845, 11845, 11883.8932, 12049.739, 11125, 11902.5, 12092.5, 11105, 11900, 12090, 11100, 11905, 12095, 11110], ['2025-01-31', 76357, 5836524, 11880, None, 12010, 11285, 12025.532, 12041.029, 23662772, 12035, 12280571, 11300, 5836524, 12110, 11245, 3222, 23474034, None, None, 95.3833, 275349645948.58966, 12040, 138304014660, 82219, 12110, 12045, 12010, 12035, 11685281, 89347, 167689, 11205, 11792953, 1, 12035, 12035, 11427.4584, 12025.532, 11360.348, 11465, 12042.5, 11317.5, 11460, 12040, 11315, 11470, 12045, 11320], ['2024-12-31', 55626, 5314170, 11290, None, 11285, 11285, 11290.8578, 11291.361, 16456639, 11285, 12960619, 11285, 5314170, 11667.631, 11125, 1026, 16067452, None, None, 89.4837, 182988033642.41006, 11305, 106294452622.5, 61120, 11665, 11325, 11315, 11285, 6724474, 261669, 242679, 11125, 9355335, 1, 11285, 11285, 11283.0716, 11550.441, 11202.196, 11287.5, 11542.5, 11202.5, 11285, 11540, 11200, 11290, 11545, 11205], ['2024-11-30', 61695, 6895683, 10615, None, 11255, 10530, 11263.0768, 11265.087, 24730174, 11270, 22072456, 10530, 6895683, 11295, 10480, 2751, 24517739, None, None, 88.5334, 267065689526.2534, 11272.5, 130875458277.5, 69435, 11295, 11275, 11210, 11270, 12502087, 94037, 211701, 10480, 12000897, 1, 11270, 11270, 10706.7968, 11263.0768, 10593.668, 10747.5, 11272.5, 10597.5, 10745, 11270, 10595, 10750, 11275, 10600], ['2024-10-31', 64588, 7306228, 10440, None, 10503.1, 10190, 10486.766, 10495.006, 21480391, 10515, 18691537, 10190, 7306228, 10830, 10065, 4362, 20661347, None, None, 83.5049, 214692474304.47925, 10512.5, 127014034535, 73430, 10830, 10515, 10480, 10510, 8895937, 61268, 235024, 10065, 12210577, 1, 10515, 10515, 10247.627, 10678.221, 10120.0038, 10317.5, 10712.5, 10097.5, 10315, 10710, 10095, 10320, 10715, 10100], ['2024-09-30', 56535, 8101831, 10290, None, 10217.384, 10225, 10231.427, 10224.005, 21356826, 10220, 19672439, 10225, 8101831, 10595, 10040, 3303, 21356800, None, None, 81.2876, 220144880639.82138, 10222.5, 126272526165, 64512, 10595, 10225, 10235, 10220, 9157716, 221935, 248663, 10040, 12247323, 1, 10220, 10220, 10161.5685, 10516.182, 10090.8758, 10152.5, 10497.5, 10097.5, 10150, 10495, 10095, 10155, 10500, 10100], ['2024-08-31', 87686, 9612593, 9940, None, 10249.93, 9626, 10249.963, 10250, 26607460, 10250, None, 9626, 9612593, 10290, 9482, 3441, 26319514, None, None, 81.0105, 261240109582.86963, 10245, 118708041222, 98543, 10285, 10250, 10245, 10240, 11849307, 77874, 257341, 9448, 14470208, 1, 10250, 10250, 9849.159, 10249.963, 9550.376, 9853, 10245, 9515, 9852, 10240, 9514, 9854, 10250, 9516], ['2024-07-31', 81289, 8662211, 9420, None, 9462, 9452, 9500.297, 9472.645, 21785892, 9470, None, 9452, 8662211, 9580, 9192, 5463, 21785866, None, None, 68.2231, 204417107896.47522, 9471, None, 91809, 9580, 9472, 9516, 9470, 9305625, 60664, 175851, 8982, 12480241, 1, 9470, 9470, 9330.3209, 9500.297, 9225.9118, 9305, 9481, 9215, 9304, 9480, 9214, 9306, 9482, 9216], ['2024-06-30', 81722, 10436253, 9560, None, 9400, 9240, 9415.188, 9411.448, 30167080, 9400, None, 9240, 10436253, 9712, 9132, 6202, 30167047, None, None, 68.3816, 284865630011.82227, 9398, None, 89891, 9690, 9400, 9520, 9396, 13202953, 256038, 178038, 9132, 14902135, 1, 9400, 9400, 9229.046, 9645.465, 9229.046, 9149, 9650, 9149, 9148, 9646, 9148, 9150, 9654, 9150], ['2024-05-31', 96022, 12842775, 9290, None, 9122, 8818, 9156.876, 9162.441, 32799440, 9162, None, 8818, 12842775, 9448.99, 8748, 5700, 32058345, None, None, 65.5426, 294345281158.1443, 9161, None, 104746, 9428, 9162, 9122, 9160, 12306900, 89991, 512468, 8748, 18914296, 1, 9162, 9162, 8815.6978, 9337.135, 8815.6978, 8841, 9344, 8841, 8840, 9342, 8840, 8842, 9346, 8842], ['2024-04-30', 108397, 7937304, 8960, None, 8720, 9430, 8775.797, 8832.204, 32124579, 8846, None, 9486, 7937304, 9548, 8650, 4947, 32124535, None, None, 63.3377, 293268101857.435, 8845, None, 117101, 9530, 8846, 8720, 8844, 17519090, 28266, 211938, 8626, 13240326, 1, 8846, 8846, 9439.326, 9439.326, 8775.797, 9423, 9423, 8789, 9422, 9422, 8788, 9424, 9424, 8790], ['2024-03-31', 109147, 10173206, 9388, None, 9497.715, 8876, 9501.914, 9501.613, 54257151, 9490, None, 8876, 10173206, 9710, 8868, 6522, 53885686, None, None, 69.1166, 504439837986.94, 9493, None, 118585, 9696, 9496, 9588, 9490, 34726548, 296749, 530270, 8868, 16574476, 1, 9490, 9490, 8967.296, 9648.442, 8967.296, 9014, 9670, 9014, 9012, 9666, 9012, 9016, 9674, 9016], ['2024-02-29', 70219, 6919877, 8848, None, 8726, 8918, 8843.306, 8856.281, 36912281, 8876, None, 8918, 6919877, 8996, 8660, 8914, 36912214, None, None, 73.8176, 327745333947.495, 8877, None, 78498, 8996, 8878, 8788, 8876, 26508134, 68769, 154125, 8660, 10453760, 1, 8876, 8876, 8921.971, 8950.168, 8782.9, 8913, 8931, 8781, 8912, 8928, 8780, 8914, 8934, 8782], ['2024-01-31', 71586, 6401171, 9200, None, 8999.485, 9298, 8963.451, 8948.49, 32484309, 8942, None, 9298, 6401171, 9348, 8848, 3660, 32211433, None, None, 74.5631, 292460722758.28973, 8943, None, 80342, 9348, 8944, 9004, 8942, 21977806, 81754, 121103, 8808, 9618339, 1, 8942, 8942, 9153.508, 9205.085, 8958.8911, 9139, 9223, 8913, 9138, 9222, 8912, 9140, 9224, 8914], ['2023-12-31', 68486, 6096869, 9268, None, 9275.481, 8914, 9277.4017, 9277.675, 19086696, 9274, None, 8914, 6096869, 9438, 8880, 1310, 18223981, None, None, 76.9817, 166835366133.72, 9277, None, 76320, 9438, 9280, 9270, 9274, 8754700, 112632, 163102, 8880, 9265711, 1, 9274, 9274, 8985.47, 9336.756, 8934.207, 8991, 9321, 8924, 8990, 9320, 8922, 8992, 9322, 8926], ['2023-11-30', 82395, 8320579, 8438, None, 8882, 8296, 8905.002, 8905.046, 36637712, 8906, None, 8296, 8320579, 8970, 8216, 3485, 26474063, None, None, 73.801, 226267291476.2033, 8907, None, 87231, 8970, 8908, 8898, 8906, 13801807, 59214, 136871, 8174, 12666370, 1, 8906, 8906, 8327.8908, 8913.5164, 8309.4009, 8363, 8913, 8293, 8362, 8912, 8292, 8364, 8914, 8294]], 'meta': {'blendingEntry': {'headers': [{'name': 'DATE', 'type': 'string'}, {'name': 'ELG_NUMMOV', 'type': 'number', 'decimalChar': '.'}, {'name': 'IND_AUCVOL', 'type': 'number', 'decimalChar': '.'}, {'name': 'INT_AUC', 'type': 'number', 'decimalChar': '.'}, {'name': 'NAVALUE', 'type': 'number', 'decimalChar': '.'}, {'name': 'TRDPRC_1', 'type': 'number', 'decimalChar': '.'}, {'name': 'MKT_OPEN', 'type': 'number', 'decimalChar': '.'}, {'name': 'VWAP', 'type': 'number', 'decimalChar': '.'}, {'name': 'ORDBK_VWAP', 'type': 'number', 'decimalChar': '.'}, {'name': 'EX_VOL_UNS', 'type': 'number', 'decimalChar': '.'}, {'name': 'IND_AUC', 'type': 'number', 'decimalChar': '.'}, {'name': 'ELG_ACVOL', 'type': 'number', 'decimalChar': '.'}, {'name': 'OPEN_PRC', 'type': 'number', 'decimalChar': '.'}, {'name': 'CLS_AUCVOL', 'type': 'number', 'decimalChar': '.'}, {'name': 'MKT_HIGH', 'type': 'number', 'decimalChar': '.'}, {'name': 'LOW_1', 'type': 'number', 'decimalChar': '.'}, {'name': 'ALL_C_MOVE', 'type': 'number', 'decimalChar': '.'}, {'name': 'ACVOL_UNS', 'type': 'number', 'decimalChar': '.'}, {'name': 'OB_NUMMOV', 'type': 'number', 'decimalChar': '.'}, {'name': 'ORDBK_TRD', 'type': 'number', 'decimalChar': '.'}, {'name': 'PERATIO', 'type': 'number', 'decimalChar': '.'}, {'name': 'TRNOVR_UNS', 'type': 'number', 'decimalChar': '.'}, {'name': 'MID_PRICE', 'type': 'number', 'decimalChar': '.'}, {'name': 'TURN_ORDB', 'type': 'number', 'decimalChar': '.'}, {'name': 'NUM_MOVES', 'type': 'number', 'decimalChar': '.'}, {'name': 'HIGH_1', 'type': 'number', 'decimalChar': '.'}, {'name': 'ASK', 'type': 'number', 'decimalChar': '.'}, {'name': 'OPN_AUC', 'type': 'number', 'decimalChar': '.'}, {'name': 'BID', 'type': 'number', 'decimalChar': '.'}, {'name': 'OFFBK_VOL', 'type': 'number', 'decimalChar': '.'}, {'name': 'INT_AUCVOL', 'type': 'number', 'decimalChar': '.'}, {'name': 'OPN_AUCVOL', 'type': 'number', 'decimalChar': '.'}, {'name': 'MKT_LOW', 'type': 'number', 'decimalChar': '.'}, {'name': 'ORDBK_VOL', 'type': 'number', 'decimalChar': '.'}, {'name': 'TRD_STATUS', 'type': 'number', 'decimalChar': '.'}, {'name': 'CLS_AUC', 'type': 'number', 'decimalChar': '.'}, {'name': 'OFF_CLOSE', 'type': 'number', 'decimalChar': '.'}, {'name': 'VWAP_OPEN', 'type': 'number', 'decimalChar': '.'}, {'name': 'VWAP_HIGH', 'type': 'number', 'decimalChar': '.'}, {'name': 'VWAP_LOW', 'type': 'number', 'decimalChar': '.'}, {'name': 'MID_OPEN', 'type': 'number', 'decimalChar': '.'}, {'name': 'MID_HIGH', 'type': 'number', 'decimalChar': '.'}, {'name': 'MID_LOW', 'type': 'number', 'decimalChar': '.'}, {'name': 'OPEN_BID', 'type': 'number', 'decimalChar': '.'}, {'name': 'BID_HIGH_1', 'type': 'number', 'decimalChar': '.'}, {'name': 'BID_LOW_1', 'type': 'number', 'decimalChar': '.'}, {'name': 'OPEN_ASK', 'type': 'number', 'decimalChar': '.'}, {'name': 'ASK_HIGH_1', 'type': 'number', 'decimalChar': '.'}, {'name': 'ASK_LOW_1', 'type': 'number', 'decimalChar': '.'}], 'data': [['2026-04-07', 8017, 371273, None, None, 8918, 8922, 8927.4, 8920.45, 957635, 8876, 807521, 8922, 371273, 9034, 8876, 10038, 957635, 7764, 8876, 37.4302, 8549240437.08896, 8882, 6966987236, 10038, 9034, 8888, 8922, 8876, 176622, None, 12755, 8876, 781013, 1, 8876, 8876, 8927.4, 8927.4, 8927.4, 8882, 8882, 8882, 8876, 8876, 8876, 8888, 8888, 8888]]}}}]

The data return from the library Endpoint is in a JSON message format. We can use a simple Python code to convert it to de facto Pandas Dataframe object as follows.

# Extract the data part of the JSON, along with column headings to populate a DataFrame
df = pd.DataFrame(response.data.raw[0]['data'], columns=[h['name']
for h in response.data.raw[0]['headers']])
df.head(15)
DATEELG_NUMMOVIND_AUCVOLINT_AUCNAVALUETRDPRC_1MKT_OPENVWAPORDBK_VWAPEX_VOL_UNS...VWAP_LOWMID_OPENMID_HIGHMID_LOWOPEN_BIDBID_HIGH_1BID_LOW_1OPEN_ASKASK_HIGH_1ASK_LOW_1
02026-04-30262031390966NaNNone8918.0089408927.408920.4503457042...8843.08824.08921.08824.0882289208822882689228826
12026-03-31256773121063158610.0None8830.0087768829.008831.37457627751...8320.08777.08865.08248.0877688648246877888668250
22026-02-28295401145162347864.0None8986.0081028790.008835.33746701026...7080.08235.08859.07172.0823488587170823688607174
32026-01-3114879577828129228.0None8146.0090088139.008138.17731438299...8139.08805.09185.08117.0880491848116880691868118
42025-12-3112077686109388828.0None8952.0088888954.408954.53022818869...8354.08793.08963.08368.0879289628366879489648370
52025-11-30152854119391258594.0None8922.0095148907.308907.54036406321...8393.09511.09733.08333.0951097328330951297348336
62025-10-31215127108590298602.0None9482.0087509480.009480.86538896852...8574.08635.09841.08536.0863498408534863698428538
72025-09-30201440113601018292.0None8508.0091708500.008505.69137931865...8168.19219.09314.08139.0921893068138922093228140
82025-08-31172710120812409334.0None9218.0093569193.009189.21631234271...9193.09313.010095.09152.093121009091469314101009158
92025-07-3110097587891969458.0None9270.00106809433.009424.61223214401...9433.010652.510882.59259.01065010880925810655108859260
102025-06-3066946807239510900.0None10655.001120510641.9010639.25529048607...10641.911307.511387.510632.5113051138510630113101139010635
112025-05-3183597598558411565.0None11420.001160011340.0011288.95928841015...11249.811362.511627.511267.5113601162511265113651163011270
122025-04-30119967762388911230.0None11510.001148011536.0011598.84522179533...10470.011580.011812.510330.0115701181010325115901181510335
132025-03-31109105957696311335.0None11462.251189011471.0011469.41331324511...10738.011747.511747.510705.0117451174510695117501175010715
142025-02-2886803852332311650.0None11735.001184511813.7811821.93223829215...11125.011902.512092.511105.0119001209011100119051209511110

15 rows × 49 columns

You can use any Python graph libraries likes Matplotlib, Plotly, seaborn, bokeh, etc. to plot this historical data dataframe object into graphs for visualization.

I am demonstrating with the Matplotlib library.

import matplotlib.pyplot as plt

# Define the fields we want to plot from the DataFrame
plot_fields = ['MKT_OPEN', 'TRDPRC_1', 'BID', 'ASK', 'OPEN_PRC']

# Filter to only include fields that actually exist in the DataFrame,
# since the API may not always return every requested field
available_fields = [f for f in plot_fields if f in df.columns]

# Use the DATE column as the x-axis if it exists, otherwise fall back to the row index
x = df['DATE'] if 'DATE' in df.columns else df.index

# Create a figure and axes with a wide layout suitable for time-series data
fig, ax = plt.subplots(figsize=(12, 6))

# Plot each available field as a separate line with circle markers
for field in available_fields:
# Convert column values to numeric, coercing any non-numeric entries to NaN
ax.plot(x, pd.to_numeric(df[field], errors='coerce'), marker='o', label=field)

# Set chart title, axis labels, legend, and grid for readability
ax.set_title(f'Historical Pricing — /{RIC} - Interday 1 Month')
ax.set_xlabel('Date')
ax.set_ylabel('Value')
ax.legend()
ax.grid(True)

# Rotate x-axis date labels to prevent overlap
plt.xticks(rotation=45)

# Adjust layout so labels and title are not clipped
plt.tight_layout()
plt.show()

png

You can retrieve streaming delayed data in the same way as normal real-time data using the Content Layer's Pricing module.

To learn more about the Pricing module, see the following resources:

First, define the callback methods to receive streaming data.

from lseg.data.content import pricing
from IPython.display import display, clear_output
from pandas import DataFrame

df = DataFrame()

def create_dataframe(streaming_prices):
global df
snapshot = streaming_prices.get_snapshot()
field_names = snapshot.columns[1:]
instrument_names = snapshot['Instrument'].values
df = DataFrame(index=instrument_names, columns=field_names)
for price in streaming_prices:
for field_name, field_value in price.get_fields().items():
df.at[price.name, field_name] = field_value
display(df)


def update_dataframe(fields, instrument_name, streaming_prices):
global df
clear_output(wait=True)
for field_name, field_value in fields.items():
df.at[instrument_name, field_name] = field_value
display(df)

Next, get the data stream and open it. You see that the data on the DataFrame is streaming. Please note that the delayed data stream a bit slower than a real-time data.


stream = pricing.Definition(
universe=['/EUR=', '/JPY=', '/HKD='],
fields=['BID', 'ASK']
).get_stream()


stream.on_update(update_dataframe)
stream.on_complete(create_dataframe)

stream.open()
BIDASK
/EUR=1.16851.1689
/JPY=158.31158.35
/HKD=7.83227.8323

To stop streaming, close the stream.

stream.close()

Closing runs

The closing run is a housekeeping exercise performed by LSEG that prepares the display template for the next trading session.

To see when the closing runs are performed, see:

  • CLOSE/RUN1.

You can click on the Next Page or Previous Page menu to navigate through the pages series.

CLOSE/RUN1

CLOSE/RUN1

Otherwise, you can get each page RIC row data programmatically.

def get_page_data(universe):
# Build field lists for both possible page layouts:
# ROW64_* — 64-character wide rows (fields 1–14)
# ROW80_* — 80-character wide rows (fields 1–25)
row64_fields = [f"ROW64_{i}" for i in range(1, 15)]
row80_fields = [f"ROW80_{i}" for i in range(1, 26)]

# Fetch all fields in a single API call.
# A page RIC uses exactly one layout, so the other layout's columns return as all-NaN.
df_result = ld.get_data(universe=universe, fields=row64_fields + row80_fields)

# Drop columns that are entirely NaN to keep only the active layout's data.
return df_result.dropna(axis='columns', how='all')

close_run1 = get_page_data('CLOSE/RUN1')

# Print each returned row field and its value
print(*close_run1.iloc[0, 1:26], sep="\n")


CLOSING RUN - REFINITIV SPEED GUIDE CLOSE/RUN1
The following information details times when the closing run is performed on
Exchange feeds. The closing run is a housekeeping exercise performed by
Refinitiv that prepares the display template for the next trading session, for
example last trade may be moved to historical close, or bid and ask prices may
be cleared. Closing run functionality is defined by Refinitiv on an exchange by
exchange basis.
European, Middle Eastern & African Exchanges....................\<CLOSE\/RUN1>-8
North American & Latin American Exchanges.......................\<CLOSE\/RUN8>-9
Asian Exchanges.................................................\<CLOSE\/RUN10>-12
Closing Run (GMT)
=COUNTRY========EXCHANGE==========================Winter===Summer===RUN DAYS===
Austria Vienna SE 03:00 02:00 M/T/W/T/F
OETOB Austrian Indices 23:00 23:00 M/T/W/T/F
Vienna Bond Indices 15:00 14:00 M/T/W/T/F
Bahrain Bahrain Bourse 00:50 00:50 S/M/T/W/T
Bahrain Bahrain Financial Exchange 17:30 17:30 M/T/W/T/F
Belgium Euronext Brussels 01:30 00:30 M/T/W/T/F
NASDAQE 03:30 02:30 M/T/W/T/F
Botswana Botswana SE 06:00 06:00 M/T/W/T/F
Bulgaria Sofia SE 03:00 02:00 M/T/W/T/F
Croatia Zagreb SE 03.00 02:00 M/T/W/T/F
Cyprus Cyprus SE 05:00 05:00 M/T/W/T/F
================================================================================
Equity Guide \<EQUITY> Futures Guide \<FUTURES> Next Page \<CLOSE/RUN2>

close_run2 = get_page_data('CLOSE/RUN2')

# Print each returned row field and its value
print(*close_run2.iloc[0, 1:26], sep="\n")

CLOSING RUN - REFINITIV SPEED GUIDE CLOSE/RUN2
Closing Run (GMT)
=COUNTRY========EXCHANGE========================Winter===Summer======RUN DAYS==
Czech Power Exchange Central Europe 05:00 04:00 M/T/W/T/F
Prague SE (AT Markets) 03:00 02:00 M/T/W/T/F
Denmark Copenhagen 04:30 03:30 M/T/W/T/F
Egypt The Egyptian Exchange 04:00 04:00 S/M/T/W/T
Estonia OMX Tallin SE 04:30 03:30 M/T/W/T/F
Europe Nordic Viking Indices 04:30 03:30 M/T/W/T/F
Nordic List Indices 04:30 03:30 M/T/W/T/F
NYSE ARCA Europe 02:25 01:25 M/T/W/T/F
Trade Data Services 03:00 02:00 M/T/W/T/F
Finland Finnish Options 04:50 03:50 M/T/W/T/F
Helsinki Equities 04:30 03:30 M/T/W/T/F
Helsinki Funds 14:00 13:00 M/T/W/T/F
Helsinki Non-Equities 04:40 03:40 M/T/W/T/F
France Euronext Paris 01:30 00:30 M/T/W/T/F
Germany Berlin SE 03:20 02:20 M/T/W/T/F
Dusseldorf SE 03:25 02:25 M/T/W/T/F
Eurex 23:30 22:30 M/T/W/T/F
Eurex Bonds 23:30 22:30 M/T/W/T/F
Frankfurt SE 02:55 01:55 M/T/W/T/F
Hamburg SE 03:20 02:20 M/T/W/T/F
================================================================================
Main Guide \<REFINITIV> Previous Page \<CLOSE/RUN1> Next Page \<CLOSE/RUN3>

Delayed chains

Chains work the same way as full quotes. Put a forward slash / in front of the code:

  • /.GDAXI F3 – German DAX index (delayed).
  • Or: 0#/.GDAXI.

Note:

  • If you use the 0# format, the forward slash / goes after the 0#.
  • Delayed chains are available for most futures and equity indices, but not for all.
from lseg.data.discovery import Chain
Chain_RIC = '0#/.GDAXI'
# Get Chain constituents RICs
spx = Chain(Chain_RIC)

print(f'Listing first 20 constituents of delayedGerman DAX index chain ({Chain_RIC}):')
for constituent in spx.constituents[:20]:
print(constituent)

Listing first 20 constituents of delayedGerman DAX index chain (0#/.GDAXI): /ADSGn.DE /AIRG.DE /ALVG.DE /BASFn.DE /BMWG.DE /BAYGn.DE /BEIG.DE /BNRGn.DE /CBKG.DE /CONG.DE /DTGGe.DE /DBKGn.DE /DHLn.DE /DB1Gn.DE /DTEGn.DE /EONGn.DE /FMEG.DE /FREG.DE /G1AG.DE /HNRGn.DE

print('Getting data for the first 10 constituents of delayedGerman DAX index data:')
ld.get_data(spx.constituents[:10], ['BID', 'ASK', 'TR.Revenue','TR.Volume','TR.Commonname'])

Getting data for the first 10 constituents of delayedGerman DAX index data:

InstrumentRevenueVolumeCompany Common NameBIDASK
0/ADSGn.DE24811000000755852Adidas AG<NA><NA>
1/AIRG.DE73420000000279264Airbus SE<NA><NA>
2/ALVG.DE<NA>645247Allianz SE<NA><NA>
3/BASFn.DE596570000003842159BASF SE<NA><NA>
4/BMWG.DE133453000000999957Bayerische Motoren Werke AG<NA><NA>
5/BAYGn.DE455750000002360251Bayer AG<NA><NA>
6/BEIG.DE9852000000404886Beiersdorf AG<NA><NA>
7/BNRGn.DE15171500000333873Brenntag SE<NA><NA>
8/CBKG.DE<NA>2448008Commerzbank AG<NA><NA>
9/CONG.DE19676000000462330Continental AG<NA><NA>

Delayed foreign exchange quotes

There is also delayed data for the foreign exchange markets.

In FX there are two types of delay:

  • Two minutes – called a snapshot, expressed by the letter S.
  • Ten minutes – expressed by the letter X.

Examples:

  • EUR=X – 10‑minute delay.
  • EUR=S – 2‑minute snapshot.

EUR=S

You can find a complete list of delayed FX quotes in the cross-market package described below.

You can use the Library get_data method to get the real-time and fundamental data of these delayed foreign exchange quote RICs.

data_eur_delayed = ld.get_data(['EUR=X','EUR=S'], ['BID', 'ASK','NETCHNG_1','OPEN_PRC','HST_CLOSE'])
data_eur_delayed
InstrumentBIDASKNETCHNG_1OPEN_PRCHST_CLOSE
0EUR=X1.16891.16930.00971.15921.1592
1EUR=S1.16861.1690.00921.15921.1594

Unlike the delayed RICs with / prefix, these delayed foreign exchange quote RICs (RICs with CURRENCY=X and CURRENCY=S format) can be used with Data Library get_history method.

historica_eur_x = ld.get_history('EUR=X',count=15)
historica_eur_x
EUR=XBIDASKBID_HIGH_1BID_LOW_1OPEN_BIDMID_PRICE
Date
2026-03-181.1451.14541.15551.14481.15391.1452
2026-03-191.15881.1591.16161.14421.14511.1589
2026-03-201.1571.15721.15951.15241.15881.1571
2026-03-231.16121.16141.16391.14831.1541.1613
2026-03-241.16071.16081.16281.15551.16131.16075
2026-03-251.15581.15591.1631.15541.16061.15585
2026-03-261.15261.1531.15721.15191.15581.1528
2026-03-271.15081.15121.15471.15011.15271.151
2026-03-301.14651.14671.15211.14421.15111.1466
2026-03-311.15521.15551.15631.14461.14681.15535
2026-04-011.15881.15891.16271.15481.15521.15885
2026-04-021.15371.1541.16051.15081.15881.15385
2026-04-031.15151.15191.15491.15121.15371.1517
2026-04-061.15411.15421.15711.15041.15161.15415
2026-04-071.15941.15961.16051.15221.1541.1595

The Library get_history method returns data as a Pandas Dataframe object, so you can use it to plot a graph for visualization too.

I am demonstrating with the Matplotlib library.

# Select only numeric columns from the DataFrame for plotting
numeric_cols = historica_eur_x.select_dtypes(include='number').columns.tolist()

# Create a figure and axes with a wide layout suitable for time-series data
fig, ax = plt.subplots(figsize=(12, 6))

# Plot each numeric column as a separate line with circle markers
for col in numeric_cols:
ax.plot(historica_eur_x.index, historica_eur_x[col], marker='o', label=col)

# Set chart title, axis labels, legend, and grid for readability
ax.set_title('EUR=X (10 minutes delayed) Historical Pricing (Last 15 Sessions)')
ax.set_xlabel('Date')
ax.set_ylabel('Value')
ax.legend()
ax.grid(True)

# Rotate x-axis date labels to prevent overlap
plt.xticks(rotation=45)

# Adjust layout so labels and title are not clipped
plt.tight_layout()
plt.show()

png

Cross-market package

The cross-market package from LSEG gives you a limited amount of real-time and delayed data free of charge.

  • If you have only subscribed to one asset-class service, this gives you useful indicators of the state of other markets.

For more details, see the CROSS/MKT1 page and its series by navigating through the page menu.

CROSS/MKT1

CROSS/MKT2

df = get_page_data('CROSS/MKT2')

# Print each returned row field and its value
print(*df.iloc[0, 1:26], sep="\n")

CROSS MARKET PACKAGE - LSEG SPEED GUIDE CROSS/MKT2
Welcome to the Cross Market Package Guide. The following retrieval codes are
available as part of all international and certain domestic products.

=SPOT RATES BY COUNTRY================= =SPOT RATES BY COUNTRY Cont============
Composite Tile (10 min snaps)....\<FX=X> Ecuadorian Sucre................\<ECS=X>
Algerian Dinar.................. \<DZD=X> Egyptian Pound..................\<EGP=X>
Argentinian Peso................\<ARS=X> Euro............................\<EUR=X>
Australian Dollar...............\<AUD=X> Hong Kong Dollar................\<HKD=X>
Bangladesh Taka.................\<BDT=X> Hungarian Forint................\<HUF=X>
Botswana Pula...................\<BWP=X> Icelandic Krona.................\<ISK=X>
Brazilian Real..................\<BRL=X> Indian Rupee....................\<INR=X>
British Pound...................\<GBP=X> Indonesian Rupiah...............\<IDR=X>
Bulgarian Lev...................\<BGN=X> Israeli Shekel..................\<ILS=X>
Canadian Dollar.................\<CAD=X> Japanese Yen....................\<JPY=X>
Chilean Peso....................\<CLP=X> Jordanian Dinar.................\<JOD=X>
Chinese Renimbi.................\<CNY=X> Korean Won......................\<KRW=X>
Colombian Peso..................\<COP=X> Kuwaiti Dinar...................\<KWD=X>
Czech Koruna....................\<CZK=X> Lebanese Pound..................\<LBP=X>
Danish Krone....................\<DKK=X> Malaysian Ringitt...............\<MYR=X>
Mexican Peso....................\<MXN=X>
Moroccan Dirham.................\<MAD=X>
================================================================================
Main Index\<LSEG> Previous page\<CROSS/MKT1> Next page\<CROSS/MKT3>
Lost? Selective Access?....\<USER/HELP> LSEG Phone Support.........\<PHONE/HELP>

Ending the Data Library Session

To end the Data Library session, please use the ld.close_session method.

ld.close_session()