openapi: 3.1.0
info:
  title: Connect Earth Compliance API
  version: 1.0.0
  summary: Sustainability and regulatory data for portfolios and instruments.
  description: |
    The Connect Earth Compliance API gives you SFDR, PAI, ESG, EU Taxonomy
    and sustainable investment data for the instruments and portfolios you
    hold, and generates sustainability reports.
  termsOfService: https://docs.google.com/document/d/e/2PACX-1vSRrFWBfbTv6n0HNDq1jOKX11rD-wpQIACJ6AXsC0V7b0CqNSnnqzg-W3MTnP0eGPJJwIPCew-oCL9x/pub
  contact:
    email: customers@connect.earth
servers:
  - url: https://eco.datia.app
    description: Production
security:
  - apiKey: []
tags:
  - name: Portfolios
    description: Upload portfolios as dated snapshots, then list, rename or delete them.
  - name: Instruments
    description: SFDR classification, PAI indicators, ESG data and business involvements for a list of ISINs.
  - name: Sustainable investments
    description: Classify holdings as sustainable investments under a methodology.
  - name: EU Taxonomy
    x-displayName: EU Taxonomy
    description: EU Taxonomy alignment for a list of holdings.
  - name: Climate
    description: Temperature scores for a list of holdings.
  - name: Reports
    description: Generate a sustainability report as a PDF.
paths:
  /reports:
    post:
      tags:
        - Reports
      summary: Generate a sustainability report
      description: >-
        Builds a PDF sustainability report for the holdings you send and returns a link to it.
        The report compares the portfolio with one benchmark: `benchmark_etf_mutual_fund` when you send it,
        otherwise `benchmark_index`, which defaults to `S&P 500`.
        A request without `identifier`, without `type` or with an empty `holdings` list fails with `400`.
        A `snapshot_at` in a future year fails with `400` and the message
        `Snapshot date cannot be higher than actual date`. A date that cannot be read fails with `400` and the
        message `You are not using a valid date as snapshot parameter`.
      operationId: generateReport
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: Name of the portfolio, shown in the report.
                identifier:
                  type: string
                  description: Your label for the portfolio. It is not linked to portfolios stored with `POST /portfolios`.
                type:
                  type: string
                  description: Report type.
                  enum:
                    - esg-overview
                    - mifid2
                snapshot_at:
                  type: string
                  format: date
                  description: Date of the holdings (ISO 8601). It is moved to the end of its quarter.
                holdings:
                  type: array
                  description: Holdings in the portfolio. Must contain at least one holding.
                  minItems: 1
                  items:
                    $ref: '#/components/schemas/ReportHolding'
                benchmark_index:
                  type: string
                  description: >-
                    Name of the index to compare the portfolio with. Defaults to `S&P 500`. A name that is not in
                    the list fails with `400`. Use `benchmark_etf_mutual_fund` instead to compare with a specific ETF
                    or mutual fund.
                  default: S&P 500
                  enum:
                    - S&P 500
                    - Nasdaq 100
                    - DOW 30
                    - FTSE 100
                    - OMX 30
                    - OMX Stockholm
                    - OMXC 30
                    - DAX
                    - CAC 40
                    - SMI
                    - AEX
                    - IBEX 35
                    - PSI 20
                    - BEL 20
                    - ATX 20
                    - EURO STOXX 50
                    - Solactive SEK IG Credit Index
                benchmark_etf_mutual_fund:
                  type: string
                  description: ISIN of the ETF or mutual fund to compare the portfolio with. Takes priority over `benchmark_index`.
                methodology_id:
                  type: number
                  description: Sustainable investments methodology to use. Only applies to `mifid2` reports. Get the ids from `GET /sustainable-investments/methodologies`.
              required:
                - name
                - snapshot_at
                - identifier
                - type
                - holdings
            example:
              name: Pension fund A
              identifier: pension-fund-a
              type: esg-overview
              snapshot_at: '2026-06-30'
              benchmark_etf_mutual_fund: IE00B4L5Y983
              holdings:
                - name: Apple Inc.
                  isin: US0378331005
                  instrument_type: stock
                  currency: USD
                  weight: 40
                  market_value: 4000000
                - name: Microsoft Corp.
                  isin: US5949181045
                  instrument_type: stock
                  currency: USD
                  weight: 35
                  market_value: 3500000
                - name: Bund 2.6% 2033
                  isin: DE000BU2Z015
                  instrument_type: sovereign-bond
                  currency: EUR
                  weight: 25
                  market_value: 2500000
      responses:
        '201':
          description: The report was generated.
          content:
            application/json:
              schema:
                type: object
                properties:
                  document:
                    type: object
                    properties:
                      location_url:
                        type: string
                        format: uri
                        description: Link to the PDF report. Download it right away, because the link may expire.
                      request_id:
                        type: string
                        description: Reference to quote when contacting support.
                  metadata:
                    type: object
                    properties:
                      snapshot_at:
                        type: string
                        format: date
                        description: Quarter-end date the report was built for.
                      type:
                        type: string
                        description: Report type you requested.
                      default_benchmark:
                        type: string
                        description: ISIN of the benchmark used.
                      identifier:
                        type: string
                        description: Internal reference.
              example:
                document:
                  location_url: https://cdn.datia.app/reports/report-0001.pdf
                  request_id: REQUEST-ID-0001
                metadata:
                  snapshot_at: '2026-06-30'
                  type: esg-overview
                  default_benchmark: IE00B4L5Y983
                  identifier: report-reference-0001
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/ServerError'
  /portfolios:
    post:
      tags:
        - Portfolios
      summary: Create or replace a portfolio snapshot
      description: >-
        Uploads the holdings of a portfolio for one date. Sending the same `identifier` with a date in the
        same quarter replaces that snapshot. A date in another quarter adds a new snapshot. When the
        `identifier` already exists, only the holdings are replaced or added: `name` and `currency` are
        changed only with `PUT /portfolios/{identifier}`. Use the `identifier` in the response to update or
        delete the portfolio later.
        A `snapshot_at` in a future year fails with `400` and the message
        `Snapshot date cannot be higher than actual date`. A date that cannot be read fails with `400` and the
        message `You are not using a valid date as snapshot parameter`.
      operationId: createPortfolioSnapshot
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: Name of the portfolio.
                identifier:
                  type: string
                  description: >-
                    Your identifier for the portfolio. Always send it: portfolios created without one share the
                    same identifier, so you cannot update or delete them one by one.
                currency:
                  type: string
                  description: Currency of the portfolio, as an ISO 4217 code. If the code is not recognized, the portfolio is created in EUR.
                  default: USD
                snapshot_at:
                  type: string
                  format: date
                  description: Date of the holdings (ISO 8601). It is moved to the end of its quarter.
                holdings:
                  type: array
                  description: Holdings in the portfolio. Use `null` as the ISIN for cash or instruments without an ISIN.
                  items:
                    $ref: '#/components/schemas/PortfolioHolding'
              required:
                - holdings
                - snapshot_at
                - name
            example:
              name: Pension fund A
              identifier: pension-fund-a
              currency: USD
              snapshot_at: '2026-06-30'
              holdings:
                - name: Apple Inc.
                  isin: US0378331005
                  instrument_type: stock
                  currency: USD
                  weight: 30
                  market_value: 3000000
                - name: Microsoft Corp.
                  isin: US5949181045
                  instrument_type: stock
                  currency: USD
                  weight: 25
                  market_value: 2500000
                - name: iShares Core MSCI World UCITS ETF
                  isin: IE00B4L5Y983
                  instrument_type: etf
                  currency: USD
                  weight: 25
                  market_value: 2500000
                - name: Bund 2.6% 2033
                  isin: DE000BU2Z015
                  instrument_type: sovereign-bond
                  currency: EUR
                  weight: 15
                  market_value: 1500000
                - name: Cash
                  isin: null
                  instrument_type: cash
                  currency: USD
                  weight: 5
                  market_value: 500000
      responses:
        '201':
          description: The portfolio snapshot was created or replaced.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PortfolioResult'
              example:
                identifier: datia-portfolio:12345_pension-fund-a
                metadata:
                  message: Fund created successfully at 2026-06-30
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/ServerError'
    get:
      tags:
        - Portfolios
      summary: List portfolios
      description: >-
        Lists every portfolio in your organization, including portfolios created in the Connect Earth app,
        and the snapshot dates each one has. Snapshots older than about five years are not listed.
      operationId: listPortfolios
      responses:
        '200':
          description: The portfolios in your organization.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      members:
                        type: integer
                        description: Number of members in your organization.
                      funds:
                        type: array
                        items:
                          type: object
                          properties:
                            identifier:
                              type: string
                              description: Identifier of the portfolio. Use it in `/portfolios/{identifier}`.
                            name:
                              type: string
                              description: Name of the portfolio.
                            snapshots:
                              type: array
                              description: Quarter-end dates that have holdings, oldest first.
                              items:
                                type: string
                                format: date
                  metadata:
                    $ref: '#/components/schemas/Metadata'
              example:
                data:
                  members: 4
                  funds:
                    - identifier: datia-portfolio:12345_pension-fund-a
                      name: Pension fund A
                      snapshots:
                        - '2026-03-31'
                        - '2026-06-30'
                metadata:
                  message: Organization metadata successfully retrieved
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/ServerError'
  /portfolios/{identifier}:
    parameters:
      - name: identifier
        in: path
        required: true
        description: The portfolio `identifier` returned by `POST /portfolios` or `GET /portfolios`.
        schema:
          type: string
        example: datia-portfolio:12345_pension-fund-a
    delete:
      tags:
        - Portfolios
      summary: Delete a portfolio snapshot
      description: >-
        Deletes one snapshot of a portfolio. It works on any portfolio in your organization, including
        portfolios created in the Connect Earth app. When you delete the last listed snapshot, the portfolio is
        deleted too. A portfolio with no listed snapshots, for example one whose snapshots are all older than
        about five years, is deleted entirely by a `DELETE`, whatever `snapshot_at` you send.
        If the snapshot is not listed, nothing is deleted and the message says so.
        `metadata.message` is one of `Fund snapshot deleted successfully`,
        `Fund deleted successfully with all snapshots`, `Fund deleted successfully` or `Fund snapshot not found`.
      operationId: deletePortfolioSnapshot
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                snapshot_at:
                  type: string
                  format: date
                  description: >-
                    Date of the snapshot to delete (ISO 8601). It is moved to the end of its quarter. A date in a
                    future year or a date that cannot be read fails with `400`.
              required:
                - snapshot_at
            example:
              snapshot_at: '2026-06-30'
      responses:
        '200':
          description: The request was processed. `metadata.message` says what was deleted.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PortfolioResult'
              example:
                identifier: datia-portfolio:12345_pension-fund-a
                metadata:
                  message: Fund snapshot deleted successfully
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/ServerError'
    put:
      tags:
        - Portfolios
      summary: Rename a portfolio or change its currency
      description: >-
        Updates the name or currency of a portfolio. Send only the fields you want to change. It works on any
        portfolio in your organization, including portfolios created in the Connect Earth app.
        An unknown currency code is ignored.
      operationId: updatePortfolio
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: New name of the portfolio.
                currency:
                  type: string
                  description: New currency of the portfolio, as an ISO 4217 code.
            example:
              name: Pension fund A (EUR)
              currency: EUR
      responses:
        '200':
          description: The portfolio was updated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PortfolioResult'
              example:
                identifier: datia-portfolio:12345_pension-fund-a
                metadata:
                  message: 'Fund metadata updated successfully with id: 67890'
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/ServerError'
  /instruments/sustainability-profile:
    post:
      tags:
        - Instruments
      summary: Get SFDR classification
      description: >-
        Returns the SFDR article (6, 8 or 9) for each ISIN. Needs access to the SFDR framework.
        Up to 10,000 holdings per request. Entries without an `isin` are skipped. An empty `holdings` list fails
        with `400` and the message `Please provide at least one instrument`. When no entry has an `isin`, the
        response has an empty `data` list.
      operationId: getSfdrClassification
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IsinHoldingsRequest'
            example:
              holdings:
                - isin: US0378331005
                - isin: IE00B4L5Y983
                - isin: DE000BU2Z015
      responses:
        '200':
          description: The SFDR classification of each ISIN. Funds are listed after the other instruments.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        isin:
                          type: string
                          description: ISIN of the instrument.
                        sustainability_profile:
                          $ref: '#/components/schemas/SustainabilityProfile'
                  metadata:
                    $ref: '#/components/schemas/Metadata'
              example:
                data:
                  - isin: US0378331005
                    sustainability_profile:
                      classification: 6
                      description: Other
                      metadata: null
                  - isin: DE000BU2Z015
                    sustainability_profile:
                      classification: null
                      description: null
                      metadata: null
                  - isin: IE00B4L5Y983
                    sustainability_profile:
                      classification: 6
                      description: Other
                      metadata: null
                metadata:
                  message: Sustainability profile of instruments fetched successfully
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          $ref: '#/components/responses/ForbiddenInstruments'
        '500':
          $ref: '#/components/responses/ServerError'
  /instruments/business-involvements:
    post:
      tags:
        - Instruments
      summary: Get business involvements
      description: >-
        Returns ESG scores and business involvements, such as thermal coal or tobacco, for each ISIN.
        Needs access to the ESG framework. Up to 10,000 holdings per request. Entries without an `isin` are skipped.
        An empty `holdings` list, or one where no entry has an `isin`, fails with `400` and the message
        `Please provide at least one instrument`.
      operationId: getBusinessInvolvements
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                holdings:
                  type: array
                  description: Instruments to look up.
                  items:
                    $ref: '#/components/schemas/IsinHolding'
                minimum_threshold:
                  type: number
                  description: Leave out involvements where the share of revenue involved is below this value. When it is above 0, involvements with no activity are also left out.
                  default: 0
              required:
                - holdings
            example:
              holdings:
                - isin: US0378331005
                - isin: IE00B4L5Y983
              minimum_threshold: 0
      responses:
        '200':
          description: Business involvements for each ISIN, in the order you sent them.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        sustainability_data:
                          description: Scores and involvements, or `null` when the ISIN is not known.
                          type:
                            - object
                            - 'null'
                          properties:
                            total_score:
                              type:
                                - number
                                - 'null'
                              description: Total ESG score, out of 300. `null` when missing; a score of 0 may also come back as `null`.
                            environment_score:
                              type:
                                - number
                                - 'null'
                              description: Environmental score, out of 100. `null` when missing; a score of 0 may also come back as `null`.
                            social_score:
                              type:
                                - number
                                - 'null'
                              description: Social score, out of 100. `null` when missing; a score of 0 may also come back as `null`.
                            governance_score:
                              type:
                                - number
                                - 'null'
                              description: Governance score, out of 100. `null` when missing; a score of 0 may also come back as `null`.
                            business_involvements:
                              type:
                                - object
                                - array
                              maxItems: 0
                              description: >-
                                Involvements keyed by name, for example `thermal_coal` or `tobacco_distributor`.
                                For a company, an involvement has weight 100 and count 1, and one with no activity
                                has weight 0 and count 0. For a fund, weight is the share of the fund involved and
                                count is the number of holdings involved. When a company has no involvement data,
                                this is an empty array.
                              additionalProperties:
                                type: object
                                properties:
                                  weight:
                                    type: number
                                    description: Share involved, from 0 to 100.
                                  count:
                                    type: integer
                                    description: Number of holdings involved.
                        metadata:
                          $ref: '#/components/schemas/InstrumentMetadata'
                  message:
                    type: string
              example:
                data:
                  - sustainability_data:
                      total_score: 212
                      environment_score: 71
                      social_score: 68
                      governance_score: 73
                      business_involvements:
                        thermal_coal:
                          weight: 0
                          count: 0
                        tobacco_distributor:
                          weight: 0
                          count: 0
                        nuclear_weapons:
                          weight: 0
                          count: 0
                    metadata:
                      isin: US0378331005
                      is_fund: false
                  - sustainability_data:
                      total_score: 186
                      environment_score: 62
                      social_score: 61
                      governance_score: 64
                      business_involvements:
                        thermal_coal:
                          weight: 0.4
                          count: 3
                        tobacco_distributor:
                          weight: 0.6
                          count: 5
                        nuclear_power_generation:
                          weight: 1.2
                          count: 7
                    metadata:
                      isin: IE00B4L5Y983
                      is_fund: true
                message: Business involvements of instruments fetched successfully
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          $ref: '#/components/responses/ForbiddenInstruments'
        '500':
          $ref: '#/components/responses/ServerError'
  /instruments/sustainability-data:
    post:
      tags:
        - Instruments
      summary: Get PAI indicators
      description: >-
        Returns the mandatory SFDR principal adverse impact (PAI) indicators for each ISIN, with their units.
        Needs access to the SFDR framework. Up to 10,000 holdings per request. Entries without an `isin` are skipped.
        An empty `holdings` list, or one where no entry has an `isin`, fails with `400` and the message
        `Please provide at least one instrument`.
      operationId: getPaiIndicators
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IsinHoldingsRequest'
            example:
              holdings:
                - isin: US0378331005
                - isin: US5949181045
      responses:
        '200':
          description: PAI indicators for each ISIN, in the order you sent them.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        sustainability_data:
                          description: >-
                            Indicators keyed by name, or `null` only when the ISIN is not known.
                            Keys are the mandatory PAI codes, for example `scope_1_emissions`, `scope_2_emissions`,
                            `carbon_footprint` and `ghg_intensity_investee_companies`, plus `sfdr_classification`
                            and `fund_currency` for funds. An indicator's `value` can be `null`.
                          type:
                            - object
                            - 'null'
                          additionalProperties:
                            $ref: '#/components/schemas/DataPoint'
                        metadata:
                          $ref: '#/components/schemas/InstrumentMetadata'
                  metadata:
                    $ref: '#/components/schemas/Metadata'
              example:
                data:
                  - sustainability_data:
                      scope_1_emissions:
                        value: 55200
                        unit: tonnes
                      scope_2_emissions:
                        value: 3400
                        unit: tonnes
                      carbon_footprint:
                        value: 1.9
                        unit: tCO2e/M€
                      ghg_intensity_investee_companies:
                        value: 4.3
                        unit: tCO2e/M€
                    metadata:
                      isin: US0378331005
                      is_fund: false
                  - sustainability_data:
                      scope_1_emissions:
                        value: 144960
                        unit: tonnes
                      scope_2_emissions:
                        value: 393134
                        unit: tonnes
                      carbon_footprint:
                        value: 3.2
                        unit: tCO2e/M€
                      ghg_intensity_investee_companies:
                        value: 17.6
                        unit: tCO2e/M€
                    metadata:
                      isin: US5949181045
                      is_fund: false
                metadata:
                  message: Sustainability data of instruments fetched successfully
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          $ref: '#/components/responses/ForbiddenInstruments'
        '500':
          $ref: '#/components/responses/ServerError'
  /instruments/esg-data:
    post:
      tags:
        - Instruments
      summary: Get ESG data
      description: >-
        Returns ESG scores and environmental, social and governance metrics for each ISIN, with their units.
        Needs access to the ESG framework. Up to 10,000 holdings per request. Entries without an `isin` are skipped.
        An empty `holdings` list, or one where no entry has an `isin`, fails with `400` and the message
        `Please provide at least one instrument`.
      operationId: getEsgData
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IsinHoldingsRequest'
            example:
              holdings:
                - isin: US0378331005
                - isin: IE00B4L5Y983
      responses:
        '200':
          description: ESG data for each ISIN, in the order you sent them.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        sustainability_data:
                          description: Metrics keyed by name, or `null` only when the ISIN is not known. A metric's `value` can be `null`.
                          type:
                            - object
                            - 'null'
                          properties:
                            total_score:
                              $ref: '#/components/schemas/DataPoint'
                              description: Total ESG score. Unit `out of 300`.
                            environment_score:
                              $ref: '#/components/schemas/DataPoint'
                              description: Environmental score. Unit `out of 100`.
                            social_score:
                              $ref: '#/components/schemas/DataPoint'
                              description: Social score. Unit `out of 100`.
                            governance_score:
                              $ref: '#/components/schemas/DataPoint'
                              description: Governance score. Unit `out of 100`.
                            carbon_footprint:
                              $ref: '#/components/schemas/DataPoint'
                              description: Carbon footprint. Unit `tonnes/ M€`.
                            total_amount_waste_produced_by_sales_or_revenue:
                              $ref: '#/components/schemas/DataPoint'
                              description: Waste produced per million euros of revenue. Unit `tonnes/ M€`.
                            co2_and_equivalents_totals_by_revenue_or_sales:
                              $ref: '#/components/schemas/DataPoint'
                              description: CO2 and equivalent emissions per million euros of revenue. Unit `tonnes/ M€`.
                            total_amount_hazardous_waste_produced_by_sales_or_revenue:
                              $ref: '#/components/schemas/DataPoint'
                              description: Hazardous waste produced per million euros of revenue. Unit `tonnes/ M€`.
                            total_direct_indirect_energy_consumption:
                              $ref: '#/components/schemas/DataPoint'
                              description: Direct and indirect energy use per million euros. Unit `GJ/ M€`.
                            percentage_of_women_managers:
                              $ref: '#/components/schemas/DataPoint'
                              description: Share of managers who are women. Unit `%`.
                            average_percentage_employee_turnover:
                              $ref: '#/components/schemas/DataPoint'
                              description: Employee turnover. Unit `%`.
                            average_gender_pay_gap:
                              $ref: '#/components/schemas/DataPoint'
                              description: Gender pay gap. Unit `%`.
                            percentage_independent_board_member:
                              $ref: '#/components/schemas/DataPoint'
                              description: Share of board members who are independent. Unit `%`.
                            female_representations_board:
                              $ref: '#/components/schemas/DataPoint'
                              description: Women on the board. Unit `number`.
                            foreign_culture_representation_board:
                              $ref: '#/components/schemas/DataPoint'
                              description: Board members from other cultures. Unit `number`.
                        metadata:
                          $ref: '#/components/schemas/InstrumentMetadata'
                  message:
                    type: string
              example:
                data:
                  - sustainability_data:
                      total_score:
                        value: 212
                        unit: out of 300
                      environment_score:
                        value: 71
                        unit: out of 100
                      carbon_footprint:
                        value: 2.1
                        unit: tonnes/ M€
                      percentage_of_women_managers:
                        value: 31
                        unit: '%'
                    metadata:
                      isin: US0378331005
                      is_fund: false
                  - sustainability_data:
                      total_score:
                        value: 186
                        unit: out of 300
                      environment_score:
                        value: 62
                        unit: out of 100
                      carbon_footprint:
                        value: 58.4
                        unit: tonnes/ M€
                      percentage_of_women_managers:
                        value: 27
                        unit: '%'
                    metadata:
                      isin: IE00B4L5Y983
                      is_fund: true
                message: ESG data of instruments fetched successfully
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          $ref: '#/components/responses/ForbiddenInstruments'
        '500':
          $ref: '#/components/responses/ServerError'
  /sustainable-investments/methodologies:
    get:
      tags:
        - Sustainable investments
      summary: List methodologies
      description: >-
        Lists the sustainable investments methodologies you can use. Needs access to the sustainable
        investments framework.
      operationId: listMethodologies
      responses:
        '200':
          description: The methodologies available to your organization.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: integer
                          description: Methodology id. Use it as `methodology_id`.
                        name:
                          type: string
                          description: Name of the methodology.
              example:
                data:
                  - id: 1
                    name: Connect Earth's Sample
                  - id: 230
                    name: Custom methodology
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          $ref: '#/components/responses/ForbiddenFramework'
        '500':
          $ref: '#/components/responses/ServerError'
  /sustainable-investments/insights:
    post:
      tags:
        - Sustainable investments
      summary: Classify sustainable investments
      description: >-
        Classifies each holding as sustainable, moderate, not sustainable or uncovered under a methodology.
        Needs access to the sustainable investments framework. Every holding needs a non-null `isin`, `name`,
        `instrument_type` and `market_value`, so remove cash rows; otherwise the request fails with `400`.
      operationId: classifySustainableInvestments
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                methodology_id:
                  type: number
                  description: Methodology to use, from `GET /sustainable-investments/methodologies`. Defaults to the standard methodology.
                holdings:
                  type: array
                  description: Holdings to classify. Must contain at least one holding.
                  minItems: 1
                  items:
                    $ref: '#/components/schemas/ClassifiedHolding'
              required:
                - holdings
            example:
              methodology_id: 230
              holdings:
                - name: Apple Inc.
                  isin: US0378331005
                  instrument_type: stock
                  currency: USD
                  weight: 40
                  market_value: 4000000
                - name: Microsoft Corp.
                  isin: US5949181045
                  instrument_type: stock
                  currency: USD
                  weight: 35
                  market_value: 3500000
                - name: Bund 2.6% 2033
                  isin: DE000BU2Z015
                  instrument_type: sovereign-bond
                  currency: EUR
                  weight: 25
                  market_value: 2500000
      responses:
        '201':
          description: The classification of each holding. Results are grouped by classification; match on `isin`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        name:
                          type: string
                          description: Name of the holding.
                        isin:
                          type: string
                          description: ISIN of the holding.
                        weight:
                          type:
                            - number
                            - 'null'
                          description: >-
                            Weight of the holding as stored. If any holding has no weight (or a weight of 0),
                            weights are worked out from market values.
                        sustainability_profile:
                          type: object
                          properties:
                            classification:
                              type:
                                - integer
                                - 'null'
                              enum:
                                - 9
                                - 8
                                - 6
                                - null
                              description: 9 for sustainable, 8 for moderate, 6 for not sustainable, `null` for uncovered.
                            description:
                              type: string
                              enum:
                                - Sustainable
                                - Moderate
                                - Not sustainable
                                - Uncovered
                            metadata:
                              type: 'null'
              example:
                data:
                  - name: Microsoft Corp.
                    isin: US5949181045
                    weight: 35
                    sustainability_profile:
                      classification: 9
                      description: Sustainable
                      metadata: null
                  - name: Apple Inc.
                    isin: US0378331005
                    weight: 40
                    sustainability_profile:
                      classification: 8
                      description: Moderate
                      metadata: null
                  - name: Bund 2.6% 2033
                    isin: DE000BU2Z015
                    weight: 25
                    sustainability_profile:
                      classification: null
                      description: Uncovered
                      metadata: null
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          $ref: '#/components/responses/ForbiddenFramework'
        '500':
          $ref: '#/components/responses/ServerError'
  /taxonomy/insights:
    post:
      tags:
        - EU Taxonomy
      summary: Get EU Taxonomy alignment
      description: >-
        Returns the EU Taxonomy eligibility and alignment of the holdings you send, taken together as one portfolio.
        Needs access to the EU Taxonomy framework. Every holding needs a non-null `isin`, `name`,
        `instrument_type` and `market_value`, so remove cash rows; otherwise the request fails with `400`.
        When neither taxonomy data nor a market value can be found for the holdings, the request fails with
        `400` and the message
        `No data found for the given parameters`.
      operationId: getEuTaxonomyAlignment
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ClassifiedHoldingsRequest'
            example:
              holdings:
                - name: Apple Inc.
                  isin: US0378331005
                  instrument_type: stock
                  currency: USD
                  weight: 40
                  market_value: 4000000
                - name: Microsoft Corp.
                  isin: US5949181045
                  instrument_type: stock
                  currency: USD
                  weight: 35
                  market_value: 3500000
                - name: Bund 2.6% 2033
                  isin: DE000BU2Z015
                  instrument_type: sovereign-bond
                  currency: EUR
                  weight: 25
                  market_value: 2500000
      responses:
        '201':
          description: EU Taxonomy figures for the holdings. Every value is a percentage.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      'taxonomy_alignment_%':
                        type: number
                        description: Taxonomy-aligned activities, across turnover, CapEx and OpEx.
                      'taxonomy_eligible_turnover_%':
                        type: number
                        description: Currently returns the same value as `taxonomy_alignment_turnover_%`. This is a known issue.
                      'taxonomy_alignment_turnover_%':
                        type: number
                        description: Taxonomy-aligned activities, by turnover.
                      'taxonomy_alignment_enabling_turnover_%':
                        type: number
                        description: Taxonomy-aligned enabling activities, by turnover.
                      'taxonomy_alignment_transitional_turnover_%':
                        type: number
                        description: Taxonomy-aligned transitional activities, by turnover.
                      'taxonomy_eligible_capex_%':
                        type: number
                        description: Currently returns the same value as `taxonomy_alignment_capex_%`. This is a known issue.
                      'taxonomy_alignment_capex_%':
                        type: number
                        description: Taxonomy-aligned activities, by CapEx.
                      'taxonomy_alignment_enabling_capex_%':
                        type: number
                        description: Taxonomy-aligned enabling activities, by CapEx.
                      'taxonomy_alignment_transitional_capex_%':
                        type: number
                        description: Taxonomy-aligned transitional activities, by CapEx.
                      'taxonomy_eligible_opex_%':
                        type: number
                        description: Currently returns the same value as `taxonomy_alignment_opex_%`. This is a known issue.
                      'taxonomy_alignment_opex_%':
                        type: number
                        description: Taxonomy-aligned activities, by OpEx.
                      'taxonomy_alignment_enabling_opex_%':
                        type: number
                        description: Taxonomy-aligned enabling activities, by OpEx.
                      'taxonomy_alignment_transitional_opex_%':
                        type: number
                        description: Taxonomy-aligned transitional activities, by OpEx.
                      'taxonomy_alignment_enabling_%':
                        type: number
                        description: Taxonomy-aligned enabling activities, across turnover, CapEx and OpEx.
                      'taxonomy_alignment_transitional_%':
                        type: number
                        description: Taxonomy-aligned transitional activities, across turnover, CapEx and OpEx.
                      'taxonomy_alignment_no_gas_and_nuclear_turnover_%':
                        type: number
                        description: Taxonomy-aligned activities, excluding fossil gas and nuclear, by turnover.
                      'taxonomy_alignment_no_gas_and_nuclear_capex_%':
                        type: number
                        description: Taxonomy-aligned activities, excluding fossil gas and nuclear, by CapEx.
                      'taxonomy_alignment_no_gas_and_nuclear_opex_%':
                        type: number
                        description: Taxonomy-aligned activities, excluding fossil gas and nuclear, by OpEx.
                      'taxonomy_alignment_fossil_gas_turnover_%':
                        type: number
                        description: Taxonomy-aligned fossil gas activities, by turnover.
                      'taxonomy_alignment_fossil_gas_capex_%':
                        type: number
                        description: Taxonomy-aligned fossil gas activities, by CapEx.
                      'taxonomy_alignment_fossil_gas_opex_%':
                        type: number
                        description: Taxonomy-aligned fossil gas activities, by OpEx.
                      'taxonomy_alignment_nuclear_turnover_%':
                        type: number
                        description: Taxonomy-aligned nuclear activities, by turnover.
                      'taxonomy_alignment_nuclear_capex_%':
                        type: number
                        description: Taxonomy-aligned nuclear activities, by CapEx.
                      'taxonomy_alignment_nuclear_opex_%':
                        type: number
                        description: Taxonomy-aligned nuclear activities, by OpEx.
                      'taxonomy_alignment_no_gas_and_nuclear_turnover_excluding_sovereign_bonds_%':
                        type: number
                        description: Taxonomy-aligned activities, excluding fossil gas and nuclear, by turnover, excluding sovereign bonds.
                      'taxonomy_alignment_no_gas_and_nuclear_capex_excluding_sovereign_bonds_%':
                        type: number
                        description: Taxonomy-aligned activities, excluding fossil gas and nuclear, by CapEx, excluding sovereign bonds.
                      'taxonomy_alignment_no_gas_and_nuclear_opex_excluding_sovereign_bonds_%':
                        type: number
                        description: Taxonomy-aligned activities, excluding fossil gas and nuclear, by OpEx, excluding sovereign bonds.
                      'taxonomy_alignment_fossil_gas_turnover_excluding_sovereign_bonds_%':
                        type: number
                        description: Taxonomy-aligned fossil gas activities, by turnover, excluding sovereign bonds.
                      'taxonomy_alignment_fossil_gas_capex_excluding_sovereign_bonds_%':
                        type: number
                        description: Taxonomy-aligned fossil gas activities, by CapEx, excluding sovereign bonds.
                      'taxonomy_alignment_fossil_gas_opex_excluding_sovereign_bonds_%':
                        type: number
                        description: Taxonomy-aligned fossil gas activities, by OpEx, excluding sovereign bonds.
                      'taxonomy_alignment_nuclear_turnover_excluding_sovereign_bonds_%':
                        type: number
                        description: Taxonomy-aligned nuclear activities, by turnover, excluding sovereign bonds.
                      'taxonomy_alignment_nuclear_capex_excluding_sovereign_bonds_%':
                        type: number
                        description: Taxonomy-aligned nuclear activities, by CapEx, excluding sovereign bonds.
              example:
                data:
                  'taxonomy_alignment_%': 8.6
                  'taxonomy_eligible_turnover_%': 6.8
                  'taxonomy_alignment_turnover_%': 6.8
                  'taxonomy_alignment_enabling_turnover_%': 3.1
                  'taxonomy_alignment_transitional_turnover_%': 0.9
                  'taxonomy_eligible_capex_%': 11.2
                  'taxonomy_alignment_capex_%': 11.2
                  'taxonomy_alignment_enabling_capex_%': 4.6
                  'taxonomy_alignment_transitional_capex_%': 1.4
                  'taxonomy_eligible_opex_%': 7.9
                  'taxonomy_alignment_opex_%': 7.9
                  'taxonomy_alignment_enabling_opex_%': 3.3
                  'taxonomy_alignment_transitional_opex_%': 1.0
                  'taxonomy_alignment_enabling_%': 3.7
                  'taxonomy_alignment_transitional_%': 1.1
                  'taxonomy_alignment_no_gas_and_nuclear_turnover_%': 6.5
                  'taxonomy_alignment_no_gas_and_nuclear_capex_%': 10.9
                  'taxonomy_alignment_no_gas_and_nuclear_opex_%': 7.6
                  'taxonomy_alignment_fossil_gas_turnover_%': 0.1
                  'taxonomy_alignment_fossil_gas_capex_%': 0.1
                  'taxonomy_alignment_fossil_gas_opex_%': 0.1
                  'taxonomy_alignment_nuclear_turnover_%': 0.2
                  'taxonomy_alignment_nuclear_capex_%': 0.2
                  'taxonomy_alignment_nuclear_opex_%': 0.2
                  'taxonomy_alignment_no_gas_and_nuclear_turnover_excluding_sovereign_bonds_%': 7.3
                  'taxonomy_alignment_no_gas_and_nuclear_capex_excluding_sovereign_bonds_%': 12.2
                  'taxonomy_alignment_no_gas_and_nuclear_opex_excluding_sovereign_bonds_%': 8.5
                  'taxonomy_alignment_fossil_gas_turnover_excluding_sovereign_bonds_%': 0.1
                  'taxonomy_alignment_fossil_gas_capex_excluding_sovereign_bonds_%': 0.1
                  'taxonomy_alignment_fossil_gas_opex_excluding_sovereign_bonds_%': 0.1
                  'taxonomy_alignment_nuclear_turnover_excluding_sovereign_bonds_%': 0.2
                  'taxonomy_alignment_nuclear_capex_excluding_sovereign_bonds_%': 0.2
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          $ref: '#/components/responses/ForbiddenFramework'
        '500':
          $ref: '#/components/responses/ServerError'
  /temperature-score/insights:
    post:
      tags:
        - Climate
      summary: Get temperature scores
      description: >-
        Not yet available on `https://eco.datia.app`. Contact customers@connect.earth for access.
        Returns a temperature score for each holding, using short-term targets across scopes 1, 2 and 3.
        Needs access to the temperature score framework. While scores are still being calculated,
        `portfolio.companies` lists your holdings without score fields and `job_metadata.is_lock` is `true`.
      operationId: getTemperatureScores
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ClassifiedHoldingsRequest'
            example:
              holdings:
                - name: Apple Inc.
                  isin: US0378331005
                  instrument_type: stock
                  currency: USD
                  weight: 40
                  market_value: 4000000
                - name: Microsoft Corp.
                  isin: US5949181045
                  instrument_type: stock
                  currency: USD
                  weight: 35
                  market_value: 3500000
                - name: iShares Core MSCI World UCITS ETF
                  isin: IE00B4L5Y983
                  instrument_type: etf
                  currency: USD
                  weight: 25
                  market_value: 2500000
      responses:
        '201':
          description: Temperature scores for the holdings.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      portfolio:
                        type: object
                        description: The holdings with their scores. May include additional fields.
                        properties:
                          companies:
                            type: array
                            description: Holdings that are not funds.
                            items:
                              type: object
                              description: May include additional fields.
                              properties:
                                isin:
                                  type: string
                                  description: ISIN of the holding.
                                name:
                                  type: string
                                  description: Name of the holding.
                                aum:
                                  type:
                                    - number
                                    - 'null'
                                  description: >-
                                    Weight of the holding as stored. If any holding has no weight (or a weight of 0),
                                    weights are worked out from market values.
                                market_value:
                                  type:
                                    - number
                                    - 'null'
                                  description: Market value of the holding.
                                temperature_score:
                                  type:
                                    - number
                                    - 'null'
                                  description: Temperature score in degrees Celsius, or `null` when there is no data.
                                target:
                                  type:
                                    - number
                                    - 'null'
                                  description: Average target value for the holding, or `null` when there is none.
                                base_year:
                                  type:
                                    - integer
                                    - 'null'
                                  description: Base year of the holding's targets.
                                industry:
                                  type:
                                    - string
                                    - 'null'
                                  description: Industry of the issuer.
                          funds:
                            type: array
                            description: Holdings that are funds.
                            items:
                              type: object
                              description: May include additional fields.
                              properties:
                                public_isin:
                                  type: string
                                  description: ISIN of the fund.
                                name:
                                  type: string
                                  description: Name of the fund.
                                aum:
                                  type:
                                    - number
                                    - 'null'
                                  description: >-
                                    Weight of the fund as stored. If any holding has no weight (or a weight of 0),
                                    weights are worked out from market values.
                                market_value:
                                  type:
                                    - number
                                    - 'null'
                                  description: Market value of the fund.
                                temperature_score:
                                  type:
                                    - number
                                    - 'null'
                                  description: Temperature score in degrees Celsius, or `null` when there is no data.
                                target:
                                  type:
                                    - number
                                    - 'null'
                                  description: Average target value for the fund, or `null` when there is none.
                                base_year:
                                  type:
                                    - integer
                                    - 'null'
                                  description: Base year of the fund's targets.
                          industries:
                            type: array
                            description: Industries found in the holdings.
                            items:
                              type: object
                              properties:
                                id:
                                  type: string
                                  description: Industry id.
                                name:
                                  type: string
                                  description: Industry name.
                      job_metadata:
                        type: object
                        description: State of the calculation. May include additional fields.
                        properties:
                          is_lock:
                            type: boolean
                            description: '`true` while scores are still being calculated.'
              example:
                data:
                  portfolio:
                    companies:
                      - isin: US0378331005
                        name: Apple Inc.
                        aum: 40
                        market_value: 4000000
                        temperature_score: 1.8
                        target: 1.6
                        base_year: 2019
                        industry: Technology Hardware & Equipment
                      - isin: US5949181045
                        name: Microsoft Corp.
                        aum: 35
                        market_value: 3500000
                        temperature_score: 1.6
                        target: 1.5
                        base_year: 2020
                        industry: Software & Services
                    funds:
                      - public_isin: IE00B4L5Y983
                        name: iShares Core MSCI World UCITS ETF
                        aum: 25
                        market_value: 2500000
                        temperature_score: 2.4
                        target: 2.1
                        base_year: 2019
                    industries:
                      - id: 4f1c2e6a9b0d3e7f8a5c1b2d6e9f0a3c
                        name: Technology Hardware & Equipment
                      - id: 9a7d3b5c1e2f4a6b8c0d2e4f6a8b0c1d
                        name: Software & Services
                  job_metadata:
                    is_lock: false
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          $ref: '#/components/responses/ForbiddenFramework'
        '500':
          $ref: '#/components/responses/ServerError'
components:
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key
      description: Your Connect Earth API key.
  schemas:
    PortfolioHolding:
      type: object
      description: >-
        Send a `name`, `currency` and non-zero `market_value` for every holding. ETF and mutual fund holdings
        without them are skipped without an error; other holdings without a valid `currency` make the request fail.
      properties:
        isin:
          type:
            - string
            - 'null'
          description: ISIN of the instrument. Use null for cash or instruments without an ISIN.
        name:
          type: string
          description: Name of the instrument.
        currency:
          type: string
          description: Currency of the market value, as an ISO 4217 code.
        weight:
          type: number
          description: >-
            Weight of the holding in the portfolio, from 0 to 100. A missing weight is stored as 0. Weights that
            add up to more than 100 are scaled down to a total of 100.
        market_value:
          type: number
          description: Market value of the holding, in `currency`.
        instrument_type:
          $ref: '#/components/schemas/InstrumentType'
    ReportHolding:
      type: object
      properties:
        isin:
          type: string
          description: ISIN of the instrument. `null` is not accepted.
        name:
          type: string
          description: Name of the instrument.
        currency:
          type: string
          description: Currency of the market value, as an ISO 4217 code.
        weight:
          type:
            - number
            - string
          description: Weight of the holding in the portfolio, from 0 to 100.
        market_value:
          type:
            - number
            - string
          description: >-
            Market value of the holding, in `currency`. ETF and mutual fund holdings with a zero or unreadable
            market value are skipped.
        instrument_type:
          $ref: '#/components/schemas/InstrumentType'
      required:
        - isin
        - name
        - currency
        - weight
        - market_value
    IsinHolding:
      type: object
      properties:
        isin:
          type: string
          description: ISIN of the instrument. Entries without an `isin` are skipped.
    ClassifiedHolding:
      type: object
      properties:
        isin:
          type: string
          description: ISIN of the instrument.
        name:
          type: string
          description: Name of the instrument.
        instrument_type:
          $ref: '#/components/schemas/InstrumentType'
        currency:
          type: string
          description: Currency of the market value, as an ISO 4217 code. Defaults to EUR.
        weight:
          type: number
          description: >-
            Weight of the holding in the portfolio, from 0 to 100. If any holding has no weight (or a weight of 0),
            weights are worked out from market values.
        market_value:
          type: number
          description: Market value of the holding, in `currency`. ETF and mutual fund holdings with a market value of 0 are skipped.
      required:
        - isin
        - name
        - instrument_type
        - market_value
    InstrumentType:
      type: string
      description: Type of instrument. A holding with a type outside this list is skipped, unless its ISIN is a known fund.
      enum:
        - stock
        - bond
        - etf
        - mutual-fund
        - cash
        - option
        - future
        - forward-contract
        - lending
        - other
        - warrant
        - sovereign-bond
    IsinHoldingsRequest:
      type: object
      properties:
        holdings:
          type: array
          description: Instruments to look up.
          items:
            $ref: '#/components/schemas/IsinHolding'
      required:
        - holdings
    ClassifiedHoldingsRequest:
      type: object
      properties:
        holdings:
          type: array
          description: Holdings to analyze. Must contain at least one holding.
          minItems: 1
          items:
            $ref: '#/components/schemas/ClassifiedHolding'
      required:
        - holdings
    SustainabilityProfile:
      type: object
      properties:
        classification:
          type:
            - integer
            - 'null'
          enum:
            - 6
            - 8
            - 9
            - null
          description: SFDR article, or `null` when it is not known.
        description:
          type:
            - string
            - 'null'
          enum:
            - Other
            - Environmental and social characteristics
            - Sustainability as an objective
            - null
          description: Name of the SFDR article.
        metadata:
          type: 'null'
    DataPoint:
      type: object
      properties:
        value:
          description: The value, usually a number.
          type:
            - number
            - string
            - boolean
            - 'null'
        unit:
          type:
            - string
            - 'null'
          description: Unit of the value, or `null` when it has none.
    InstrumentMetadata:
      type: object
      properties:
        isin:
          type: string
          description: ISIN you sent.
        is_fund:
          type: boolean
          description: Whether the ISIN is a fund. Left out when there is no data for the ISIN.
    Metadata:
      type: object
      properties:
        message:
          type: string
    PortfolioResult:
      type: object
      properties:
        identifier:
          type:
            - string
            - 'null'
          description: Identifier of the portfolio. Use it in `/portfolios/{identifier}`.
        metadata:
          $ref: '#/components/schemas/Metadata'
    Error:
      type: object
      properties:
        data:
          type: object
          properties:
            message:
              type: string
              description: >-
                What went wrong. When the request does not match the schema, this is
                `An error occurred while processing your request` and the reasons are in `error`.
              examples:
                - Please provide at least one holding
            error:
              description: Error detail. A string, an object, or a list of validation issues when the request does not match the schema.
              oneOf:
                - type: string
                - type: object
                - type: array
                  items:
                    $ref: '#/components/schemas/ValidationIssue'
    ValidationIssue:
      type: object
      properties:
        path:
          type: string
          description: Location of the problem in the request, for example `.body.snapshot_at`.
        message:
          type: string
          description: What is wrong with that value.
        errorCode:
          type: string
          description: Type of check that failed, for example `required.openapi.validation`.
  responses:
    BadRequest:
      description: >-
        The request is invalid. Usually `data.message` says why. When the request does not match the schema,
        `data.message` is `An error occurred while processing your request` and `data.error` lists each problem.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            validation:
              summary: Request does not match the schema
              value:
                data:
                  message: An error occurred while processing your request
                  error:
                    - path: .body.snapshot_at
                      message: should have required property 'snapshot_at'
                      errorCode: required.openapi.validation
            request:
              summary: Request rejected by the API
              value:
                data:
                  message: Please provide at least one holding
                  error: Unknown error. Please contact support
    Forbidden:
      description: Missing, invalid or inactive API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    ForbiddenFramework:
      description: Missing, invalid or inactive API key, or your organization has no access to the data family this route needs.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    ForbiddenInstruments:
      description: >-
        Missing, invalid or inactive API key, your organization has no access to the data family this route needs,
        or the request has more than 10,000 instruments.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    ServerError:
      description: Unexpected server error.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
