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.

PropertyDescription
investmentsAn array with one object for each investment that returned data.
metadataInformation about the request, including warnings about identifiers that returned no results.

Each object in investments contains the following properties.

PropertyDescription
identifiersThe identifiers of the investment, including the one you passed in the request.
timeSeriesThe time series for the requested data point.
metadataThe lookup values used to find the investment: exchangeCountry, domicile and baseCurrency.

Each timeSeries object contains the following properties.

PropertyDescription
categoriesThe category of the data point, for example performance.
dataPointThe data point name, for example daily-price.
performanceTypeThe performance type used in the calculation: total, market or gross. Present for computed data points.
dataThe 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.

PropertyDescription
investmentsThe identifiers that returned no results. Each entry has the id you passed and its idType.
typeThe message type. The value is Warning.
messageA description of the issue.
codeThe warning code.

The following warning codes can be returned.

CodeMessageWhat to Do
404.common.125Lookup : Invalid investments.Check the identifier values and the lookup filters in the request.
200.common.126Lookup : Multiple identifier match found for the investments.Add lookup filters to narrow each identifier to one investment.
200.common.128Duplicate 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.

PropertyDescription
requestIdThe unique identifier of the request. Include it if you contact support.
timeThe 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.

PropertyDescription
statusCodeThe HTTP status code, such as 400 or 500.
errorCodeAn identifier for the type of error.
messageA description of the problem.
requestIdThe 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.