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..
Request Equity Data
This article explains how to request Equity data. For the concepts behind each part of a request, see Core Concepts.
Request Overview
Send a POST request to the Investment Details endpoint, using the base URL for your region (Getting Started).
POST /direct-web-services/v1/investments
| Header | Value | Description |
|---|---|---|
Authorization | Bearer {token} | See Authentication. |
Content-Type | application/json | |
Prefer | respond-async | Required. |
The JSON body has the following properties.
| Property | Required | Purpose |
|---|---|---|
investments | Yes | The investments to retrieve. |
views | Yes | The views of data to return. |
startDate, endDate | Time series only | The date range. |
languageId, countryId, currencyId, regionId | No | Request-level filters. |
For the full list of inputs, see API Inputs.
Build Your Request
1: Specify Investments
Use the investments array. Morningstar Performance ID is the default identifier type.
"investments": [
{ "id": "0P0000004Y" },
{ "id": "0P00000046" },
{ "id": "0P00000056" }
]
To use another identifier, set idType on the entry. Accepted types are performanceId (default), isin, fundCode, securityId, cusip, msid, tradingSymbol and industryCode. You can mix types in one request.
"investments": [
{
"id": "US0042391096",
"idType": "isin",
"exchangeCountry": "USA",
"domicile": "USA",
"baseCurrency": "USD"
},
{
"id": "F000015DDK",
"idType": "securityId"
}
]
If an identifier can match more than one investment, narrow it with exchangeCountry, domicile, baseCurrency or exchangeId. See Identifiers. Unmatched identifiers are reported in the results. See Retrieve Investment Details.
2: Specify Views
The views array takes 1 to 3 views, each with a viewId.
- To find valid view IDs, see Get View IDs.
- For package-specific inputs and limits, see Package-Specific Guides.
Package view
"views": [
{ "viewId": "equity-returns" }
]
Dataset view. viewType is mandatory for standard datasets.
"views": [
{
"viewId": "equity-returns-to-date",
"viewType": "dataset"
}
]
View with parameters. Pass parameters as arrays of values.
"views": [
{
"viewId": "quantitative-equity-rating-analysis",
"parameters": {
"quantitativeSmartTextType": ["Moat"]
}
}
]
3: Set a Date Range (Optional)
Use dates only with views that return time series data. Including them with most-recent-data views fails the request.
| Property | Use |
|---|---|
startDate | Start date (YYYY-MM-DD). |
endDate | End date (YYYY-MM-DD). |
4: Set Request-Level Filters (Optional)
These apply to the whole request.
| Property | Use |
|---|---|
languageId | Language for language-dependent data. |
countryId | Country for country-dependent data, as a 3-character ISO 3166-1 code. |
currencyId | Currency for currency-dependent data. |
regionId | Region for style box breakpoints, 1 to 7. |
Send the Request
The following examples request style box data for three investments in the United States region.
Example: Most Recent Data
curl --request POST \
--url "https://www.us-api.morningstar.com/direct-web-services/v1/investments" \
--header "Authorization: Bearer {token}" \
--header "Content-Type: application/json" \
--header "Prefer: respond-async" \
--data '{
"investments": [
{ "id": "0P0000004Y" },
{ "id": "0P00000046" },
{ "id": "0P00000056" }
],
"views": [
{ "viewId": "equity-style-box" }
],
"regionId": "1"
}'
Example: Time Series Data
Same request, with a five-year date range. Only the body is shown.
{
"investments": [
{ "id": "0P0000004Y" },
{ "id": "0P00000046" },
{ "id": "0P00000056" }
],
"views": [
{ "viewId": "equity-style-box" }
],
"startDate": "2020-01-01",
"endDate": "2025-01-01",
"regionId": "1"
}
Read the 202 Response
A valid request returns 202 Accepted with the job details, not data.
{
"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"
}
}
| Property | Description |
|---|---|
jobId | Identifier of the job. |
_links.href | URL to call to check the job status. |
_links.rel, _links.method | Always status and GET. |
metadata.requestId | Identifier of the request. Include it if you contact support. |
metadata.time | Time of the response. |
Retrieve Results
To check the job and retrieve results, see Retrieve Investment Details.
Results
The response has two top-level properties.
| Property | Description |
|---|---|
investments | An array with one object for each investment that returned data. |
metadata | Information about the response: the request ID, the time, and any messages. |
Investments
Each object in investments is one investment. It has the following characteristics.
- Identifiers. The
identifiersobject holds the investment's performance ID. Use it to match the data to the investments in your request. - Data groups. The remaining properties are data groups, named for the data they hold. The groups depend on the views you requested.
- Objects and arrays. 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. In the example above,
profitabilityis an array. - Coded values. Some values are returned as an object with a
valueand acode, for example{ "value": "US Dollar", "code": "USD" }. - Language and country. Data that depends on language or country uses the
languageIdandcountryIdfrom your request. - Time series data. Time series data is returned at the data group level.
Metadata
See Work with Results for information about metadata and metadata messages.
Example Results
Most Recent Data
{
"investments": [
{
"consensusRawRecommendations": [
{
"asOfDate": "2026-10-23",
"buy": 2,
"hold": 0,
"meanLabel": "Buy",
"meanRating": 4.6667,
"noOpinion": 0,
"outPerform": 1,
"sell": 0,
"underPerform": 0
}
],
"identifiers": {
"performanceId": "0P000000M6"
}
}
],
"metadata": {
"requestId": "d9609c76-d9ab-411f-8e24-c84fb7483ca0",
"time": "2026-10-26T12:09:51.3376067Z"
}
}
Time Series Data
{
"investments": [
{
"consensusRawRecommendations": [
{
"asOfDate": "2025-01-01",
"buy": 1,
"hold": 1,
"meanLabel": "Hold",
"meanRating": 3.3333,
"noOpinion": 0,
"outPerform": 0,
"sell": 0,
"underPerform": 1
},
{
"asOfDate": "2024-12-31",
"buy": 1,
"hold": 1,
"meanLabel": "Hold",
"meanRating": 3.3333,
"noOpinion": 0,
"outPerform": 0,
"sell": 0,
"underPerform": 1
},
{
"asOfDate": "2024-12-30",
"buy": 1,
"hold": 1,
"meanLabel": "Hold",
"meanRating": 3.3333,
"noOpinion": 0,
"outPerform": 0,
"sell": 0,
"underPerform": 1
},
{
"asOfDate": "2024-12-27",
"buy": 1,
"hold": 1,
"meanLabel": "Hold",
"meanRating": 3.3333,
"noOpinion": 0,
"outPerform": 0,
"sell": 0,
"underPerform": 1
},
{
"asOfDate": "2024-12-26",
"buy": 1,
"hold": 1,
"meanLabel": "Hold",
"meanRating": 3.3333,
"noOpinion": 0,
"outPerform": 0,
"sell": 0,
"underPerform": 1
},
{
"asOfDate": "2024-12-25",
"buy": 1,
"hold": 1,
"meanLabel": "Hold",
"meanRating": 3.3333,
"noOpinion": 0,
"outPerform": 0,
"sell": 0,
"underPerform": 1
},
{
"asOfDate": "2024-12-24",
"buy": 1,
"hold": 1,
"meanLabel": "Hold",
"meanRating": 3.3333,
"noOpinion": 0,
"outPerform": 0,
"sell": 0,
"underPerform": 1
},
{
"asOfDate": "2024-12-23",
"buy": 1,
"hold": 1,
"meanLabel": "Hold",
"meanRating": 3.3333,
"noOpinion": 0,
"outPerform": 0,
"sell": 0,
"underPerform": 1
},
{
"asOfDate": "2024-12-20",
"buy": 1,
"hold": 1,
"meanLabel": "Hold",
"meanRating": 3.3333,
"noOpinion": 0,
"outPerform": 0,
"sell": 0,
"underPerform": 1
},
{
"asOfDate": "2024-12-19",
"buy": 1,
"hold": 1,
"meanLabel": "Hold",
"meanRating": 3.3333,
"noOpinion": 0,
"outPerform": 0,
"sell": 0,
"underPerform": 1
}
],
"identifiers": {
"performanceId": "0P000000M6"
}
}
],
"metadata": {
"requestId": "2e8c5049-d100-4fb3-bf5c-1cfc1b14e26d",
"time": "2026-10-26T12:11:40.9413298Z"
}
}