FactSet Virtual Portfolio API for Digital Portals

Virtual portfolios empower self-directed investors to define, track and realize their mid- to long-term financial strategies.

OpenAPI Specification

factset-virtual-portfolio-api-for-digital-portals-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: FactSet Virtual Portfolio API for Digital Portals
  description: |-

    Virtual portfolios empower self-directed investors to define, track and
    realize their mid- to long-term financial strategies
  version: '2'
servers:
  - url: https://api.factset.com/wealth/v1
paths:
  /portfolio/create:
    post:
      tags:
        - Portfolio
      operationId: post/portfolio/create
      x-supportsOffsetBasedPaging: false
      x-supportsOffsetBasedPagingWithoutTotal: false
      x-supportsCursorBasedPaging: false
      x-supportsCursorBasedPagingWithoutTotal: false
      x-supportsPush: false
      x-requiresUser: true
      x-requiresInternalClient: false
      x-disallowUser: false
      x-no-merge: true
      x-maxSortParameterCount: 10
      x-supportsPermissionDeniedResponse: false
      description: |-
        Create a portfolio.

        Certain error conditions yield errors as follows: 

        |Error Condition|HTTP Error|
        |-------|--------|
        |The number of portfolios would exceed 100.|400 Bad Request|
      summary: Create a portfolio.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostPortfolioCreateRequest'
      responses:
        '201':
          $ref: '#/components/responses/PostPortfolioCreate201Response'
      parameters: []
  /portfolio/delete:
    post:
      tags:
        - Portfolio
      operationId: post/portfolio/delete
      x-supportsOffsetBasedPaging: false
      x-supportsOffsetBasedPagingWithoutTotal: false
      x-supportsCursorBasedPaging: false
      x-supportsCursorBasedPagingWithoutTotal: false
      x-supportsPush: false
      x-requiresUser: true
      x-requiresInternalClient: false
      x-disallowUser: false
      x-no-merge: true
      x-maxSortParameterCount: 10
      x-supportsPermissionDeniedResponse: false
      description: Delete a portfolio.
      summary: Delete a portfolio.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostPortfolioDeleteRequest'
      responses:
        '200':
          $ref: '#/components/responses/PostPortfolioDelete200Response'
      parameters: []
  /portfolio/get:
    get:
      tags:
        - Portfolio
      operationId: get/portfolio/get
      x-supportsOffsetBasedPaging: false
      x-supportsOffsetBasedPagingWithoutTotal: false
      x-supportsCursorBasedPaging: false
      x-supportsCursorBasedPagingWithoutTotal: false
      x-supportsPush: false
      x-requiresUser: true
      x-requiresInternalClient: false
      x-disallowUser: false
      x-no-merge: false
      x-maxSortParameterCount: 10
      x-supportsPermissionDeniedResponse: false
      description: Details of a portfolio.
      summary: Details of a portfolio.
      parameters:
        - name: id
          in: query
          schema:
            description: Identifier of the portfolio.
            type: string
            format: id64
            x-positive: true
          required: true
        - name: _attributes
          in: query
          schema:
            type: array
            items:
              type: string
              maxLength: 100
              exclusiveMaximum: false
            uniqueItems: true
            maxItems: 50
          style: form
          explode: false
          description: Limit the attributes returned in the response to the specified set.
      responses:
        '200':
          $ref: '#/components/responses/GetPortfolioGet200Response'
  /portfolio/list:
    get:
      tags:
        - Portfolio
      operationId: get/portfolio/list
      x-supportsOffsetBasedPaging: false
      x-supportsOffsetBasedPagingWithoutTotal: false
      x-supportsCursorBasedPaging: false
      x-supportsCursorBasedPagingWithoutTotal: false
      x-supportsPush: false
      x-requiresUser: true
      x-requiresInternalClient: false
      x-disallowUser: false
      x-no-merge: false
      x-maxSortParameterCount: 2
      x-supportsPermissionDeniedResponse: false
      description: List of portfolios with keyfigures.
      summary: List of portfolios with keyfigures.
      responses:
        '200':
          $ref: '#/components/responses/GetPortfolioList200Response'
      parameters:
        - name: _attributes
          in: query
          schema:
            type: array
            items:
              type: string
              maxLength: 100
              exclusiveMaximum: false
            uniqueItems: true
            maxItems: 50
          style: form
          explode: false
          description: Limit the attributes returned in the response to the specified set.
        - description: >-
            Sortable attributes. The sort order is ascending unless it is
            prefixed with a minus sign, in which case it is descending. A list
            of at most 2 (possibly prefixed) attribute name(s) is allowed.
          schema:
            type: array
            items:
              type: string
              enum:
                - id
                - '-id'
                - name
                - '-name'
            maxItems: 2
            uniqueItems: true
            default:
              - name
          style: form
          explode: false
          name: _sort
          in: query
  /portfolio/modify:
    post:
      tags:
        - Portfolio
        - Modify
      operationId: post/portfolio/modify
      x-supportsOffsetBasedPaging: false
      x-supportsOffsetBasedPagingWithoutTotal: false
      x-supportsCursorBasedPaging: false
      x-supportsCursorBasedPagingWithoutTotal: false
      x-supportsPush: false
      x-requiresUser: true
      x-requiresInternalClient: false
      x-disallowUser: false
      x-no-merge: true
      x-maxSortParameterCount: 10
      x-supportsPermissionDeniedResponse: false
      description: Modify a portfolio.
      summary: Modify a portfolio.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostPortfolioModifyRequest'
      responses:
        '200':
          $ref: '#/components/responses/PostPortfolioModify200Response'
      parameters: []
  /portfolio/evaluation/list:
    post:
      tags:
        - Portfolio
        - Evaluations
      operationId: post/portfolio/evaluation/list
      x-supportsOffsetBasedPaging: false
      x-supportsOffsetBasedPagingWithoutTotal: false
      x-supportsCursorBasedPaging: false
      x-supportsCursorBasedPagingWithoutTotal: false
      x-supportsPush: false
      x-requiresUser: true
      x-requiresInternalClient: false
      x-disallowUser: false
      x-no-merge: false
      x-maxSortParameterCount: 10
      x-supportsPermissionDeniedResponse: false
      description: >-
        Performs an evaluation over a period of time and returns portfolio key
        figures for each day, week, or month.
      summary: Evaluate a portfolio.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostPortfolioEvaluationListRequest'
      responses:
        '200':
          $ref: '#/components/responses/PostPortfolioEvaluationList200Response'
      parameters: []
  /portfolio/name/list:
    get:
      tags:
        - Portfolio
        - Name
      operationId: get/portfolio/name/list
      x-supportsOffsetBasedPaging: false
      x-supportsOffsetBasedPagingWithoutTotal: false
      x-supportsCursorBasedPaging: false
      x-supportsCursorBasedPagingWithoutTotal: false
      x-supportsPush: false
      x-requiresUser: true
      x-requiresInternalClient: false
      x-disallowUser: false
      x-no-merge: false
      x-maxSortParameterCount: 2
      x-supportsPermissionDeniedResponse: false
      description: List of portfolios.
      summary: List of portfolios.
      responses:
        '200':
          $ref: '#/components/responses/GetPortfolioNameList200Response'
      parameters:
        - name: _attributes
          in: query
          schema:
            type: array
            items:
              type: string
              maxLength: 100
              exclusiveMaximum: false
            uniqueItems: true
            maxItems: 50
          style: form
          explode: false
          description: Limit the attributes returned in the response to the specified set.
        - description: >-
            Sortable attributes. The sort order is ascending unless it is
            prefixed with a minus sign, in which case it is descending. A list
            of at most 2 (possibly prefixed) attribute name(s) is allowed.
          schema:
            type: array
            items:
              type: string
              enum:
                - id
                - '-id'
                - name
                - '-name'
            maxItems: 2
            uniqueItems: true
            default:
              - name
          style: form
          explode: false
          name: _sort
          in: query
  /portfolio/payout/create:
    post:
      tags:
        - Portfolio
        - Payouts
      operationId: post/portfolio/payout/create
      x-supportsOffsetBasedPaging: false
      x-supportsOffsetBasedPagingWithoutTotal: false
      x-supportsCursorBasedPaging: false
      x-supportsCursorBasedPagingWithoutTotal: false
      x-supportsPush: false
      x-requiresUser: true
      x-requiresInternalClient: false
      x-disallowUser: false
      x-no-merge: true
      x-maxSortParameterCount: 10
      x-supportsPermissionDeniedResponse: false
      description: Add a payout to a portfolio.
      summary: Add a payout to a portfolio.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostPortfolioPayoutCreateRequest'
      responses:
        '201':
          $ref: '#/components/responses/PostPortfolioPayoutCreate201Response'
      parameters: []
  /portfolio/payout/delete:
    post:
      tags:
        - Portfolio
        - Payouts
      operationId: post/portfolio/payout/delete
      x-supportsOffsetBasedPaging: false
      x-supportsOffsetBasedPagingWithoutTotal: false
      x-supportsCursorBasedPaging: false
      x-supportsCursorBasedPagingWithoutTotal: false
      x-supportsPush: false
      x-requiresUser: true
      x-requiresInternalClient: false
      x-disallowUser: false
      x-no-merge: true
      x-maxSortParameterCount: 10
      x-supportsPermissionDeniedResponse: false
      description: |-
        Delete a payout of a portfolio.

        Certain error conditions yield errors as follows: 

        |Error Condition|HTTP Error|
        |-------|--------|
        |Invalid payout identifier.|400 Bad Request|
      summary: Delete a payout of a portfolio.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostPortfolioPayoutDeleteRequest'
      responses:
        '200':
          $ref: '#/components/responses/PostPortfolioPayoutDelete200Response'
      parameters: []
  /portfolio/payout/list:
    post:
      tags:
        - Portfolio
        - Payouts
      operationId: post/portfolio/payout/list
      x-supportsOffsetBasedPaging: true
      x-supportsOffsetBasedPagingWithoutTotal: false
      x-supportsCursorBasedPaging: false
      x-supportsCursorBasedPagingWithoutTotal: false
      x-supportsPush: false
      x-requiresUser: true
      x-requiresInternalClient: false
      x-disallowUser: false
      x-no-merge: false
      x-maxSortParameterCount: 3
      x-supportsPermissionDeniedResponse: false
      description: List of payouts in a portfolio.
      summary: List of payouts in a portfolio.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostPortfolioPayoutListRequest'
      responses:
        '200':
          $ref: '#/components/responses/PostPortfolioPayoutList200Response'
      parameters: []
  /portfolio/payout/modify:
    post:
      tags:
        - Portfolio
        - Payouts
        - Modify
      operationId: post/portfolio/payout/modify
      x-supportsOffsetBasedPaging: false
      x-supportsOffsetBasedPagingWithoutTotal: false
      x-supportsCursorBasedPaging: false
      x-supportsCursorBasedPagingWithoutTotal: false
      x-supportsPush: false
      x-requiresUser: true
      x-requiresInternalClient: false
      x-disallowUser: false
      x-no-merge: true
      x-maxSortParameterCount: 10
      x-supportsPermissionDeniedResponse: false
      description: >-
        Modify a payout in a portfolio.


        Certain error conditions yield errors as follows: 


        |Error Condition|HTTP Error|

        |-------|--------|

        |At least one of the parameters `notation`, `type`, `amount`,
        `transaction` or `time` must be set.|400 Bad Request|

        |Invalid payout identifier.|400 Bad Request|
      summary: Modify a payout in a portfolio.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostPortfolioPayoutModifyRequest'
      responses:
        '200':
          $ref: '#/components/responses/PostPortfolioPayoutModify200Response'
      parameters: []
  /portfolio/position/list:
    get:
      tags:
        - Portfolio
        - Positions
      operationId: get/portfolio/position/list
      x-supportsOffsetBasedPaging: true
      x-supportsOffsetBasedPagingWithoutTotal: false
      x-supportsCursorBasedPaging: false
      x-supportsCursorBasedPagingWithoutTotal: false
      x-supportsPush: false
      x-requiresUser: true
      x-requiresInternalClient: false
      x-disallowUser: false
      x-no-merge: false
      x-maxSortParameterCount: 10
      x-supportsPermissionDeniedResponse: false
      description: List all open positions of a portfolio.
      summary: List all open positions of a portfolio.
      parameters:
        - name: id
          in: query
          schema:
            description: Identifier of the portfolio.
            type: string
            format: id64
            x-positive: true
          required: true
        - name: _attributes
          in: query
          schema:
            type: array
            items:
              type: string
              maxLength: 100
              exclusiveMaximum: false
            uniqueItems: true
            maxItems: 50
          style: form
          explode: false
          description: Limit the attributes returned in the response to the specified set.
        - name: _language
          in: query
          schema:
            type: string
            format: isoLanguage
            description: ISO 639-1 code of the language.
            maxLength: 2
            minLength: 2
            exclusiveMinimum: false
            exclusiveMaximum: false
        - description: >-
            Sortable attributes. The sort order is ascending unless it is
            prefixed with a minus sign, in which case it is descending. A list
            of at most 10 (possibly prefixed) attribute name(s) is allowed.
          schema:
            type: array
            items:
              type: string
              enum:
                - positions.instrument.name
                - '-positions.instrument.name'
                - positions.instrument.shortName
                - '-positions.instrument.shortName'
                - positions.instrument.assetClass.code
                - '-positions.instrument.assetClass.code'
                - positions.instrument.type.name
                - '-positions.instrument.type.name'
                - positions.shares.open
                - '-positions.shares.open'
                - positions.purchase.value
                - '-positions.purchase.value'
                - positions.value
                - '-positions.value'
                - positions.weight
                - '-positions.weight'
                - positions.profitLoss.intraday.absolute
                - '-positions.profitLoss.intraday.absolute'
                - positions.profitLoss.intraday.relative
                - '-positions.profitLoss.intraday.relative'
                - positions.profitLoss.potential.absolute
                - '-positions.profitLoss.potential.absolute'
                - positions.profitLoss.potential.relative
                - '-positions.profitLoss.potential.relative'
            maxItems: 10
            uniqueItems: true
            default:
              - positions.instrument.name
          style: form
          explode: false
          name: _sort
          in: query
        - description: Non-negative number of entries to skip, or 0 (default).
          name: _paginationOffset
          in: query
          schema:
            type: number
            format: int32
            minimum: 0
            exclusiveMinimum: false
            default: 0
        - description: Non-negative maximum number of entries to return.
          name: _paginationLimit
          in: query
          schema:
            type: number
            format: int32
            minimum: 1
            exclusiveMinimum: false
            maximum: 100
            exclusiveMaximum: false
            default: 20
      responses:
        '200':
          $ref: '#/components/responses/GetPortfolioPositionList200Response'
  /portfolio/position/closed/list:
    post:
      tags:
        - Portfolio
        - Positions
      operationId: post/portfolio/position/closed/list
      x-supportsOffsetBasedPaging: true
      x-supportsOffsetBasedPagingWithoutTotal: false
      x-supportsCursorBasedPaging: false
      x-supportsCursorBasedPagingWithoutTotal: false
      x-supportsPush: false
      x-requiresUser: true
      x-requiresInternalClient: false
      x-disallowUser: false
      x-no-merge: false
      x-maxSortParameterCount: 8
      x-supportsPermissionDeniedResponse: false
      description: List all closed positions of a portfolio.
      summary: List all closed positions of a portfolio.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostPortfolioPositionClosedListRequest'
      responses:
        '200':
          $ref: '#/components/responses/PostPortfolioPositionClosedList200Response'
      parameters: []
  /portfolio/transaction/create:
    post:
      tags:
        - Portfolio
        - Transaction
      operationId: post/portfolio/transaction/create
      x-supportsOffsetBasedPaging: false
      x-supportsOffsetBasedPagingWithoutTotal: false
      x-supportsCursorBasedPaging: false
      x-supportsCursorBasedPagingWithoutTotal: false
      x-supportsPush: false
      x-requiresUser: true
      x-requiresInternalClient: false
      x-disallowUser: false
      x-no-merge: true
      x-maxSortParameterCount: 10
      x-supportsPermissionDeniedResponse: false
      description: |-
        Add a transaction to a portfolio.

        Certain error conditions yield errors as follows: 

        |Error Condition|HTTP Error|
        |-------|--------|
        |The number of transactions would exceed 1000.|400 Bad Request|
      summary: Add a transaction to a portfolio.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostPortfolioTransactionCreateRequest'
      responses:
        '201':
          $ref: '#/components/responses/PostPortfolioTransactionCreate201Response'
      parameters: []
  /portfolio/transaction/delete:
    post:
      tags:
        - Portfolio
        - Transaction
      operationId: post/portfolio/transaction/delete
      x-supportsOffsetBasedPaging: false
      x-supportsOffsetBasedPagingWithoutTotal: false
      x-supportsCursorBasedPaging: false
      x-supportsCursorBasedPagingWithoutTotal: false
      x-supportsPush: false
      x-requiresUser: true
      x-requiresInternalClient: false
      x-disallowUser: false
      x-no-merge: true
      x-maxSortParameterCount: 10
      x-supportsPermissionDeniedResponse: false
      description: Delete a transaction of a portfolio.
      summary: Delete a transaction of a portfolio.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostPortfolioTransactionDeleteRequest'
      responses:
        '200':
          $ref: '#/components/responses/PostPortfolioTransactionDelete200Response'
      parameters: []
  /portfolio/transaction/list:
    get:
      tags:
        - Portfolio
        - Transaction
      operationId: get/portfolio/transaction/list
      x-supportsOffsetBasedPaging: true
      x-supportsOffsetBasedPagingWithoutTotal: false
      x-supportsCursorBasedPaging: false
      x-supportsCursorBasedPagingWithoutTotal: false
      x-supportsPush: false
      x-requiresUser: true
      x-requiresInternalClient: false
      x-disallowUser: false
      x-no-merge: false
      x-maxSortParameterCount: 7
      x-supportsPermissionDeniedResponse: false
      description: List of transactions in a portfolio.
      summary: List of transactions in a portfolio.
      parameters:
        - name: id
          in: query
          schema:
            description: Identifier of the portfolio.
            type: string
            format: id64
            x-positive: true
          required: true
        - name: _attributes
          in: query
          schema:
            type: array
            items:
              type: string
              maxLength: 100
              exclusiveMaximum: false
            uniqueItems: true
            maxItems: 50
          style: form
          explode: false
          description: Limit the attributes returned in the response to the specified set.
        - name: _language
          in: query
          schema:
            type: string
            format: isoLanguage
            description: ISO 639-1 code of the language.
            maxLength: 2
            minLength: 2
            exclusiveMinimum: false
            exclusiveMaximum: false
        - description: >-
            Sortable attributes. The sort order is ascending unless it is
            prefixed with a minus sign, in which case it is descending. A list
            of at most 7 (possibly prefixed) attribute name(s) is allowed.
          schema:
            type: array
            items:
              type: string
              enum:
                - instrument.name
                - '-instrument.name'
                - instrument.shortName
                - '-instrument.shortName'
                - instrument.assetClass.code
                - '-instrument.assetClass.code'
                - instrument.type.name
                - '-instrument.type.name'
                - type
                - '-type'
                - time
                - '-time'
                - numberShares
                - '-numberShares'
            maxItems: 7
            uniqueItems: true
            default:
              - instrument.name
          style: form
          explode: false
          name: _sort
          in: query
        - description: Non-negative number of entries to skip, or 0 (default).
          name: _paginationOffset
          in: query
          schema:
            type: number
            format: int32
            minimum: 0
            exclusiveMinimum: false
            default: 0
        - description: Non-negative maximum number of entries to return.
          name: _paginationLimit
          in: query
          schema:
            type: number
            format: int32
            minimum: 1
            exclusiveMinimum: false
            maximum: 500
            exclusiveMaximum: false
            default: 20
      responses:
        '200':
          $ref: '#/components/responses/GetPortfolioTransactionList200Response'
  /portfolio/transaction/modify:
    post:
      tags:
        - Portfolio
        - Transaction
        - Modify
      operationId: post/portfolio/transaction/modify
      x-supportsOffsetBasedPaging: false
      x-supportsOffsetBasedPagingWithoutTotal: false
      x-supportsCursorBasedPaging: false
      x-supportsCursorBasedPagingWithoutTotal: false
      x-supportsPush: false
      x-requiresUser: true
      x-requiresInternalClient: false
      x-disallowUser: false
      x-no-merge: true
      x-maxSortParameterCount: 10
      x-supportsPermissionDeniedResponse: false
      description: >-
        Modify a transaction in a portfolio.


        Certain error conditions yield errors as follows: 


        |Error Condition|HTTP Error|

        |-------|--------|

        |At least one of the parameters `numberShares`, `price`, `charges`,
        `exchangeRate` or `time` must be set.|400 Bad Request|
      summary: Modify a transaction in a portfolio.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostPortfolioTransactionModifyRequest'
      responses:
        '200':
          $ref: '#/components/responses/PostPortfolioTransactionModify200Response'
      parameters: []
  /portfolio/transaction/cash/create:
    post:
      tags:
        - Portfolio
        - Transaction
        - Cash
      operationId: post/portfolio/transaction/cash/create
      x-supportsOffsetBasedPaging: false
      x-supportsOffsetBasedPagingWithoutTotal: false
      x-supportsCursorBasedPaging: false
      x-supportsCursorBasedPagingWithoutTotal: false
      x-supportsPush: false
      x-requiresUser: true
      x-requiresInternalClient: false
      x-disallowUser: false
      x-no-merge: true
      x-maxSortParameterCount: 10
      x-supportsPermissionDeniedResponse: false
      description: |-
        Add a cash transaction to a portfolio.

        Certain error conditions yield errors as follows: 

        |Error Condition|HTTP Error|
        |-------|--------|
        |The number of transactions would exceed 1000.|400 Bad Request|
      summary: Add a cash transaction to a portfolio.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostPortfolioTransactionCashCreateRequest'
      responses:
        '200':
          $ref: '#/components/responses/PostPortfolioTransactionCashCreate200Response'
      parameters: []
  /portfolio/transaction/cash/delete:
    post:
      tags:
        - Portfolio
        - Transaction
        - Cash
      operationId: post/portfolio/transaction/cash/delete
      x-supportsOffsetBasedPaging: false
      x-supportsOffsetBasedPagingWithoutTotal: false
      x-supportsCursorBasedPaging: false
      x-supportsCursorBasedPagingWithoutTotal: false
      x-supportsPush: false
      x-requiresUser: true
      x-requiresInternalClient: false
      x-disallowUser: false
      x-no-merge: true
      x-maxSortParameterCount: 10
      x-supportsPermissionDeniedResponse: false
      description: Delete a cash transaction.
      summary: Delete a cash transaction.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostPortfolioTransactionCashDeleteRequest'
      responses:
        '200':
          $ref: '#/components/responses/PostPortfolioTransactionCashDelete200Response'
      parameters: []
  /watchlist/create:
    post:
      tags:
        - Watchlist
      operationId: post/watchlist/create
      x-supportsOffsetBasedPaging: false
      x-supportsOffsetBasedPagingWithoutTotal: false
      x-supportsCursorBasedPaging: false
      x-supportsCursorBasedPagingWithoutTotal: false
      x-supportsPush: false
      x-requiresUser: true
      x-requiresInternalClient: false
      x-disallowUser: false
      x-no-merge: true
      x-maxSortParameterCount: 10
      x-supportsPermissionDeniedResponse: false
      description: |-
        Create a watchlist.

        Certain error conditions yield errors as follows: 

        |Error Condition|HTTP Error|
        |-------|--------|
        |The number of watchlists would exceed 100.|400 Bad Request|
      summary: Create a watchlist.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostWatchlistCreateRequest'
      responses:
        '201':
          $ref: '#/components/responses/PostWatchlistCreate201Response'
      parameters: []
  /watchlist/delete:
    post:
      tags:
        - Watchlist
      operationId: post/watchlist/delete
      x-supportsOffsetBasedPaging: false
      x-supportsOffsetBasedPagingWithoutTotal: false
      x-supportsCursorBasedPaging: false
      x-supportsCursorBasedPagingWithoutTotal: false
      x-supportsPush: false
      x-requiresUser: true
      x-requiresInternalClient: false
      x-disallowUser: false
      x-no-merge: true
      x-maxSortParameterCount: 10
      x-supportsPermissionDeniedResponse: false
      description: Delete a watchlist.
      summary: Delete a watchlist.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostWatchlistDeleteRequest'
      responses:
        '200':
          $ref: '#/components/responses/PostWatchlistDelete200Response'
      parameters: []
  /watchlist/get:
    get:
      tags:
        - Watchlist
      operationId: get/watchlist/get
      x-supportsOffsetBasedPaging: false
      x-supportsOffsetBasedPagingWithoutTotal: false
      x-supportsCursorBasedPaging: false
      x-supportsCursorBasedPagingWithoutTotal: false
      x-supportsPush: false
      x-requiresUser: true
      x-requiresInternalClient: false
      x-disallowUser: false
      x-no-merge: false
      x-maxSortParameterCount: 10
      x-supportsPermissionDeniedResponse: false
      description: Details of a watchlist.
      summary: Details of a watchlist.
      parameters:
        - name: id
          in: query
          schema:
            description: Identifier of the watchlist.
            type: string
            format: id64
            x-positive: true
          required: true
        - name: _attributes
          in: query
          schema:
            type: array
            items:
              type: string
              maxLength: 100
              exclusiveMaximum: false
            uniqueItems: true
            maxItems: 50
          style: form
          explode: false
          description: Limit the attributes returned in the response to the specified set.
      responses:
        '200':
          $ref: '#/components/responses/GetWatchlistGet200Response'
  /watchlist/list:
    get:
      tags:
        - Watchlist
      operationId: get/watchlist/list
      x-supportsOffsetBasedPaging: false
      x-supportsOffsetBasedPagingWithoutTotal: false
      x-supportsCursorBasedPaging: false
      x-supportsCursorBasedPagingWithoutTotal: false
      x-supportsPush: false
      x-requiresUser: true
      x-requiresInternalClient: false
      x-disallowUser: false
      x-no-merge: false
      x-maxSortParameterCount: 4
      x-supportsPermissionDeniedResponse: false
      description: List of watchlists.
      summary: List of watchlists.
      responses:
        '200':
          $ref: '#/components/responses/GetWatchlistList200Response'
      parameters:
        - name: _attributes
          in: query
          schema:
            type: array
            items:
              type: string
              maxLength: 100
              exclusiveMaximum: false
            uniqueItems: true
            maxItems: 50
          style: form
          explode: false
          description: Limit the attributes returned in the response to the specified set.
        - description: >-
            Sortable attributes. The sort order is ascending unless it is
            prefixed with a minus sign, in which case it is descending. A list
            of at most 4 (possibly prefixed) attribute name(s) is allowed.
          schema:
            type: array
            items:
              type: string
              enum:
                - id
                - '-id'
                - name
                - '-name'
                - numberPositions
                - '-numberPositions'
                - creation
                - '-creation'
            maxItems: 4
            uniqueItems: true
            default:
              - name
          style: form
          explode: false
          name: _sort
          in: query
  /watchlist/modify:
    post:
      tags:
        - Modify
      operationId: post/watchlist/modify
      x-supportsOffsetBasedPaging: false
      x-supportsOffsetBasedPagingWithoutTotal: false
      x-supportsCursorBasedPaging: false
  

# --- truncated at 32 KB (175 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/factset/refs/heads/main/openapi/factset-virtual-portfolio-api-for-digital-portals-openapi.yml