FactSet Portfolio Metadata API

The Portfolio Metadata API will allow users to read, write, and edit ACCTs and ACCT properties as well as ACTMs and components.

OpenAPI Specification

portfolio-metadata-openapi-original.yml Raw ↑
openapi: 3.0.3
info:
  title: Factset Portfolio Metadata
  version: 1.0.0
  description: Basic operations for portfolio metadata
  termsOfService: TOS
  contact:
    name: FactSet Research Systems
    url: https://developer.factset.com/contact
    email: [email protected]
  license:
    name: Apache License, Version 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0
servers:
  - description: production
    url: https://api.factset.com/analytics/portfolio-metadata/v1
security:
  - FactSetApiKey: []
  - FactSetOAuth2: []
paths:
  /account-composite:
    post:
      operationId: createAccountComposite
      description: Create a new account composite
      tags:
        - Account Composite
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/createAccountCompositeRequest'
      responses:
        '201':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/createAccountCompositeResponse'
        '400':
          $ref: '#/components/responses/BadRequestErrorResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedErrorResponse'
        '403':
          $ref: '#/components/responses/ForbiddenErrorResponse'
        '406':
          $ref: '#/components/responses/NotAcceptableErrorResponse'
        '409':
          $ref: '#/components/responses/ConflictErrorResponse'
        '415':
          $ref: '#/components/responses/UnsupportedMediaTypeErrorResponse'
        '500':
          $ref: '#/components/responses/InternalServerErrorResponse'
        '501':
          $ref: '#/components/responses/NotImplementedErrorResponse'
    get:
      operationId: listAccountComposite
      description: List account composite
      tags:
        - Account Composite
      parameters:
        - name: path
          in: query
          required: false
          schema:
            type: string
            default: 'Client:'
            example: string
          description: Directory to list
        - name: name
          in: query
          required: false
          schema:
            type: string
            example: string
          description: Return only files whose name includes this query
        - name: description
          in: query
          required: false
          schema:
            type: string
            example: string
          description: Return only files whose name includes this query
        - name: _paginationLimit
          in: query
          required: false
          schema:
            type: number
            default: 100
            example: 0
          description: Number of directory items to return
        - name: _paginationCursor
          in: query
          required: false
          schema:
            type: string
            example: string
          description: Cursor used for paging.  Fetch items after the specified cursor
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listAccountCompositeResponse'
        '400':
          $ref: '#/components/responses/BadRequestErrorResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedErrorResponse'
        '403':
          $ref: '#/components/responses/ForbiddenErrorResponse'
        '404':
          $ref: '#/components/responses/NotFoundErrorResponse'
        '406':
          $ref: '#/components/responses/NotAcceptableErrorResponse'
        '415':
          $ref: '#/components/responses/UnsupportedMediaTypeErrorResponse'
        '500':
          $ref: '#/components/responses/InternalServerErrorResponse'
        '501':
          $ref: '#/components/responses/NotImplementedErrorResponse'
  /account-composite/{id}:
    delete:
      operationId: deleteAccountComposite
      description: Remove a account composite
      tags:
        - Account Composite
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            example: 270c2fa8-9110-444b-9101-17e10132fe0a
          description: Unique identifier for the account composite to be deleted
          example: 270c2fa8-9110-444b-9101-17e10132fe0a
        - name: reason
          in: query
          required: false
          schema:
            type: string
            example: string
          description: User auditable reason that the account composite is being removed
      responses:
        '204':
          description: Success
        '400':
          $ref: '#/components/responses/BadRequestErrorResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedErrorResponse'
        '403':
          $ref: '#/components/responses/ForbiddenErrorResponse'
        '404':
          $ref: '#/components/responses/NotFoundErrorResponse'
        '406':
          $ref: '#/components/responses/NotAcceptableErrorResponse'
        '409':
          $ref: '#/components/responses/ConflictErrorResponse'
        '415':
          $ref: '#/components/responses/UnsupportedMediaTypeErrorResponse'
        '500':
          $ref: '#/components/responses/InternalServerErrorResponse'
        '501':
          $ref: '#/components/responses/NotImplementedErrorResponse'
    get:
      operationId: readAccountComposite
      description: Read a account composite
      tags:
        - Account Composite
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            example: 270c2fa8-9110-444b-9101-17e10132fe0a
          description: Unique identifier of the account composite to be read
          example: 270c2fa8-9110-444b-9101-17e10132fe0a
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/readAccountCompositeResponse'
        '400':
          $ref: '#/components/responses/BadRequestErrorResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedErrorResponse'
        '403':
          $ref: '#/components/responses/ForbiddenErrorResponse'
        '404':
          $ref: '#/components/responses/NotFoundErrorResponse'
        '406':
          $ref: '#/components/responses/NotAcceptableErrorResponse'
        '415':
          $ref: '#/components/responses/UnsupportedMediaTypeErrorResponse'
        '500':
          $ref: '#/components/responses/InternalServerErrorResponse'
        '501':
          $ref: '#/components/responses/NotImplementedErrorResponse'
    put:
      operationId: updateAccountComposite
      description: Modify a account composite
      tags:
        - Account Composite
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            example: 270c2fa8-9110-444b-9101-17e10132fe0a
          description: Unique identifier for the account composite to be updated
          example: 270c2fa8-9110-444b-9101-17e10132fe0a
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/updateAccountCompositeRequest'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/updateAccountCompositeResponse'
        '400':
          $ref: '#/components/responses/BadRequestErrorResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedErrorResponse'
        '403':
          $ref: '#/components/responses/ForbiddenErrorResponse'
        '404':
          $ref: '#/components/responses/NotFoundErrorResponse'
        '406':
          $ref: '#/components/responses/NotAcceptableErrorResponse'
        '415':
          $ref: '#/components/responses/UnsupportedMediaTypeErrorResponse'
        '500':
          $ref: '#/components/responses/InternalServerErrorResponse'
        '501':
          $ref: '#/components/responses/NotImplementedErrorResponse'
  /account:
    post:
      operationId: createAccount
      description: Create a new account
      tags:
        - Account
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/createAccountRequest'
      responses:
        '201':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/createAccountResponse'
        '400':
          $ref: '#/components/responses/BadRequestErrorResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedErrorResponse'
        '403':
          $ref: '#/components/responses/ForbiddenErrorResponse'
        '406':
          $ref: '#/components/responses/NotAcceptableErrorResponse'
        '409':
          $ref: '#/components/responses/ConflictErrorResponse'
        '415':
          $ref: '#/components/responses/UnsupportedMediaTypeErrorResponse'
        '500':
          $ref: '#/components/responses/InternalServerErrorResponse'
        '501':
          $ref: '#/components/responses/NotImplementedErrorResponse'
    get:
      operationId: listAccount
      description: List account
      tags:
        - Account
      parameters:
        - name: path
          in: query
          required: false
          schema:
            type: string
            default: 'Client:'
            example: string
          description: Directory to list
        - name: name
          in: query
          required: false
          schema:
            type: string
            example: string
          description: Return only files whose name includes this query
        - name: description
          in: query
          required: false
          schema:
            type: string
            example: string
          description: Return only files whose name includes this query
        - name: _paginationLimit
          in: query
          required: false
          schema:
            type: number
            default: 100
            example: 0
          description: Number of directory items to return
        - name: _paginationCursor
          in: query
          required: false
          schema:
            type: string
            example: string
          description: Cursor used for paging.  Fetch items after the specified cursor
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listAccountResponse'
        '400':
          $ref: '#/components/responses/BadRequestErrorResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedErrorResponse'
        '403':
          $ref: '#/components/responses/ForbiddenErrorResponse'
        '404':
          $ref: '#/components/responses/NotFoundErrorResponse'
        '406':
          $ref: '#/components/responses/NotAcceptableErrorResponse'
        '415':
          $ref: '#/components/responses/UnsupportedMediaTypeErrorResponse'
        '500':
          $ref: '#/components/responses/InternalServerErrorResponse'
        '501':
          $ref: '#/components/responses/NotImplementedErrorResponse'
  /account/{id}:
    delete:
      operationId: deleteAccount
      description: Remove a account
      tags:
        - Account
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            example: 270c2fa8-9110-444b-9101-17e10132fe0a
          description: Unique identifier for the account to be deleted
          example: 270c2fa8-9110-444b-9101-17e10132fe0a
        - name: reason
          in: query
          required: false
          schema:
            type: string
            example: string
          description: User auditable reason that the account is being removed
      responses:
        '204':
          description: Success
        '400':
          $ref: '#/components/responses/BadRequestErrorResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedErrorResponse'
        '403':
          $ref: '#/components/responses/ForbiddenErrorResponse'
        '404':
          $ref: '#/components/responses/NotFoundErrorResponse'
        '406':
          $ref: '#/components/responses/NotAcceptableErrorResponse'
        '409':
          $ref: '#/components/responses/ConflictErrorResponse'
        '415':
          $ref: '#/components/responses/UnsupportedMediaTypeErrorResponse'
        '500':
          $ref: '#/components/responses/InternalServerErrorResponse'
        '501':
          $ref: '#/components/responses/NotImplementedErrorResponse'
    get:
      operationId: readAccount
      description: Read a account
      tags:
        - Account
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            example: 270c2fa8-9110-444b-9101-17e10132fe0a
          description: Unique identifier of the account to be read
          example: 270c2fa8-9110-444b-9101-17e10132fe0a
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/readAccountResponse'
        '400':
          $ref: '#/components/responses/BadRequestErrorResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedErrorResponse'
        '403':
          $ref: '#/components/responses/ForbiddenErrorResponse'
        '404':
          $ref: '#/components/responses/NotFoundErrorResponse'
        '406':
          $ref: '#/components/responses/NotAcceptableErrorResponse'
        '415':
          $ref: '#/components/responses/UnsupportedMediaTypeErrorResponse'
        '500':
          $ref: '#/components/responses/InternalServerErrorResponse'
        '501':
          $ref: '#/components/responses/NotImplementedErrorResponse'
    put:
      operationId: updateAccount
      description: Modify a account
      tags:
        - Account
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            example: 270c2fa8-9110-444b-9101-17e10132fe0a
          description: Unique identifier for the account to be updated
          example: 270c2fa8-9110-444b-9101-17e10132fe0a
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/updateAccountRequest'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/updateAccountResponse'
        '400':
          $ref: '#/components/responses/BadRequestErrorResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedErrorResponse'
        '403':
          $ref: '#/components/responses/ForbiddenErrorResponse'
        '404':
          $ref: '#/components/responses/NotFoundErrorResponse'
        '406':
          $ref: '#/components/responses/NotAcceptableErrorResponse'
        '415':
          $ref: '#/components/responses/UnsupportedMediaTypeErrorResponse'
        '500':
          $ref: '#/components/responses/InternalServerErrorResponse'
        '501':
          $ref: '#/components/responses/NotImplementedErrorResponse'
  /holdings-composite/{id}:
    get:
      operationId: readHoldingsComposite
      description: Read a holdings composite
      tags:
        - Holdings Composite
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            example: 270c2fa8-9110-444b-9101-17e10132fe0a
          description: Unique identifier of the holdings composite to be read
          example: 270c2fa8-9110-444b-9101-17e10132fe0a
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/readHoldingsCompositeResponse'
        '400':
          $ref: '#/components/responses/BadRequestErrorResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedErrorResponse'
        '403':
          $ref: '#/components/responses/ForbiddenErrorResponse'
        '404':
          $ref: '#/components/responses/NotFoundErrorResponse'
        '406':
          $ref: '#/components/responses/NotAcceptableErrorResponse'
        '415':
          $ref: '#/components/responses/UnsupportedMediaTypeErrorResponse'
        '500':
          $ref: '#/components/responses/InternalServerErrorResponse'
        '501':
          $ref: '#/components/responses/NotImplementedErrorResponse'
  /holdings/{id}:
    get:
      operationId: readHoldings
      description: Read a holdings
      tags:
        - Holdings
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            example: 270c2fa8-9110-444b-9101-17e10132fe0a
          description: Unique identifier of the holdings to be read
          example: 270c2fa8-9110-444b-9101-17e10132fe0a
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/readHoldingsResponse'
        '400':
          $ref: '#/components/responses/BadRequestErrorResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedErrorResponse'
        '403':
          $ref: '#/components/responses/ForbiddenErrorResponse'
        '404':
          $ref: '#/components/responses/NotFoundErrorResponse'
        '406':
          $ref: '#/components/responses/NotAcceptableErrorResponse'
        '415':
          $ref: '#/components/responses/UnsupportedMediaTypeErrorResponse'
        '500':
          $ref: '#/components/responses/InternalServerErrorResponse'
        '501':
          $ref: '#/components/responses/NotImplementedErrorResponse'
  /returns-composite/{id}:
    get:
      operationId: readReturnsComposite
      description: Read a returns composite
      tags:
        - Returns Composite
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            example: 270c2fa8-9110-444b-9101-17e10132fe0a
          description: Unique identifier of the returns composite to be read
          example: 270c2fa8-9110-444b-9101-17e10132fe0a
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/readReturnsCompositeResponse'
        '400':
          $ref: '#/components/responses/BadRequestErrorResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedErrorResponse'
        '403':
          $ref: '#/components/responses/ForbiddenErrorResponse'
        '404':
          $ref: '#/components/responses/NotFoundErrorResponse'
        '406':
          $ref: '#/components/responses/NotAcceptableErrorResponse'
        '415':
          $ref: '#/components/responses/UnsupportedMediaTypeErrorResponse'
        '500':
          $ref: '#/components/responses/InternalServerErrorResponse'
        '501':
          $ref: '#/components/responses/NotImplementedErrorResponse'
  /returns/{id}:
    get:
      operationId: readReturns
      description: Read a returns
      tags:
        - Returns
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            example: 270c2fa8-9110-444b-9101-17e10132fe0a
          description: Unique identifier of the returns to be read
          example: 270c2fa8-9110-444b-9101-17e10132fe0a
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/readReturnsResponse'
        '400':
          $ref: '#/components/responses/BadRequestErrorResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedErrorResponse'
        '403':
          $ref: '#/components/responses/ForbiddenErrorResponse'
        '404':
          $ref: '#/components/responses/NotFoundErrorResponse'
        '406':
          $ref: '#/components/responses/NotAcceptableErrorResponse'
        '415':
          $ref: '#/components/responses/UnsupportedMediaTypeErrorResponse'
        '500':
          $ref: '#/components/responses/InternalServerErrorResponse'
        '501':
          $ref: '#/components/responses/NotImplementedErrorResponse'
  /trade-data/{id}:
    get:
      operationId: readTradeData
      description: Read a trade data
      tags:
        - Trade Data
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            example: 270c2fa8-9110-444b-9101-17e10132fe0a
          description: Unique identifier of the trade data to be read
          example: 270c2fa8-9110-444b-9101-17e10132fe0a
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/readTradeDataResponse'
        '400':
          $ref: '#/components/responses/BadRequestErrorResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedErrorResponse'
        '403':
          $ref: '#/components/responses/ForbiddenErrorResponse'
        '404':
          $ref: '#/components/responses/NotFoundErrorResponse'
        '406':
          $ref: '#/components/responses/NotAcceptableErrorResponse'
        '415':
          $ref: '#/components/responses/UnsupportedMediaTypeErrorResponse'
        '500':
          $ref: '#/components/responses/InternalServerErrorResponse'
        '501':
          $ref: '#/components/responses/NotImplementedErrorResponse'
  /user-defined-field-group:
    get:
      operationId: listUserDefinedFieldGroups
      description: List user defined groups
      tags:
        - User Defined Field Group
      parameters:
        - name: name
          in: query
          required: false
          schema:
            type: string
            example: string
          description: Return only files whose name includes this query
        - name: _paginationLimit
          in: query
          required: false
          schema:
            type: number
            default: 100
            example: 0
          description: Number of groups to return
        - name: _paginationCursor
          in: query
          required: false
          schema:
            type: string
            example: string
          description: Cursor used for paging.  Fetch items after the specified cursor
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listUserDefinedFieldGroupsResponse'
        '400':
          $ref: '#/components/responses/BadRequestErrorResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedErrorResponse'
        '403':
          $ref: '#/components/responses/ForbiddenErrorResponse'
        '404':
          $ref: '#/components/responses/NotFoundErrorResponse'
        '406':
          $ref: '#/components/responses/NotAcceptableErrorResponse'
        '415':
          $ref: '#/components/responses/UnsupportedMediaTypeErrorResponse'
        '500':
          $ref: '#/components/responses/InternalServerErrorResponse'
        '501':
          $ref: '#/components/responses/NotImplementedErrorResponse'
  /user-defined-field-group/{id}:
    get:
      operationId: readUserDefinedGroup
      description: Read a specific user defined field group and list its fields.
      tags:
        - User Defined Field Group
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            example: 270c2fa8-9110-444b-9101-17e10132fe0a
          description: Unique identifer for the group to be read.
        - name: _paginationLimit
          in: query
          required: false
          schema:
            type: number
            default: 100
            example: 0
          description: Number of fields to list from this group
        - name: _paginationCursor
          in: query
          required: false
          schema:
            type: string
            example: string
          description: Cursor used for paging.  Fetch fields after the specified cursor
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/readUserDefinedGroupResponse'
        '400':
          $ref: '#/components/responses/BadRequestErrorResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedErrorResponse'
        '403':
          $ref: '#/components/responses/ForbiddenErrorResponse'
        '404':
          $ref: '#/components/responses/NotFoundErrorResponse'
        '406':
          $ref: '#/components/responses/NotAcceptableErrorResponse'
        '415':
          $ref: '#/components/responses/UnsupportedMediaTypeErrorResponse'
        '500':
          $ref: '#/components/responses/InternalServerErrorResponse'
        '501':
          $ref: '#/components/responses/NotImplementedErrorResponse'
  /user-defined-field:
    get:
      operationId: listUserDefinedFields
      description: List user defined fields
      tags:
        - User Defined Field
      parameters:
        - name: database
          in: query
          required: false
          schema:
            type: string
            enum:
              - CLIENT
              - FACTSET
              - SUPER_CLIENT
            default: CLIENT
            example: CLIENT
          description: Database where the fields are defined.
        - name: name
          in: query
          required: false
          schema:
            type: string
            example: string
          description: Return only fields whose name includes this query
        - name: group
          in: query
          required: false
          schema:
            type: string
            example: string
          description: Return only fields whose group includes this query
        - name: _paginationLimit
          in: query
          required: false
          schema:
            type: number
            default: 100
            example: 0
          description: Number of fields to return
        - name: _paginationCursor
          in: query
          required: false
          schema:
            type: string
            example: string
          description: Cursor used for paging.  Fetch items after the specified cursor
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listUserDefinedFieldsResponse'
        '400':
          $ref: '#/components/responses/BadRequestErrorResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedErrorResponse'
        '403':
          $ref: '#/components/responses/ForbiddenErrorResponse'
        '404':
          $ref: '#/components/responses/NotFoundErrorResponse'
        '406':
          $ref: '#/components/responses/NotAcceptableErrorResponse'
        '415':
          $ref: '#/components/responses/UnsupportedMediaTypeErrorResponse'
        '500':
          $ref: '#/components/responses/InternalServerErrorResponse'
        '501':
          $ref: '#/components/responses/NotImplementedErrorResponse'
  /user-defined-field/{id}:
    get:
      operationId: readUserDefinedField
      description: Read a user defined field
      tags:
        - User Defined Field
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            example: 270c2fa8-9110-444b-9101-17e10132fe0a
          description: Unique identifier of the user defined field to be read
          example: 270c2fa8-9110-444b-9101-17e10132fe0a
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/readUserDefinedFieldResponse'
        '400':
          $ref: '#/components/responses/BadRequestErrorResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedErrorResponse'
        '403':
          $ref: '#/components/responses/ForbiddenErrorResponse'
        '404':
          $ref: '#/components/responses/NotFoundErrorResponse'
        '406':
          $ref: '#/components/responses/NotAcceptableErrorResponse'
        '415':
          $ref: '#/components/responses/UnsupportedMediaTypeErrorResponse'
        '500':
          $ref: '#/components/responses/InternalServerErrorResponse'
        '501':
          $ref: '#/components/responses/NotImplementedErrorResponse'
externalDocs:
  description: API Documentation
  url: https://developer.factset.com/api-catalog/portfolio-metadata-api
components:
  securitySchemes:
    FactSetOAuth2:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://auth.factset.com/as/token.oauth2
          scopes: {}
    FactSetApiKey:
      type: http
      scheme: basic
  parameters: {}
  requestBodies: {}
  responses:
    BadRequestErrorResponse:
      description: >-
        The server cannot or will not process the request due to an apparent
        client error (e.g., malformed request syntax, size too large, invalid
        request message framing, or deceptive request routing).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Errors'
    UnauthorizedErrorResponse:
      description: >-
        Similar to 403 Forbidden, but specifically for use when authentication
        is required and has failed or has not yet been provided.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Errors'
    ForbiddenErrorResponse:
      description: >-
        The request contained valid data and was understood by the server, but
        the server is refusing action. This may be due to the user not having
        the necessary permissions for a resource or needing an account of some
        sort, or attempting a prohibited action.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Errors'
    NotFoundErrorResponse:
      description: >-
        The requested resource could not be found but may be available in the
        future. Subsequent requests by the client are permissible.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Errors'
    NotAcceptableErrorResponse:
      description: >-
        The requested resource is capable of generating only content not
        acceptable according to the Accept headers sent in the request.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Errors'
    ConflictErrorResponse:
      description: >-
        Indicates that the request could not be processed because of conflict in
        the current state of the resource, such as an edit conflict between
        multiple simultaneous updates.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Errors'
    UnsupportedMediaTypeErrorResponse:
      description: >-
        The request entity has a media type which the server or resource does
        not support.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Errors'
    InternalServerErrorResponse:
      description: ''
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Errors'
    NotImplementedErrorResponse:
      description: ''
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Errors'
  schemas:
    Errors:
      type: object
      description: Information about one or more errors
      properties:
        errors:
          type: array
          description: List of errors
          items:
            type: object
            properties:
              id:
                type: string
     

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