Time Series API
Build Time Series APIs into your digital experience for quick investment and earnings summaries.
Work with Results
A successful request returns a JSON object with the time series for each investment that returned data, plus metadata about the request. This page explains how to read the response, how to parse the observations, and how to check for investments that returned no data.
Response Structure
The response has two top-level properties.
| Property | Description |
|---|---|
investments | An array with one object for each investment that returned data. |
metadata | Information about the request, including warnings about identifiers that returned no results. |
Each object in investments contains the following properties.
| Property | Description |
|---|---|
identifiers | The identifiers of the investment, including the one you passed in the request. |
timeSeries | The time series for the requested data point. |
metadata | The lookup values used to find the investment: exchangeCountry, domicile and baseCurrency. |
Each timeSeries object contains the following properties.
| Property | Description |
|---|---|
categories | The category of the data point, for example performance. |
dataPoint | The data point name, for example daily-price. |
performanceType | The performance type used in the calculation: total, market or gross. Present for computed data points. |
data | The array of observations. Its shape depends on the data point. |
The following response is for a request for daily-price with two investments, where one identifier returned no data.
{
"investments": [
{
"identifiers": {
"performanceId": "0P00000CSY"
},
"timeSeries": {
"categories": ["performance"],
"dataPoint": "daily-price",
"data": [
{ "date": "2025-01-02", "value": 0.71234 },
{ "date": "2025-01-03", "value": 0.72108 }
]
},
"metadata": {
"exchangeCountry": "USA",
"domicile": "USA",
"baseCurrency": "USD"
}
}
],
"metadata": {
"messages": {
"investments": [
{ "id": "0P000PPP6Q", "idType": "performanceId" }
],
"type": "Warning",
"message": "Lookup : Invalid investments.",
"code": "404.common.125"
},
"requestId": "f1a94c72-3d08-4b61-9e21-2c85da673f10",
"time": "2025-10-30T14:25:47.883412Z"
}
}
Identify the Observation Type
The shape of the data array depends on the data point. Use the dataPoint value in each timeSeries object to decide how to parse it.
Univariate observations are returned by most data points. Each observation contains a date and a single value.
{
"data": [
{ "date": "2025-01-31", "value": 0.02341 },
{ "date": "2025-02-28", "value": -0.01204 }
]
}
Multivariate observations are returned by daily-ohlcv only. Each observation contains a date and separate fields for the open, high, low and closing price and the volume.
{
"data": [
{
"date": "2025-01-02",
"dailyOpenPrice": 5.17,
"dailyHighPrice": 5.21,
"dailyLowPrice": 5.14,
"dailyClosingPrice": 5.19,
"dailyVolume": 130918
}
]
}
You choose the observation type by choosing the data point, not through a request parameter. For more detail, see Core Concepts.
Match Results to Investments
Investments that can't be matched don't return data, so the investments array may contain fewer entries than the values you sent in ids. Match each result to your request using the values in identifiers, not the position of the entry in the array.
Handle Unmatched Investments
A 200 status code doesn't guarantee that every requested investment returned data. If the API can't match an identifier to an investment, it returns no data for that investment and lists it in metadata.messages. Always check this object when you process a response.
metadata.messages contains the following properties.
| Property | Description |
|---|---|
investments | The identifiers that returned no results. Each entry has the id you passed and its idType. |
type | The message type. The value is Warning. |
message | A description of the issue. |
code | The warning code. |
The following warning codes can be returned.
| Code | Message | What to Do |
|---|---|---|
404.common.125 | Lookup : Invalid investments. | Check the identifier values and the lookup filters in the request. |
200.common.126 | Lookup : Multiple identifier match found for the investments. | Add lookup filters to narrow each identifier to one investment. |
200.common.128 | Duplicate investments found in the request. | Remove duplicate identifiers from the request. |
For how identifiers and lookup filters are matched, see Specify Investments.
Response Metadata
The top-level metadata object also contains the following properties.
| Property | Description |
|---|---|
requestId | The unique identifier of the request. Include it if you contact support. |
time | The time the response was returned. |
Handle Errors
A request that fails returns an error response instead of time series data. The response contains the following properties.
| Property | Description |
|---|---|
statusCode | The HTTP status code, such as 400 or 500. |
errorCode | An identifier for the type of error. |
message | A description of the problem. |
requestId | The unique identifier of the request. |
{
"statusCode": 400,
"errorCode": "400.timeSeries.009",
"message": "Invalid frequency 'm' for datapoint 'daily-closing-price'.",
"requestId": "c63e7f6c-b52d-42c3-9d1b-4a4b4ac05f3c"
}
For the meaning of each error and how to resolve it, see Errors and Troubleshooting.