Time Series API
Build Time Series APIs into your digital experience for quick investment and earnings summaries.
Getting Started
The Time Series API provides the history behind Morningstar's investment data, showing how an investment's returns, prices, ratings, fees, and sustainability scores have changed over time. Applications request a date range and receive a dated series of values, ready to chart, compare, or analyze. This guide covers the workflow for making your first call and where to go when something goes wrong.
Workflow
Get an access token
The API uses OAuth 2.0 to authenticate users. Before you can call any endpoint, you must authenticate your account and get an access token.
See the Authentication article for information about obtaining and using access tokens.
Get investment identifiers
The API uses Morningstar Performance IDs as the primary identifier. Use the Universe API to retrieve the performance IDs for the investments in your entitled universe. A single request can include up to 25 investments.
If you hold other identifiers, such as ISINs, CUSIPs, or trading symbols, the API can look up the matching performance IDs for you. See the Identifiers article for the identifiers the API supports.
Choose a data point endpoint
The API has a dedicated endpoint for each data point, such as daily price or monthly return, organized by category: GET /direct-web-services/time-series/v1/{category}/{data-point}/{ids}. Choose the endpoint for the data you need.
Most data points are standard and return stored data. Computed data points, such as return and rolling-return, calculate values at request time and need extra parameters. See the Core Concepts page for information about how standard and computed data points differ.
Request data
Pass your investment identifiers in the path, separated by commas, and set a time range. Every request needs a time range, which you define in one of three ways: a start and end date, a relative period such as the last 12 months, or since inception. Send your access token in the Authorization header.
Limits apply to the number of investments per request and to how far back you can look, depending on the frequency of the data. See API Requests for the request inputs and limits.
Check the response
Results are grouped by investment, and each investment contains one time series per requested data point. Always check metadata.messages in the response. A 200 status code doesn't guarantee that every investment returned data, because identifiers that can't be matched to a performance ID are listed there instead.
See the Work with Results page for the response structure and the warning codes you may see.
Managing Issues
If a request fails or returns unexpected results:
- Check the Error Messages page to find out what an error code or message means.
- See Troubleshooting for help with common issues, such as missing data or unexpected responses.
- Browse the FAQs for answers to frequently asked questions.