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.
| Identifier | idTypes Value |
|---|---|
| Morningstar Performance ID | performanceId (default) |
| Morningstar Security ID | securityId |
| Morningstar ID (MSID) | msid |
| ISIN | isin |
| CUSIP | cusip |
| Trading symbol | tradingSymbol |
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.
| Parameter | Description | Example |
|---|---|---|
baseCurrency | The base currency of the investment, as ISO 4217 currency codes. | USD,USD |
domicile | The domicile of the investment, as 3-character ISO 3166-1 country codes. | ,USA,,USA |
exchangeCountry | The exchange country, as 3-character ISO 3166-1 country codes. | ,USA |
exchangeId | The 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.