Skip to main content

Data Service

The data resource contains all the complex data types like TimeSeries and Curve

Data REST API​

The Data REST API lets you search, filter and read the complex data types, and delete them, and is accessed through the following URL:

https://api.opendatadsl.com/api/data
note

You save data through the Object service: a data entity always belongs to an object, so saving an object with data properties saves those data entities. The data service reads them, deletes them, and runs functions on them.

REST Methods​

The API consists of the following calls:

MethodPathExampleDescription
GETGet the build information for this service
GET{release}/{source}'v1/public' 'v1/private'List public or private data items
GET{release}v1List the sources you can read: public, private, and morningstar if you have Morningstar credentials
GET{release}/{source}/{key}v1/private/TEST:SPOTRetrieve a single data item using its id
GET{release}/{source}/{key}/{version}v1/private/TEST:SPOT/2Retrieve a version of a data item
GET{release}/{source}/{key}/*v1/private/TEST:SPOT/*List the versions of a data item
GET{release}/allv1/all?_id=TEST:SPOT&_id=%23ECB_FX.EURGBP:SPOTRetrieve several data items from public and private in one call
PUT{release}/{source}/{key}/{version}/{tag}v1/private/TEST:SPOT/2/PRODTag a version of a data item
PUT{release}/{source}?_function=identityv1/private?_function=identityRead or set the identities (external codes) of data items, see Identities
DELETE{release}/{source}/{key}v1/private/TEST:SPOTRoll back to the previous version of a data item, or delete it if it has only one version
DELETE{release}/{source}/{key}/*v1/private/TEST:SPOT/*Delete a data item and all its versions
note

A smart curve or smart timeseries that other smart curves or timeseries use as their base or as an input cannot be deleted completely: the request fails and the error lists the items that use it. Rolling back to an earlier version is still allowed. Use the dependents function to see what uses an item.

Query Parameters​

Below is a table of the query parameters that are usable with the data REST API

ParameterUsable OnExampleDescription
_tenorCurve_tenor=M01Retrieves an historic TimeSeries of a specific tenor of a curve. You can also put the tenor at the end of the id, e.g. TEST:CURVE:M01
_function=listCurve_function=listLists all the relative tenors available in this curve
_ondateCurve_ondate=2026-10-23The curve date to use with the dynamic curve dates -ONDATE, <ONDATE and -ABSOLUTE, see Data ids
_runSmart data_run=trueRebuilds a smart curve or timeseries instead of reading the stored build
expressionCurveexpression=BASE * 1.1Previews a smart curve built on this curve with the expression, without saving it, see Previewing a smart curve
_range lastTimeSeries_range=last(3)Returns the last n observations
_range fromTimeSeries_range=from(2021-03-01)Returns all observations from the specified date
_range fromTimeSeries_range=from(2021-03-01,Europe/Paris)Returns all observations from the specified date converted to the specified timezone
_range betweenTimeSeries_range=between(2021-03-01,2021-03-31)Returns only the observation within the specified range
_range betweenTimeSeries_range=between(2021-03-01,2021-03-31,Europe/Paris)Returns only the observation within the specified range in the specified timezone
_idAny_id=MYCURVE:2021-03-01Used when retrieving multiple data entities from anywhere (use all as source)
currencyAnycurrency=USDConverts the TimeSeries or Curve to the supplied currency
unitsAnyunits=MTConverts the TimeSeries or Curve to the supplied units
__densityAny__density=980When used in conjunction with unit conversion, this overrides the default density of the product being converted
__timefactorAny__timefactor=24When used in conjunction with unit conversion, this overrides the time factor used to convert between energy and power units

Data ids​

A data id is the object id and the data property name, separated by a colon, for example #ECB_FX.EURGBP:SPOT. A curve adds its curve date: #IPEX.EL.IT.BL.MTE.FWD.CURVE:PRICE:2023-12-12. You can add one more part to the id to read the data in a different way:

IdExampleWhat you get
curve:LTEST:CURVE:LThe latest curve
curve:L-nTEST:CURVE:L-1The curve n dates before the latest one
curve:-dateTEST:CURVE:-2026-10-23The curve for the date, or the latest one before it
curve:<dateTEST:CURVE:<2026-10-23The latest curve before the date
curve:tenorTEST:CURVE:M01A timeseries of the values of one tenor, one value for each curve date
curve:date:TSTEST:CURVE:2026-10-23:TSThe curve converted to a timeseries of its delivery periods
curve:date:MXTEST:CURVE:2026-10-23:MXThe curve converted to a matrix
timeseries:MXTEST:SPOT:MXThe timeseries converted to a matrix
curve:-ONDATETEST:CURVE:-ONDATE?_ondate=2026-10-23The curve for the _ondate, or the latest one before it
curve:<ONDATETEST:CURVE:<ONDATE?_ondate=2026-10-23The latest curve before the _ondate
curve:-ABSOLUTETEST:CURVE:-ABSOLUTE?_ondate=2026-10-23The curve for the _ondate or the latest one before it, rolled forward to the _ondate so its tenors are relative to that date
options:dateNGE.EUA:OPTIONS:2026-09-16The options (an option chain per tenor) for the date, see Options. L, L-n and -date work as for curves
options:tenor:strike:C or PNGE.EUA:OPTIONS:2026M09:85:CA timeseries of one option's main value, one value for each ondate
options:tenor:strike:C or P:columnNGE.EUA:OPTIONS:2026M09:85:C:OPTION_VOLATILITYA timeseries of one column of one option

Functions​

Functions are run with the _function query parameter:

FunctionMethodExampleDescription
listGETv1/public/%23DCE.AG.CN.A.NO1_SOYBEAN.FUT:SETTLE?_function=listList the tenors available in a curve
infoGETv1/private/TEST:SPOT?_function=infoThe data item without its values. For an event timeseries it adds the start and end of the events
dependentsGETv1/private/TEST:CURVE?_function=dependentsThe smart curves and timeseries that use this item as their base or as an input
matrixGETv1/private/TEST:SPOT?_function=matrix(day)Converts a timeseries or curve to a matrix with one row per day, week, month or year. For a timeseries, an optional second parameter of true fills the missing values, e.g. matrix(day,true)
convertGETv1/all?_function=convertReads the data items whose ids are in the JSON array in the request body, applying the query parameters (such as currency and units) to each
help-curveGETv1/public?_function=help-curveThe functions you can use in a smart curve expression. Pass script to name a script other than #CurveScript
help-timeseriesGETv1/public?_function=help-timeseriesThe functions you can use in a smart timeseries expression. Pass script to name a script other than #TimeSeriesScript
identityPUTv1/private?_function=identityRead or set the identities of data items, see Identities

Identities​

Data items can carry identities: the codes other systems use for them, kept in the _identity property by identity provider. Use a PUT with _function=identity.

To read the identities of some data items, set action to GET, list the ids and, optionally, the identity providers you want (all of them if empty):

PUT https://api.opendatadsl.com/api/data/v1/private?_function=identity
Authorization: Bearer {{token}}
Content-Type: application/json

{
"action": "GET",
"_id": ["NGE.POWER.DE:BASE", "NGE.GAS.TTF:MID"],
"identity": ["ETRM"]
}

The response has a data list with one entry for each id, holding the identities found and the data type.

To set identities, set action to PUT and give a data list of the data item id and its identities by provider. A provider set to null is removed:

{
"action": "PUT",
"data": [
{"_id": "NGE.POWER.DE:BASE", "ETRM": "PWR_DE_BASE"}
]
}

Previewing a smart curve​

Add an expression query parameter to a curve request to see what a smart curve built on that curve would give, without saving it. The curve in the path is the base curve. You can also pass script, currency, units and timezone, and other query parameters become properties of the smart curve: a value with a colon is a reference to another data item, for example gas=NGE.GAS.TTF:MID.

GET https://api.opendatadsl.com/api/data/v1/private/NGE.POWER.DE:BASE:2026-10-23
?expression=BASE - gas * 2
&gas=NGE.GAS.TTF:MID
Authorization: Bearer {{token}}

Options​

Options data is stored as events, one per ondate, tenor, call or put, and strike. An EventOptions data item says which events to use, and the options are built from them when you read it. See the Options topic.

IdExampleWhat you get
optionsNGE.EUA:OPTIONSThe ondates: _type VarOptionsDates, a list of dates each referencing the options for that date. _range works as for curve dates
options:dateNGE.EUA:OPTIONS:2026-09-16The options for the date (_type VarOptions), not found when there are no events that day
options:LNGE.EUA:OPTIONS:LThe latest options
options:tenor:strike:C or PNGE.EUA:OPTIONS:2026M09:85:CA daily timeseries of the call's main value (P for the put). The tenor can be absolute or relative
options:tenor:strike:C or P:columnNGE.EUA:OPTIONS:2026M09:85:C:OPTION_VOLATILITYA daily timeseries of one column

A positions view (an EventOptions with positions set) is read the same way and returns only the options held, with POSITION_VOLUME and TRADED_PRICE added. See Traded options.

Options Entity​

NameDescriptionType
_idThe id of the options, ending with the ondateString
_typeAlways VarOptionsString
_subtypeAlways VarEventOptionsString
ondateThe ondate (YYYY-MM-DD)String
name, descriptionThe name and description of the optionsString
currency, unitsThe currency and units codesString
timezoneThe timezone of the ondateString
valueThe main value columnString
columnsThe columns of each call and put, in orderString[]
tenorsThe tenors in delivery orderOptionTenor[]
propertiesevent, modified, and for a positions view positions, positionDate and unpricedObject
_identityThe configured identitiesObject
_objid, _dataid, _objtypeThe object, data id and object type the options belong toString

OptionTenor Entity​

NameDescriptionType
tenorThe tenor (the value of the tenor property, e.g. 2026M09)String
absoluteThe absolute period codeString
relativeThe relative period code on the ondateString
start, endThe delivery period (the end is the last day)String(Date)
expiryThe expiry date of the optionsString(Date)
strikesThe strikes in ascending order: strike, and call and put objects with a value per column. A side with no option, and a column with no value, are left outObject[]

Entities​

There are currently 2 types of data entities (and their sub-entities):

  • TimeSeries
    • TimeValue
      • Status
  • Curve
    • Contract
      • Status

TimeSeries Entity​

Here are the properties of a TimeSeries

NameDescriptionType
_idUnique id for the TimeSeries (or object id if this is not the latest version)String
_typeThe type of the entity - always VarTimeSeriesString
descriptionA description of the TimeSeriesString
startThe start timestamp of the TimeSeriesString(DateTime)
calendarThe code for the calendar that this TimeSeries maps toString
timezoneThe timezone of the observationsString
currencyThe currency codeString
unitsThe units codeString
propertiesAn object containing custom dynamic propertiesObject
_objidThe id of the object that this belongs toString
_dataidThe name of the data id in the objectString
_accessThe data access role that this data belongs toString
_objtypeThe object type of the object that this belongs toString
_oidThe id of the calendar - will match _id if this is the latest version of the calendarString
_timestampTimestamp of when this calendar version was createdString(DateTime)
_userThe user id (email) of the user that created this calendar verisionString
_tagA list of version tag names for this calendar versionString[]
_versionThe version number of this calendar versionint
dataThe time series observationsTimeValue[]

TimeValue Entity​

The TimeValue entity represents a single observation on a TimeSeries

NameDescriptionType
timeThe time point for this observationString(DateTime)
valueThe value of this observationString or Numeric
statusA status objectStatus

Status Entity​

The Status entity represents the quality, source and reliability status of a TimeValue or Contract entity

NameDescriptionType
qualityThe data quality 'UNCHECKED' 'VALID' 'FAILED'String
sourceThe data source 'NEW' 'CHANGED' 'IMPLIED' 'FILLED' 'CONVERTED' 'CALCULATED'String
reliabilityThe reliability status 'UNKNOWN' 'QUOTED' 'OBSERVED' 'UNOBSERVED'String
note

Each status value can optionally be suffixed with a ':' and some information about the status, e.g. quality=FAILED:Failed Spike Check of 5%

Curve Entity​

Here are the properties of a curve

NameDescriptionType
_idUnique id for the curve (or object id if this is not the latest version)String
_typeThe type of the entity - always VarCurveString
ondateAn object representing a CurveDateCurveDate
currencyThe currency codeString
unitsThe units codeString
propertiesAn object containing custom dynamic propertiesObject
_objidThe id of the object that this belongs toString
_dataidThe name of the data id in the objectString
_accessThe data access role that this data belongs toString
_objtypeThe object type of the object that this belongs toString
_oidThe id of the calendar - will match _id if this is the latest version of the calendarString
_timestampTimestamp of when this calendar version was createdString(DateTime)
_userThe user id (email) of the user that created this calendar verisionString
_tagA list of version tag names for this calendar versionString[]
_versionThe version number of this calendar versionint
contractsAn array of Contract entitiesContract[]

Contract Entity​

The contract entity represents a single tenor or contract on a forward curve

NameDescriptionType
tenorThe tenor period codeString
valueThe value of this tenorNumeric
statusThe status objectStatus
ondateAn object representing a CurveDateCurveDate
propertiesAn object containing some standard properties and any custom dynamic propertiesObject

The standard properties on a Contract are:

  • absolute - The absolute period code of the tenor
  • relative - The relative period code of the tenor
  • expiry - The expiry or last trading date of the tenor
  • start - The start of delivery if it is a delivered commodity
  • end - The end of delivery if it is a delivered commodity

Examples​

### Get build info
GET https://api.opendatadsl.com/api/data
Authorization: Bearer {{token}}

### Get all public data types
GET https://api.opendatadsl.com/api/data/v1/public?_distinct=_objtype
Authorization: Bearer {{token}}

### Get a public data
GET https://api.opendatadsl.com/api/data/v1/public/%23ECB_FX.EURGBP:SPOT
Authorization: Bearer {{token}}

### Get a time-series range using last(n)
GET https://api.opendatadsl.com/api/data/v1/public/%23ECB_FX.EURGBP:SPOT?_range=last(3)
Authorization: Bearer {{token}}

### Get a time-series range using from(d)
GET https://api.opendatadsl.com/api/data/v1/public/%23ECB_FX.EURGBP:SPOT?_range=from(2021-03-08)
Authorization: Bearer {{token}}

### Get a time-series range using between(d,d)
GET https://api.opendatadsl.com/api/data/v1/public/%23ECB_FX.EURGBP:SPOT?_range=between(2021-02-26,2021-03-01)
Authorization: Bearer {{token}}

### Get a time-series range for a list of data
GET https://api.opendatadsl.com/api/data/v1/public
?_filter={"_objtype":"%23ForeignExchange"}
&_range=last(1)
Authorization: Bearer {{token}}

### Get a time-series range for a list of data using object filtering
GET https://api.opendatadsl.com/api/object/v1/public
?_filter={"_type":"%23ForeignExchange"}
&_profile=SPOT
&_range=last(1)
Authorization: Bearer {{token}}

### Get a time-series range using from(n) with a rule date
GET https://api.opendatadsl.com/api/data/v1/public/%23ECB_FX.EURGBP:SPOT?_range=from(t-D1h0m0s0)
Authorization: Bearer {{token}}

### Get a curve
GET https://api.opendatadsl.com/api/data/v1/private/TUTORIAL_ODSL_CURVE:PREMIUM:2021-07-06
Authorization: Bearer {{token}}

### Get ALL
GET https://api.opendatadsl.com/api/data/v1/public
?_project={"_type":1}
&_sort={"_id":1}
&_limit=-1
Authorization: Bearer {{token}}

### Get data for multiple ids both private and public
GET https://api.opendatadsl.com/api/data/v1/all
?_id=%23ECB_FX.EURGBP:SPOT
&_id=tsobj:SPOT
Authorization: Bearer {{token}}

### Get data for multiple ids both private and public
GET https://api.opendatadsl.com/api/data/v1/all
?_id=%23DCE.AG.CN.A.NO1_SOYBEAN.FUT:OI:2021-11-30
&_id=TUTORIAL_ODSL_CURVE:PREMIUM:2021-07-06
Authorization: Bearer {{token}}

### Get Curve TimeSeries
GET https://api.opendatadsl.com/api/data/v1/public/%23DCE.AG.CN.A.NO1_SOYBEAN.FUT:OI?_tenor=M02
Authorization: Bearer {{token}}

### List curve tenors
GET https://api.opendatadsl.com/api/data/v1/public/%23DCE.AG.CN.A.NO1_SOYBEAN.FUT:SETTLE?_function=list
Authorization: Bearer {{token}}

### Get the options for an ondate
GET https://api.opendatadsl.com/api/data/v1/private/NGE.EUA:OPTIONS:2026-09-16
Authorization: Bearer {{token}}

### Get the latest options
GET https://api.opendatadsl.com/api/data/v1/private/NGE.EUA:OPTIONS:L
Authorization: Bearer {{token}}

### Get the volatility of one option over time
GET https://api.opendatadsl.com/api/data/v1/private/NGE.EUA:OPTIONS:2026M09:85:C:OPTION_VOLATILITY?_range=from(2026-09-01)
Authorization: Bearer {{token}}

### Get the options held for an ondate (a positions view)
GET https://api.opendatadsl.com/api/data/v1/private/NGE.EUA:POSITIONS_VIEW:2026-09-16
Authorization: Bearer {{token}}