Curves & Data Access
Data in the API is stored in curves. A curve is a collection of metadata describing one or more time series. There are 4 main curve types:
TIME_SERIESTAGGEDINSTANCESTAGGED_INSTANCES
Additionally, there is a specialized curve type:
PAIRED_LIST— for data structures with two related values per point.
Searching for curves
Section titled “Searching for curves”Each curve can have the following metadata attributes:
commodity,categories,area,border_source,stationsources,scenarios,unit,time_zoneversion,frequency,data_type
The standard way of finding curves is by searching using a combination of these
attributes. You can search via the
API web interface
(see the documentation)
or within Python using session.search():
curves = session.search(category='WND', area=['EE', 'LT'], frequency='H')The valid values for each attribute can be accessed using the corresponding
session.get_ATTRIBUTE() function.
Getting a curve object
Section titled “Getting a curve object”To fetch data, first get a curve object. You can get one by
searching (which returns a list of curve objects),
or by name using session.get_curve():
curve = session.get_curve(name='pro ee wnd intraday mwh/h cet h a')Each curve has the following attributes:
id— curve IDname— curve namecurve_state—Normal availability,Beta release, orScheduled for removalcurve_type— one ofTIME_SERIES,TAGGED,INSTANCES,TAGGED_INSTANCES, orPAIRED_LIST
Access attribute values with curve.attribute_name:
>>> curve = session.get_curve(name='pro ee wnd intraday mwh/h cet h a')>>> curve.name'pro ee wnd intraday mwh/h cet h a'>>> curve.curve_type'TIME_SERIES'Getting data from a curve
Section titled “Getting data from a curve”Each curve type has its own methods for fetching data. Check the type with
curve.curve_type.
TIME_SERIES
Section titled “TIME_SERIES”A Time Series curve holds a single time series (actual values, backcasts,
normals, etc.). Use get_data():
curve = session.get_curve(name='pro ee wnd intraday mwh/h cet h a')ts = curve.get_data(data_from='2018-01-01T14:00Z', data_to='2018-02-01T14:00Z')The method returns a TS object. You can also process data server-side
(aggregate to daily/weekly/monthly/yearly) by passing additional parameters
to get_data() — see the API Reference
and Examples.
TAGGED
Section titled “TAGGED”A Tagged curve holds a set of related time series, each identified by a tag (commonly used for ensemble weather data).
# Get available tagstags = curve.get_tags()
# Get data for all tagsts_list = curve.get_data(data_from='2018-01-01', data_to='2018-02-01')
# Get data for a single tagts = curve.get_data(data_from='2018-01-01', data_to='2018-02-01', tag='Avg')
# Get data for multiple tagsts_list = curve.get_data(data_from='2018-01-01', data_to='2018-02-01', tag=['Avg', '01', '12'])INSTANCES
Section titled “INSTANCES”An Instance curve contains a time series for each issue date (typically forecasts). You can:
# Fetch a single instance by issue datets = curve.get_instance(issue_date='2018-01-01T00:00')
# Search for multiple instances in a date rangets_list = curve.search_instances( issue_date_from='2018-07-01Z00:00', issue_date_to='2018-07-04Z00:00', with_data=True)
# Fetch the latest available instancets = curve.get_latest()TAGGED_INSTANCES
Section titled “TAGGED_INSTANCES”Tagged Instance curves combine Tagged and Instance curves — each time series is defined by a unique combination of issue date and tag. Ensemble forecasts are a typical use case.
# Get available tagstags = curve.get_tags()
# Get data for the default tag at a given issue datets_list = curve.get_instance(issue_date='2018-07-01T00:00')
# Get data for a single tagts = curve.get_instance(issue_date='2018-07-01T00:00', tag='Avg')
# Get data for multiple tagsts_list = curve.get_instance(issue_date='2018-07-01T00:00', tag=['Avg', '02', '05'])
# Search for multiple instancests_list = curve.search_instances( issue_date_from='2018-07-01Z00:00', issue_date_to='2018-07-04Z00:00', with_data=True, tags=['Avg', '11'])
# Get the latest instance for a specific tagts = curve.get_latest(tags='03')PAIRED_LIST
Section titled “PAIRED_LIST”A PairedList curve contains paired values where each data point has two related values (e.g. price and volume).
# Get available tagstags = curve.get_tags()
# Fetch paired datapaired_data = curve.get_data( data_from='2025-01-01', data_to='2025-01-31', with_data=True)
# Convert to DataFramedf = paired_data[0].to_pandas()Working with TS objects
Section titled “Working with TS objects”All data-fetching methods return a TS object. The most important method
is to_pandas(), which returns a
pandas.Series
with a date index:
>>> curve = session.get_curve(name='pro ee wnd intraday mwh/h cet h a')>>> ts = curve.get_data(data_from="2018-01-01", data_to="2018-01-05",... frequency="D", function="SUM")>>> ts.to_pandas()2018-01-01 00:00:00+01:00 2169.02018-01-02 00:00:00+01:00 3948.02018-01-03 00:00:00+01:00 1489.02018-01-04 00:00:00+01:00 1860.0Freq: D, Name: pro ee wnd intraday mwh/h cet h a, dtype: float64The TS class also provides simple aggregation methods: ts.sum(),
ts.mean(), and ts.median().
See the Examples and pandas documentation for more on working with Series and DataFrame objects.
Working with PairedTS objects
Section titled “Working with PairedTS objects”PAIRED_LIST curves return PairedTS objects instead of TS objects.
The to_pandas() method returns a
pandas.DataFrame
where each tag becomes a column:
>>> curve = session.get_curve(name='paired_list curve name')>>> paired_data = curve.get_data(data_from="2025-12-18",... data_to="2025-12-19", with_data=True)>>> df = paired_data[0].to_pandas()>>> df.head() price volume0 -581.93 5.01 -572.00 5.02 -562.97 5.03 -544.84 5.04 -536.21 5.0