Time Series API

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

Specify Investments

The ids path parameter identifies the investments you want data for. You can pass Morningstar Performance IDs directly, or pass other identifiers and let the API look up the matching investment. This page explains how to do both.

Pass Investments in the Path

Pass identifiers in the path as a comma-separated list. A request can include a maximum of 25 investments.

GET /direct-web-services/time-series/v1/performance/daily-price/0P00000CSY,0P00002Y8D

The Morningstar Performance ID is the default identifier type. When every value is a Performance ID, you don't need any other parameter to identify the investments.

Identifier Types

The API accepts the following identifier types. Use the idTypes parameter to tell the API which type each value is.

IdentifieridTypes Value
Morningstar Performance IDperformanceId (default)
Morningstar Security IDsecurityId
Morningstar ID (MSID)msid
ISINisin
CUSIPcusip
Trading symboltradingSymbol

The response returns the identifier of each investment in identifiers, so you can match results to the values you sent. See Work with Results.

Mix Identifier Types

idTypes is a comma-separated list that lines up with ids by position. Follow these rules.

  • List one type for each value in ids, in the same order.
  • Leave an entry empty to skip a position. Empty entries default to performanceId.
  • Omit trailing commas after the last non-empty value.

The following request queries three investments. The first is an ISIN, the second is a trading symbol, and the third is a Performance ID, so its entry is left out.

GET /direct-web-services/time-series/v1/performance/daily-price/US2562191062,MDLOX,0P00006W6Q
  ?idTypes=isin,tradingSymbol

Narrow the Lookup

When you pass an identifier that can match more than one investment, such as a trading symbol listed on several exchanges, use lookup filters to choose the right one. The filters work the same way as idTypes: each is a comma-separated list that lines up with ids by position.

ParameterDescriptionExample
baseCurrencyThe base currency of the investment, as ISO 4217 currency codes.USD,USD
domicileThe domicile of the investment, as 3-character ISO 3166-1 country codes.,USA,,USA
exchangeCountryThe exchange country, as 3-character ISO 3166-1 country codes.,USA
exchangeIdThe exchange, as exchange IDs.,EX$$$$XMEX,,EX$$$$XNAS

For example, with ids=id1,id2,id3,id4, the value domicile=,USA,,USA applies the domicile filter to the second and fourth investments only.

The following request filters the lookup for the trading symbol by exchange country and base currency. The empty first entries skip the ISIN.

GET /direct-web-services/time-series/v1/performance/daily-price/US2562191062,MDLOX
  ?idTypes=isin,tradingSymbol
  &baseCurrency=,USD
  &exchangeCountry=,USA

The lookup values that were applied are returned in the metadata of each investment in the response.

Use Category IDs

You can also pass category IDs. Set the matching idTypes value to performanceId or securityId, and URL-encode the ID. For example, the category ID LC00002226;CA]FO is passed as LC00002226;CA%5DFO.

GET /direct-web-services/time-series/v1/performance/daily-price/LC00002226;CA%5DFO
  ?idTypes=performanceId

Handle Unmatched Investments

If the API can't match an identifier and its lookup filters to an investment, it returns no data for that investment. The unmatched values are listed in metadata.messages in the response, so the request can still succeed for the investments that did match. See Work with Results.

If an investment is unexpectedly missing, check the identifier, its idTypes entry, and whether a lookup filter is excluding it. See Troubleshooting.