---
title: "Troubleshooting"
description: "Diagnose and fix common Time Series API problems, from authentication and request errors to missing investments and unexpected values."
url: "https://developer-beta.morningstar.com/time-series-api/troubleshooting"
image: "https://developer-beta.morningstar.com/_og/d/c_Ocean.takumi,title_~VHJvdWJsZXNob290aW5nIHwgVGltZSBTZXJpZXMgQVBJ,description_~RGlhZ25vc2UgYW5kIGZpeCBjb21tb24gVGltZSBTZXJpZXMgQVBJIHByb2JsZW1zLCBmcm9tIGF1dGhlbnRpY2F0aW9uIGFuZCByZXF1ZXN0IGVycm9ycyB0byBtaXNzaW5nIGludmVzdG1lbnRzIGFuZCB1bmV4cGVjdGVkIHZhbHVlcy4,props_eyJ0aGVtZSI6eyJtb2RlIjoibGlnaHQiLCJjb2xvcnMiOnsicHJpbWFyeSI6IiMwMDAwMDAifX19,p_Ii90aW1lLXNlcmllcy1hcGkvdHJvdWJsZXNob290aW5nIg,s_uRxesucZOFVh-LYc.png"
---

-   [APIs](https://developer-beta.morningstar.com/apis)
-   [API Catalog](https://developer-beta.morningstar.com/api-catalog)
-   [API Assistant MCP Server](https://developer-beta.morningstar.com/api-assistant-mcp)
-   [Guides](https://developer-beta.morningstar.com/api-guides)
-   [Trial Access](https://developer-beta.morningstar.com/trial-access)

# Time Series API

Build Time Series APIs into your digital experience for quick investment and earnings summaries.

# Troubleshooting

[View Markdown](https://developer-beta.morningstar.com/time-series-api/troubleshooting.md)[Download Markdown](https://developer-beta.morningstar.com/time-series-api/troubleshooting.md)

Use this page to diagnose a failed request or a response that doesn't contain what you expected. Each issue lists the likely causes and how to fix them. For the meaning of a specific error code, see [Errors](https://developer-beta.morningstar.com/time-series-api/error-messages).

## [Before You Start](#before-you-start)

Most problems can be traced to one of the following. Check them first.

-   The `Authorization` header contains `Bearer {token}`, with a token less than 60 minutes old.
-   The path follows the pattern `/direct-web-services/time-series/v1/{category}/{data-point}/{ids}`, and the category and data point exist.
-   The request contains no more than 25 investments.
-   Dates are in `yyyy-MM-dd` format.
-   `frequency` is one of `daily`, `weekly`, `monthly`, `quarterly` or `annually`.
-   The time range is within the lookback limit for the frequency.

## [Reading an Error Response](#reading-an-error-response)

A failed request returns a `statusCode`, an `errorCode`, a `message` and a `requestId`. The `message` describes the problem, often naming the parameter or data point involved.

```json
{
  "statusCode": 400,
  "errorCode": "400.timeSeries.009",
  "message": "Invalid frequency 'm' for datapoint 'daily-closing-price'.",
  "requestId": "c63e7f6c-b52d-42c3-9d1b-4a4b4ac05f3c"
}
```

Use the `errorCode` to look up the issue on the [Errors](https://developer-beta.morningstar.com/time-series-api/error-messages) page. Keep the `requestId` in case you need to contact support.

## [Authentication and Access](#authentication-and-access)

Token Request Fails

A `401` response from `POST /token/oauth` means the credentials were rejected.

-   Use the Client ID and Client Secret issued to an application in your portal profile. These are separate from the username and password you use to log in to Morningstar for Developers.
-   Send the credentials as HTTP Basic authentication, using a Base64-encoded `clientId:clientSecret` pair.
-   Check for extra spaces or line breaks in the values when you copy them.

See [Getting Started](https://developer-beta.morningstar.com/time-series-api/getting-started).

---

401 Unauthorized

The token is missing, invalid or expired.

-   Check that the `Authorization` header is present and uses the format `Bearer {token}`.
-   Tokens expire after 60 minutes. Request a new token from `POST /token/oauth`, then retry the request.
-   In long-running jobs, refresh the token before it expires, and retry any request that returns `401` after refreshing.

---

Investments Return No Data on a Trial Account

Trial responses are limited to a sample universe, so investments outside it return no data.

-   Check `metadata.messages` in the response to see which identifiers returned no results.
-   Try investments that are in the sample universe.
-   For full data coverage and production access, contact Morningstar sales.

---

## [Request Errors](#request-errors)

400 Bad Request

The request is invalid. The `message` in the response describes the problem.

-   Read the `message` and `errorCode`, then find the parameter it names.
-   Check the parameters against the [API Inputs](https://developer-beta.morningstar.com/time-series-api/api-inputs) reference.
-   If you can't find the cause, contact support and include the `requestId`.

---

Invalid Frequency

The `frequency` value isn't supported for the request, for example `Invalid frequency 'm' for datapoint 'daily-closing-price'`.

-   Use one of `daily`, `weekly`, `monthly`, `quarterly` or `annually`. Values such as `m` or `annual` aren't accepted.
-   Check that the data point supports the frequency you chose. The message names the data point.

---

Invalid Date Format

`startDate` and `endDate` must be in `yyyy-MM-dd` format, for example `2024-01-31`. Check for missing leading zeros, a different separator or a day and month in the wrong order.

---

Too Many Investments

A request can include a maximum of 25 investments. Split larger lists across several requests.

---

Time Range Is Beyond the Lookback Limit

The maximum lookback depends on the frequency and the observation type.

| Frequency | Univariate Data Points | Multivariate Data Points |
| :-------- | :--------------------- | :----------------------- |
| daily     | 12 months              | 6 months                 |
| weekly    | 60 months              | 6 months                 |
| monthly   | 120 months             | 6 months                 |
| quarterly | 600 months             | 6 months                 |
| annually  | 600 months             | 6 months                 |

Split a longer range into several requests, or use a lower frequency. This applies to `sinceInception` as well, which returns data from inception or from the maximum supported lookback.

---

Wrong Category or Data Point in the Path

The category and data point in the path must match an endpoint.

-   Check the spelling of both. Data point names are lowercase and hyphenated.
-   Check that the data point exists in the category you used. Some data points are in more than one category, and others are in only one.
-   See [Choose a Data Point](https://developer-beta.morningstar.com/time-series-api/choose-a-data-point) for how to find the right endpoint.

---

Since Inception Isn't Supported for Multivariate Data Points

`sinceInception` doesn't work with multivariate data points. Currently the only one is `daily-ohlcv`. Use `startDate` and `endDate` or `timePeriod` and `timePeriodUnit` instead, and keep the range within 6 months, which is the multivariate lookback limit.

---

## [Unexpected Results](#unexpected-results)

An Investment Is Missing From the Response

The request succeeded but one of your investments has no data. Unmatched investments are listed in `metadata.messages`, and the `investments` array contains only the ones that returned data.

1.  Check `metadata.messages.investments` for the identifier and its `idType`.
2.  Check the identifier for typos.
3.  Check that the `idTypes` entry matches the identifier. The list lines up with `ids` by position, so a missing entry shifts the types.
4.  Check whether a lookup filter, such as `domicile` or `exchangeCountry`, is excluding the investment.
5.  Try a different identifier for the same investment. The Morningstar Performance ID is the most precise.

See [Work with Results](https://developer-beta.morningstar.com/time-series-api/work-with-results#handle-unmatched-investments).

---

The Wrong Investment Was Returned

An identifier such as a trading symbol can match more than one investment.

-   Add lookup filters, such as `exchangeCountry`, `domicile`, `baseCurrency` or `exchangeId`, to narrow the match.
-   Check the `metadata` of each investment in the response to see the lookup values that were applied.
-   Use a Performance ID, which identifies a single investment.

See [Specify Investments](https://developer-beta.morningstar.com/time-series-api/specify-investments#narrow-the-lookup).

---

The Time Range Isn't What I Set

If you combine time range settings, some override others.

-   `sinceInception` overrides `timePeriod`, `timePeriodUnit`, `startDate` and `endDate`.
-   `timePeriod` and `timePeriodUnit` override `startDate` and `endDate`.

Remove the settings you don't want, so that only one approach is used. See [Set the Time Range](https://developer-beta.morningstar.com/time-series-api/set-the-time-range#which-setting-wins).

---

The Series Starts Later Than the Start Date

The data for an investment can start later than the `startDate` you requested.

-   The investment may have been launched after `startDate`.
-   If `applyEarliestCommonDate` is `true`, every series starts at the latest inception date among the requested investments.
-   Set `applyTrackRecordExtension` to `true` to extend an investment's history with the performance of a qualified, older investment, if that suits your use.

See [Set the Time Range](https://developer-beta.morningstar.com/time-series-api/set-the-time-range#align-start-dates).

---

Investments Start on Different Dates

By default each time series starts at the earliest date available for its own investment. To make all series start on the same date, set `applyEarliestCommonDate` to `true`. To also consider restructure dates when finding that date, set `applyRestructureDate` to `true`, which works only together with `applyEarliestCommonDate`.

---

Fewer Observations Than Expected

-   Check `frequency`. The default is `daily`, and lower frequencies return fewer observations.
-   Check that the range is within the lookback limit for the frequency.
-   Check whether the investment has data for the whole range.

---

Values Are in an Unexpected Currency

By default, data is returned in the investment's base currency (`currencyId` is `BAS`). Set `currencyId` to the currency you want, for example `USD`. See [Request Time Series Data](https://developer-beta.morningstar.com/time-series-api/request-time-series-data#output-currency).

---

Computed Results Use a Different Performance Type

A computed data point uses `total` performance by default. If you pass two `performanceType` values and the first returns no data, the second is used.

-   Check the `performanceType` in the `timeSeries` object of the response to see which type was applied.
-   Pass only one value if you don't want a fallback.

See [Configure Computed Data Points](https://developer-beta.morningstar.com/time-series-api/configure-computed-data-points#performance-type).

---

Euro Results Before 1999

When `currencyId` is `EUR` and `startDate` is before 1999, set `preCurrency` for computed data points so that earlier periods can be converted from the original currency. See [Configure Computed Data Points](https://developer-beta.morningstar.com/time-series-api/configure-computed-data-points#pre-euro-currency-conversion).

---

The Data Has a Different Shape Than Expected

Most data points return a `date` and a single `value`. `daily-ohlcv` returns several fields for each date. Use the `dataPoint` value in each `timeSeries` object to choose how to parse `data`. See [Work with Results](https://developer-beta.morningstar.com/time-series-api/work-with-results#identify-the-observation-type).

---

## [Still Stuck?](#still-stuck)

-   Check the [Errors](https://developer-beta.morningstar.com/time-series-api/error-messages) page for the full list of error codes.
-   Browse the [FAQs](https://developer-beta.morningstar.com/time-series-api/faqs).
-   Review how requests are built in [Request Time Series Data](https://developer-beta.morningstar.com/time-series-api/request-time-series-data).
-   If you contact support, include the `requestId` from the response.