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
HeaderValueDescription
AuthorizationBearer {token}See Authentication.
Content-Typeapplication/json
Preferrespond-asyncRequired.

The JSON body has the following properties.

PropertyRequiredPurpose
investmentsYesThe investments to retrieve.
viewsYesThe views of data to return.
startDate, endDateTime series onlyThe date range.
languageId, countryId, currencyId, regionIdNoRequest-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.

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.

PropertyUse
startDateStart date (YYYY-MM-DD).
endDateEnd date (YYYY-MM-DD).

4: Set Request-Level Filters (Optional)

These apply to the whole request.

PropertyUse
languageIdLanguage for language-dependent data.
countryIdCountry for country-dependent data, as a 3-character ISO 3166-1 code.
currencyIdCurrency for currency-dependent data.
regionIdRegion 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"
  }
}
PropertyDescription
jobIdIdentifier of the job.
_links.hrefURL to call to check the job status.
_links.rel, _links.methodAlways status and GET.
metadata.requestIdIdentifier of the request. Include it if you contact support.
metadata.timeTime of the response.

Retrieve Results

To check the job and retrieve results, see Retrieve Investment Details.

Results

The response has two top-level properties.

PropertyDescription
investmentsAn array with one object for each investment that returned data.
metadataInformation 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 identifiers object 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, profitability is an array.
  • Coded values. Some values are returned as an object with a value and a code, for example { "value": "US Dollar", "code": "USD" }.
  • Language and country. Data that depends on language or country uses the languageId and countryId from your request.
  • Time series data. Time series data is returned at the data group level.
Time Series Data

Time series data availability is view specific. See the data dictionary for details.

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"
    }
}