FactSet Open Risk API

Through this API one can get a comprehensive access to factor-based linear risk analytics engine, offering flexible and powerful risk analyses with full capability.

OpenAPI Specification

open-risk-openapi-original.yml Raw ↑
openapi: 3.0.3
info:
  title: Factset Open Risk API
  description: >-
    Service to calculate parametric linear risk statistics and generate risk
    model asset identifier mappings.
  version: 1.24.0
  contact:
    name: FactSet Research Systems
    email: [email protected]
    url: https://developer.factset.com/contact
  license:
    name: Apache License, Version 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0
tags:
  - name: Linear
servers:
  - url: https://api.factset.com/analytics/openrisk
paths:
  /linear/{version}/riskmodels:
    get:
      summary: Factset Get available risk models
      description: >-
        Get the list of available risk models, including their respective model
        codes required for use with other routes.
      operationId: listRiskModels
      tags:
        - Linear
      parameters:
        - $ref: '#/components/parameters/VersionPath'
      responses:
        '200':
          $ref: '#/components/responses/ListRiskModelsSuccess'
        '401':
          $ref: '#/components/responses/MissingOrInvalidAuthentication'
        '404':
          $ref: '#/components/responses/EndpointNotFound'
        '429':
          $ref: '#/components/responses/RateLimitReached'
        '500':
          $ref: '#/components/responses/InternalServerErrorJsonOnly'
  /linear/{version}/riskmodels/{modelCode}:
    get:
      summary: Factset Get risk model details
      description: >-
        Get the meta data of the risk model for the corresponding modelCode.
        modelCode can be obtained via '/linear/{version}/riskmodels/' route.
      operationId: riskModelMetadata
      tags:
        - Linear
      parameters:
        - $ref: '#/components/parameters/VersionPath'
        - $ref: '#/components/parameters/RiskModelCodePath'
      responses:
        '200':
          $ref: '#/components/responses/RiskModelDetailsSuccess'
        '401':
          $ref: '#/components/responses/MissingOrInvalidAuthentication'
        '404':
          $ref: '#/components/responses/EndpointNotFound'
        '429':
          $ref: '#/components/responses/RateLimitReached'
        '500':
          $ref: '#/components/responses/InternalServerErrorJsonOnly'
  /linear/{version}/stats:
    get:
      summary: Factset Get available risk statistics details
      description: >-
        All base risk statistic names and their respective support and/or
        requirement for certain name-settings statistics options (such as:
        correlated specific risk, covariance isolation method, etc.), available
        levels, and security group calculation methodology. When
        'securityGroupMethod' is 'statSpecific', please refer to statistics
        documentation service for more information.
      operationId: stats
      tags:
        - Linear
      parameters:
        - $ref: '#/components/parameters/VersionPath'
      responses:
        '200':
          $ref: '#/components/responses/ListRiskStatisticsDetails'
        '401':
          $ref: '#/components/responses/MissingOrInvalidAuthentication'
        '404':
          $ref: '#/components/responses/EndpointNotFound'
        '429':
          $ref: '#/components/responses/RateLimitReached'
  /linear/{version}/stats-names-only:
    get:
      summary: Factset Get available risk statistics names
      description: >-
        All available risk statistic names including statistics names containing
        risk statistics options such as CSR (correlated specific risk)
      operationId: statsNamesOnly
      tags:
        - Linear
      parameters:
        - $ref: '#/components/parameters/VersionPath'
      responses:
        '200':
          $ref: '#/components/responses/ListRiskStatisticsNames'
        '401':
          $ref: '#/components/responses/MissingOrInvalidAuthentication'
        '404':
          $ref: '#/components/responses/EndpointNotFound'
        '429':
          $ref: '#/components/responses/RateLimitReached'
  /linear/{version}/health:
    get:
      summary: Factset Get health of service
      description: Health status of the service
      operationId: healthStatus
      tags:
        - Linear
      parameters:
        - $ref: '#/components/parameters/VersionPath'
      responses:
        '200':
          $ref: '#/components/responses/HealthPass'
        '401':
          $ref: '#/components/responses/MissingOrInvalidAuthentication'
        '403':
          $ref: '#/components/responses/HealthFailAuthorization'
        '404':
          $ref: '#/components/responses/HealthFailVersionNotFound'
        '429':
          $ref: '#/components/responses/RateLimitReached'
  /linear/{version}/calculate/from-holdings:
    post:
      summary: Factset Calculate risk statistics
      description: >-
        Calculate predicted risk statistics for provided holdings using risk
        model data. Asset symbols and market values/weights are required.
      operationId: calculateFromHoldings
      tags:
        - Linear
      parameters:
        - $ref: '#/components/parameters/VersionPath'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CalculateFromHoldingsRequestBody'
            example:
              data:
                stats:
                  - name: ActiveVarianceToRisk
                    level: Portfolio
                  - name: ActiveVarianceToRisk
                    level: SecurityGroup
                  - name: PortfolioWeights
                    level: Security
                  - name: BenchmarkWeights
                    level: Security
                  - name: ActiveWeights
                    level: Security
                  - name: ActiveFactorVarianceToRisk
                    level: Security
                    settings:
                      correlatedSpecificRisk: true
                  - name: ActiveFactorVarianceToRiskCSR
                    level: Security
                  - name: ActiveFactorRisk
                    level: FactorGroup
                    settings:
                      covarianceTimesTwo: true
                  - name: PortfolioReturnAtRiskPercentWithContribution
                    level: Portfolio
                    settings:
                      confidenceLevel: 0.95
                      daysPerYear: 250
                      horizon: 1
                  - name: RawResidualRisk
                    level: Security
                  - name: RawSecurityFactorRisk
                    level: Security
                  - name: RawFactorExposure
                    level: FactorSecurity
                  - name: RawFactorExposure
                    level: FactorSecurity
                    settings:
                      sparse: true
                  - name: PortfolioExposure
                    level: Factor
                    settings:
                      sparse: true
                holdings:
                  portfolio:
                    ids:
                      - IBM
                      - FDS
                      - CA_ETF
                      - CASH_GBP_CFD
                      - CFD_B10RZP
                    marketValues:
                      - 60
                      - 30
                      - 30
                      - -30
                      - 30
                    grouping:
                      groups:
                        - name: USD
                          groups:
                            - name: Direct Assets
                              indices:
                                - 0
                                - 1
                            - name: Composite Assets
                              indices:
                                - 2
                        - name: GBP
                          indices:
                            - 4
                        - name: Offset Cash
                          indices:
                            - 3
                  benchmark:
                    ids:
                      - B10RZP
                      - IBM
                      - MSFT
                    marketValues:
                      - 30
                      - 40
                      - 30
                    grouping:
                      groups:
                        - name: GBP
                          indices:
                            - 0
                        - name: USD
                          groups:
                            - name: Direct Assets
                              indices:
                                - 1
                                - 2
                underlyingIds:
                  CFD_B10RZP: B10RZP
                compositeAssets:
                  CA_ETF:
                    ids:
                      - FDS
                      - IBM
                    marketValues:
                      - 10
                      - 90
                assetTypes:
                  CFD_B10RZP: OTH_CFD
                factorGrouping:
                  name: >-
                    This factor grouping is incomplete; it omits factors for the
                    sake of brevity and is not recomended for actual use.
                  nodes:
                    - name: Market
                      nodes:
                        - id: GLOBAL_MARKET
                    - name: Style
                      nodes:
                        - name: Market Factors
                          nodes:
                            - id: BETA
                            - id: LIQUIDITY
                            - id: MOMENTUM
                            - id: SIZE
                            - id: VOLATILITY
                        - name: Fundamental Factors
                          nodes:
                            - id: BOOK_TO_PRICE
                            - id: DIVIDEND_YIELD
                            - id: EARNINGS_YIELD
                            - id: GROWTH
                            - id: LEVERAGE
                factorsVisible:
                  list:
                    - FX_GBP
                    - FX_USD
                  type: Whitelist
                allowForcedRisklessAssets: true
                currency: USD
                riskModel: FDS:GLOBAL_EQUITY_M_V1
                date: '2021-05-31'
                calendar: FIVEDAY
      responses:
        '200':
          $ref: '#/components/responses/CalculateFromHoldingsSuccess'
        '400':
          $ref: '#/components/responses/BadRequestOrDataUnavailable'
        '401':
          $ref: '#/components/responses/MissingOrInvalidAuthentication'
        '403':
          $ref: '#/components/responses/AccessForbidden'
        '404':
          $ref: '#/components/responses/EndpointNotFound'
        '429':
          $ref: '#/components/responses/RateLimitReached'
        '500':
          $ref: '#/components/responses/InternalServerErrorJsonOnly'
  /linear/{version}/generate/id-mapping:
    post:
      summary: Factset Generate risk model ID mapping
      description: >-
        Resolve all input holdings IDs against a risk model for coverage and
        provide a mapping to security indices in the model or the reason for
        exclusion
      operationId: generateIdMapping
      tags:
        - Linear
      parameters:
        - $ref: '#/components/parameters/VersionPath'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GenerateIDMappingRequestBody'
            example:
              data:
                holdings:
                  portfolio:
                    grouping:
                      groups:
                        - name: USD
                          groups:
                            - name: Direct Assets
                              indices:
                                - 0
                                - 1
                            - name: Composite Assets
                              indices:
                                - 2
                        - name: GBP
                          indices:
                            - 4
                        - name: Offset Cash
                          indices:
                            - 3
                    ids:
                      - IBM
                      - FDS
                      - CA_ETF
                      - CASH_GBP_CFD
                      - CFD_B10RZP
                    marketValues:
                      - 60
                      - 30
                      - 30
                      - -30
                      - 30
                  benchmark:
                    grouping:
                      groups:
                        - name: GBP
                          indices:
                            - 0
                        - name: USD
                          groups:
                            - name: Direct Assets
                              indices:
                                - 1
                                - 2
                        - name: Other - Uncovered Assets
                          indices:
                            - 3
                    ids:
                      - B10RZP
                      - IBM
                      - MSFT
                      - FAKE_UNCOVERED_ASSET
                    marketValues:
                      - 30
                      - 30
                      - 30
                      - 10
                allowForcedRisklessAssets: true
                assetTypes:
                  CFD_B10RZP: OTH_CFD
                calendar: FIVEDAY
                compositeAssets:
                  CA_ETF:
                    ids:
                      - FDS
                      - IBM
                    marketValues:
                      - 10
                      - 90
                currency: USD
                date: '2021-05-31'
                riskModel: FDS:GLOBAL_EQUITY_M_V1
                underlyingIds:
                  CFD_B10RZP: B10RZP
      responses:
        '200':
          $ref: '#/components/responses/GenerateIDMappingSuccess'
        '400':
          $ref: '#/components/responses/BadRequestOrDataUnavailable'
        '403':
          $ref: '#/components/responses/AccessForbidden'
        '404':
          $ref: '#/components/responses/EndpointNotFound'
        '429':
          $ref: '#/components/responses/RateLimitReached'
        '500':
          $ref: '#/components/responses/InternalServerErrorJsonOnly'
components:
  schemas:
    StatCalculationLevel:
      description: Stat levels available for calculation
      type: string
      minLength: 1
      enum:
        - Portfolio
        - Security
        - SecurityGroup
        - SecuritySecurity
        - Factor
        - FactorGroup
        - FactorFactor
        - FactorSecurity
        - FactorGroupSecurity
        - FactorSecurityGroup
        - FactorGroupSecurityGroup
    StatCalculationSettings:
      description: >-
        Settings to modify an individual statistic's calculation. See also
        [OA:17698](https://my.apps.factset.com/oa/pages/17698#risk) and
        [OA:16097](https://my.apps.factset.com/oa/pages/16097#cov2) for cov*2.
      type: object
      properties:
        useAbsoluteWeightsForLotExpansion:
          type: boolean
          default: true
        covarianceTimesTwo:
          type: boolean
          default: false
        covarianceTimesTwoTerm:
          type: boolean
          default: false
        correlatedSpecificRisk:
          description: >-
            When this is set to true, specific risk correlation adjustment will
            be applied to security level as well as portfolio level. An example
            case where stock specific correlation is supplied by risk models is
            the case between parent equity and ADR.
          type: boolean
          default: false
        sparse:
          description: >-
            When this is set to true, the matrix and vector output is in
            compressed sparse row matrix format. Vector is considered as a
            matrix with one row for compressed sparse row matrix output. This
            only applies for matrix and vector output, not for single data
            points e.g. stats at Portfolio level.
          type: boolean
          default: false
        horizon:
          type: number
        daysPerYear:
          type: number
        confidenceLevel:
          type: number
        lamda:
          type: number
        specificToFactorRatio:
          type: number
        rapSys:
          type: number
        rapUnsys:
          type: number
    Stat:
      description: Risk statistic name and calculation level plus optional stat settings
      type: object
      required:
        - name
        - level
      properties:
        name:
          type: string
          minLength: 1
        level:
          $ref: '#/components/schemas/StatCalculationLevel'
        settings:
          $ref: '#/components/schemas/StatCalculationSettings'
    Stats:
      description: List of risk stats and settings to calculate
      type: array
      minItems: 1
      maxItems: 1000
      items:
        $ref: '#/components/schemas/Stat'
    IDsAndMarketValues:
      description: >-
        Security IDs and market values; the arrays must have the same number of
        items. Public security IDs such as SEDOL, CUSIP, ISIN, and Ticker are
        supported. If proprietary IDs are provided, they need to be mapped via
        composite assets. Market values are used to calculate weights and do not
        have to be normalized, but need to be denominated in the single same
        currency ISO.
      type: object
      required:
        - ids
        - marketValues
      properties:
        ids:
          type: array
          minItems: 0
          items:
            type: string
            minLength: 1
        marketValues:
          type: array
          minItems: 0
          items:
            type: number
            format: double
    SecurityGroup:
      description: >-
        Security grouping definition to use in calculation and results.
        Multi-layer security groupings are also suppoted.
      type: object
      properties:
        name:
          type: string
          minLength: 1
        indices:
          description: >-
            List of 0-based indices into the containing holding's security IDs
            array
          type: array
          minItems: 1
          items:
            type: integer
        groups:
          description: >-
            Recursively defined elements; base case array (i.e., lowest security
            group) contains objects with 'indices' only and not 'groups'
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/SecurityGroup'
    Holding:
      description: >-
        Security IDs and market values plus optional security grouping; the
        arrays must have the same number of items. Public security IDs such as
        SEDOL, CUSIP, ISIN, and Ticker are supported. If proprietary IDs are
        provided, they need to be mapped via composite assets. Market values are
        used to calculate weights and do not have to be normalized, but need to
        be denominated in the single same currency ISO.
      type: object
      allOf:
        - $ref: '#/components/schemas/IDsAndMarketValues'
        - properties:
            grouping:
              $ref: '#/components/schemas/SecurityGroup'
            uncoveredAssets:
              description: >-
                Uncovered asset weight handling. Default values: 'portfolio' ->
                ExcludeToGlobalCash, 'benchmark' -> Normalize, 'market' ->
                Normalize. See also
                [OA:21737](https://my.apps.factset.com/oa/pages/21737#group_normal_mix)
              type: string
              minLength: 1
              enum:
                - Normalize
                - ExcludeToGlobalCash
                - NormalizeWithGroupCash
                - ExcludeToCashWithinGroup
                - NormalizeWithinGroup
    Holdings:
      type: object
      required:
        - portfolio
      properties:
        portfolio:
          $ref: '#/components/schemas/Holding'
        benchmark:
          $ref: '#/components/schemas/Holding'
        market:
          $ref: '#/components/schemas/Holding'
    RiskModelFactor:
      description: Individual factor from the risk model
      type: object
      required:
        - id
      properties:
        id:
          description: Factor ID from the risk model
          type: string
          minLength: 1
    FactorGroupNodes:
      oneOf:
        - $ref: '#/components/schemas/FactorGroup'
        - $ref: '#/components/schemas/RiskModelFactor'
    FactorGroup:
      description: >-
        Factor grouping definition to use for calculations and results. This
        field impacts the calculation only when any 'FactorGroup' level
        statistics are requested, e.g. 'FactorGroup', 'FactorGroupSecurity'.
      type: object
      required:
        - nodes
      properties:
        name:
          description: Name of this factor group
          type: string
          minLength: 1
        nodes:
          description: >-
            Recursively defined elements; base case array (i.e., lowest factor
            group) contains 'RiskModelFactor' objects only and no 'FactorGroup'
            objects
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/FactorGroupNodes'
    RiskModelCode:
      description: Model code
      type: string
      minLength: 1
      example: FDS:GLOBAL_EQUITY_M_V1
    StringDate:
      description: >-
        **(since 1.1.0)** Any FactSet-accepted string date format, except that
        "NOW" is not supported by risk analysis. For more, refer to
        [OA:1964](https://my.apps.factset.com/oa/pages/1964#rel).
      type: string
      minLength: 1
      example: '-3M'
    StandardDate:
      description: '**(since 1.12.0)**  Date format YYYY-MM-DD.'
      type: string
      format: date
      example: '2019-01-26'
    Date:
      description: >-
        Date of risk model and holdings data to fetch and use. For the use of
        Relative Date argument, refer to
        [OA:1964](https://my.apps.factset.com/oa/pages/1964#rel). Ignored only
        for composite asset definitions provided as inputs via 'compositeAssets'
        field.
      oneOf:
        - $ref: '#/components/schemas/StringDate'
        - $ref: '#/components/schemas/StandardDate'
    AssetTypes:
      description: >-
        **(since 1.4.0)** A mapping of security ID to its asset type as the
        standard asset type keys. When this input is in a request, it is used to
        (1) identify assets that use Underlying IDs from 'underlyingIds' input,
        and (2) identify asset types compatible with automatic removal of their
        contribution of currency to risk unless any form of the
        'removeCurrencyRisk' input is also provided. When this input is used in
        the request, underlying IDs (provided via 'underlyingIds' input) are
        only respected for the following standard asset type keys (all other
        underlying IDs will be discarded): refer to
        [OA:22019](https://my.apps.factset.com/oa/pages/22019) for compatible
        asset type keys and more details.
      type: object
      example:
        FDS: EQ_EQ_COMMON
        CFDTOIBM: OTH_CFD
      additionalProperties:
        type: string
        minLength: 1
    CurrencyISOCode:
      description: >-
        ISO-4217 currency code for risk model and holdings data to fetch and
        use. Ignored only for composite asset definitions provided as inputs via
        'compositeAssets' field.
      type: string
      minLength: 1
      example: EUR
    CalendarCode:
      description: >-
        Calendar code for risk model and holdings data to fetch and use. Ignored
        only for composite asset definitions provided as inputs via
        'compositeAssets' field. See also
        [OA:2012](https://my.apps.factset.com/oa/pages/2012#calendar) for global
        codes, "FIVEDAY" or "SEVENDAY" calendars and see
        [OA:16610](https://my.apps.factset.com/oa/pages/16610#country) for
        country codes (cf. 'Calendar Code' column).
      type: string
      minLength: 1
      example: FJH
    ExposureDateFormatConvention:
      description: Factor exposure matrix date.
      oneOf:
        - $ref: '#/components/schemas/StringDate'
        - $ref: '#/components/schemas/StandardDate'
    CovarianceDateFormatConvention:
      description: Factor covariance matrix date.
      oneOf:
        - $ref: '#/components/schemas/StringDate'
        - $ref: '#/components/schemas/StandardDate'
    LaggingDates:
      description: >-
        Risk model lagging dates for data items to fetch and use. This field can
        be utilized to isolate each data item's impact on risk calculation. A
        typical use case is to analyze the risk change from one day to the other
        by fixing the risk model data date to one date while moving the
        portfolio holdings data.
      type: object
      properties:
        exposureDate:
          $ref: '#/components/schemas/ExposureDateFormatConvention'
        covarianceDate:
          $ref: '#/components/schemas/CovarianceDateFormatConvention'
        ssrDateIs:
          description: >-
            Stock specific risk (SSR) date can take one of the other lagging
            dates
          type: string
          minLength: 1
          enum:
            - ExposureDate
            - CovarianceDate
    RequiresFactorReturns:
      description: >-
        Indicates factor returns are required and which frequency from the risk
        model to fetch and use. The requested factor return frequency must be
        one that is available from the selected risk model itself. The
        orientation of factor return is forward-looking. For example, if daily
        factor return is called, and 'date' is set as '2021-06-30', factor
        return date range used for calculation is 2021-06-30 to 2021-07-01,
        assuming no holidays in these two dates.
      type: string
      minLength: 1
      enum:
        - Daily
        - Monthly
    CompositeAssetDefinitions:
      description: >-
        IDs to be defined as composite assets with their constituents' IDs and
        market values. The typical use case is for risk look-through of ETF or
        Funds' constituents. When defining composite assets and creating
        portfolios which hold them, the IDs provided must be an exact match.
      type: object
      additionalProperties:
        $ref: '#/components/schemas/IDsAndMarketValues'
      example:
        CA1_to_IBM_and_CA2:
          ids:
            - IBM
            - CA2
          marketValues:
            - 0.45
            - 0.55
        CA2:
          ids:
            - VZ
            - cfd_FDS
          marketValues:
            - 0.6
            - 0.4
    FactorsVisible:
      description: >-
        Hide risk model factors in the response results; does not affect
        calculated data values
      type: object
      required:
        - list
        - type
      properties:
        list:
          description: List of risk model factor IDs
          type: array
          minItems: 1
          items:
            type: string
            minLength: 1
        type:
          type: string
          minLength: 1
          enum:
            - Whitelist
            - Blacklist
    UnderlyingIDs:
      description: >-
        A map of security IDs to their underlying IDs. When 'assetTypes' input
        is in a request, underlying IDs provided via this input are only
        respected for the following standard asset type keys (all other
        underlying IDs will be discarded): refer to
        [OA:22019](https://my.apps.factset.com/oa/pages/22019) for compatible
        asset type keys and more details.
      type: object
      additionalProperties:
        type: string
        minLength: 1
      example:
        CFD_IBM: IBM
        cfd_FDS: FDS
    RemoveCurrencyRiskBoolean:
      description: >-
        **(since 1.11.0)** Enables or disables the removal of the contribution
        of currency to risk based upon asset type (Contract for Difference
        (CFD), equity futures, and index futures). This single-boolean schema
        field will have no effect without valid 'assetTypes' input in the
        request also.
      type: boolean
      default: true
    RemoveCurrencyRiskIDs:
      description: >-
        Security IDs from which the contribution of currency to risk should be
        removed or not. Typical use includes asset types such as Contract for
        Difference (CFD), equity futures, and index futures. This will override
        the automatic currency removal based on assetTypes when provided. If
        this input type is provided, all assets that do not have explicit
        specification will have currency risk, because the default value is
        false. 
      type: object
      additionalProperties:
        type: boolean
      example:
        CFD_IBM: true
        cfd_FDS: false
    RemoveCurrencyRisk:
      description: >-
        Controls removal (or not) of the contribution of currency to risk.
        **Note:** If this input is not provided in the request, then currency
        risk will be removed automatically based upon asset type when valid
        'assetTypes' are specified in the request.
      oneOf:
        - $ref: '#/components/schemas/RemoveCurrencyRiskBoolean'
        - $ref: '#/components/schemas/RemoveCurrencyRiskIDs'
    RiskModelAppendDataValue:
      description: Value for field at respective integer key index
      oneOf:
        - type: string
          minLength: 1
        - type: number
    RiskModelAppendData:
      description: >-
        **(since 1.17.0)** Inline append data. This field can be used mainly for
        two purpose: 1) to supplement the risk model coverage when assets are
        not natively covered by a model, and 2) to intentionally override asset
        exposures and/or specific risk whenever there is misaligned view of an
        asset's risk profile between a model and a user.
      type: object
      required:
        - data
        - fields
      properties:
        data:
          description: List of all rows of the append data.
          type: array
          minItems: 1
          items:
            description: >-
              Contains field, value pairs. The field must be the integer index
              position of the field in 'fields', but must be as a string. The
              value will be the data for that field. Values for a single field
              must have the same data type.
            type: object
            additionalProperties:
              $ref: '#/components/schemas/RiskModelAppendDataValue'
            example:
              '1': SYMBOL_2
              '2': 7.2
          example:
            - '0': 2.5
              '1': SYMBOL_1
              '2': 23.1
            - '1': SYMBOL_2
              '2': 7.2
        fields:
          description: >-
            List of fields in append data. Must contain 'SYMBOL'. Index location
            will be used in 'data' elements as keys. The entire set of factor
            IDs and specific risk are not required. If any inputs of exposures
            or specific risk are missing, 0 will be inserted for those field.
          type: array
          minItems: 1
          uniqueItems: true
          items:
            type: string
            minLength: 1
          example:
            - FACTOR_1
            - SYMBOL
            - STDERR
    AllowForcedRisklessAssets:
      description: >-
        Allow certain assets to be entirely riskless; certain models always
        override this to be true. Examples of asset types to which this applies
        includes offset cash.
      type: boolean
      default: false
    AdditionalCalculationInputs:
      description: >-
        Additional user-defined calculation input values. For example, some may
        be required for some Risk-Based Performance Attribution (RBPA) stats,
        such as 'ResidualFactorReturnsCSR' and 'DeannualizedActiveFactorRisk'.
      type: object
      properties:
        marketExcess:
          description: >-
            User-defined values (all required) to compute the desired arbitrary
            'excess return' of the market portfolio (which is usually intended
            to be defined as a broad market index).
          type: object
          required:
            - return
            - riskFreeRate
            - riskPremium
            - riskPrem

# --- truncated at 32 KB (94 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/factset/refs/heads/main/openapi/open-risk-openapi-original.yml