Investment Details Feed API
Get detailed profile data for up to 250 investments in a single request, drawing on Morningstar's fundamental, reference, and historical data..
Core Concepts
The Investment Details Feed API retrieves detailed investment data in bulk. You choose the investments and the views of data that you want, submit one request, and collect the results when they are ready. This page explains the terms used throughout the guide, so that requests and responses are easier to build and read.
How the Feed Works
The API is asynchronous. A request isn't answered with data. It is accepted for processing, and you collect the results afterwards.
- Submit a request. Send a
POSTrequest with the investments and views you want, and thePrefer: respond-asyncheader. The API accepts the request and returns a202response with ajobIdand a link to check the status of the job. - Check the job. Use the link in the response to check the status of the job until it is complete.
- Retrieve the results. When the job is complete, retrieve the results with their result ID.
{
"jobId": "16bf1a7a-c883-4424-8810-2f4e9d244d40",
"_links": {
"href": "https://www.us-api.morningstar.com/dynamic-services-apis/jobs/16bf1a7a-c883-4424-8810-2f4e9d244d40",
"rel": "status",
"method": "GET"
},
"metadata": {
"requestId": "c63e7f6c-b52d-42c3-9d1b-4a4b4ac05f3c",
"time": "2025-10-02T10:54:36.9161062Z"
}
}
The Prefer header is required. If you leave it out, or set it to anything but respond-async, the request fails.
For how to build and send requests, see the Investment Details section. To collect the results, see Retrieve Investment Details.
Views and View Types
Data is requested by view. A view is a predefined set of data points with a unique identifier, the viewId, that you use to specify the data the API returns.
Each view in a request has a viewId, and optionally a viewType and parameters.
| Property | Description |
|---|---|
viewId | The view to retrieve. Required. Standard view IDs are the names of packages. A view that was defined for your organization uses the ID that was issued to you. |
viewType | The type of view. The default is package. |
parameters | Extra settings that narrow the data returned by the view. See View Parameters. |
The view types are:
| View Type | Description |
|---|---|
package | A standard Morningstar data package. |
dataset | A subset of the data points in a standard package. |
ddaDataset | A set of data points defined by a client in Direct Data Access. It can contain data points from different standard packages. |
Access to data is entitled at package level, so you can request the views in the packages you are licensed for. Use the views endpoint to list them, and the view definition endpoint to see the data points that a view contains. See Views.
View Parameters
Some views take parameters that refine the data they return. Parameters are passed in the parameters object of the view, as arrays of values.
| Parameter | What It Filters |
|---|---|
reportType | Financial statements by report type, such as originally reported or restated. |
period | Financial statements by the period they cover, such as annual or a quarter. |
numberOfMonths | Financial statements by the length of the period, in months. |
segmentType | Segment data by segment type, such as business or geographic. |
addressType | Company addresses by type, such as headquarters or registered office. |
ownerTypeGroup | Ownership data by the type of owner. |
shareType | Share data by share type, such as common or preferred. |
holdingsView | Portfolio holdings data by the size of the holdings view: Full, Top25 or Top10. |
quantitativeSmartTextType | Quantitative smart text by type: Moat or Valuation. |
Each parameter applies only to certain views. A parameter that is sent for a view that it doesn't apply to is ignored. The package-specific guides list the parameters for each view. See API Inputs for the accepted values.
Investments and Lookup
The investments array lists the investments to retrieve, from 1 to 250. Each entry has an id and, optionally, an idType and lookup details.
| Property | Description |
|---|---|
id | The investment identifier. Required. |
idType | The type of identifier. The default is performanceId. |
exchangeCountry, domicile, baseCurrency, exchangeId | Lookup details that narrow the match when an identifier can match more than one investment. |
The Morningstar Performance ID is the primary identifier. Other identifier types are looked up for you. See the Identifiers article for more about lookup.
Request-Level Settings
Some settings apply to the request as a whole, not to a single view.
| Property | Description |
|---|---|
startDate, endDate | The date range for views that return time series data, as yyyy-MM-dd. |
languageId | The language for language-dependent data. The default is ENG. |
countryId | The country for country-dependent data, as a 3-character ISO 3166-1 code. The default is USA. |
regionId | The region used for style box breakpoints, from 1 to 7. |
portfolioDate | The date of the portfolio for the portfolio holdings views. If you leave it out, the most recent data is returned. |
The view definition shows whether each data point is language, country or currency dependent.
Delta Loads
A full load retrieves all the data for the investments and views you request. A delta load retrieves only the data that has changed since a time that you give. Delta loads let you keep a copy of the data current, without retrieving everything each time.
- Add
deltaStartTimeto a request to ask for the changes since that time. - Set
includeUnchangedDatato say how much of each changed row to return. When it istrue, each changed row is returned in full. When it isfalse, each changed row contains only the fields that changed. - The delta dates endpoint tells you when data points changed, so that you know whether a delta load is needed.
Delta loads currently apply to the equity-financials view only. See Delta Loads.
Results
The results contain one object for each investment, and metadata about the request.
{
"investments": [
{
"identifiers": {
"performanceId": "0P0000004Y"
},
"companyInformation": {
"companyId": "0C00000981",
"companyStatus": { "value": "Public", "code": "U" },
"legalName": "Aluf Holdings Inc"
},
"trailingReturn": [
{
"trailingReturnAsOfDate": "2025-10-21",
"trailing1MonthReturn": -32.515337,
"trailing1YearReturn": -44.723618
}
]
}
],
"metadata": {
"requestId": "dde185a9-2c21-4ed7-b749-09e4431e1a05",
"time": "2025-11-07T16:06:46.3516162Z"
}
}
- Identifiers. Each investment has an
identifiersobject with its performance ID. - Data groups. The data is organized into groups, named for the data they hold, such as
companyInformationandtrailingReturn. A group is an object when there is one record, and an array when there can be several, such as time series values or several reporting periods. - Coded values. Some values are returned as an object with a
valueand acode, for example{ "value": "Public", "code": "U" }. - Metadata. The
metadataobject has therequestId, thetime, andmessagesabout investments or data points that couldn't be returned. Portfolio holdings views also return the portfolio date and currency. Checkmessagesin every response.
See Retrieve Investment Details.
Request Limits
| Limit | Value | Error |
|---|---|---|
| Investments per request | 1 to 250 | 413.investmentDetailsAsync.007 |
| Views per request | 1 to 3 | 413.investmentDetailsAsync.008 |
| Time series date range | Up to 60 months between startDate and endDate | 413.investmentDetailsAsync.009 |
| Portfolio holdings views | full-look-through-portfolio-holdings and full-portfolio-holdings-month-end-or-quarter-end-most-recent must each be submitted alone | 400.investmentDetailsAsync.019 |
| Equity financials | The equity-financials view must be the only view in the request |
For the full list of inputs, see API Inputs. For errors, see Error Messages.