FactSet Procure to Pay SCIM

Create users and manage user attributes, entitlements and security settings.

OpenAPI Specification

procure-to-pay-api-scim-openapi-original.yml Raw ↑
openapi: 3.0.0
info:
  title: FactSet SCIM API
  version: 2.0.0
  description: FactSet's SCIM API implementation.
servers:
  - url: https://api.factset.com/scim/v2/
    description: Production environment
  - url: https://api.uat.factset.com/scim/v2/
    description: UAT environment
paths:
  /ServiceProviderConfig:
    get:
      tags:
        - ServiceProviderConfig
      summary: Factset Get server configuration.
      security:
        - basicAuth: []
      responses:
        '200':
          $ref: '#/components/responses/serviceProviderConfigSuccess'
        '401':
          $ref: '#/components/responses/unauthorizedError'
        '500':
          $ref: '#/components/responses/internalServerError'
  /Schemas:
    get:
      tags:
        - Schemas
      summary: Factset Get a list of schemas.
      security:
        - basicAuth: []
      parameters:
        - $ref: '#/components/parameters/startIndex'
        - $ref: '#/components/parameters/count'
      responses:
        '200':
          $ref: '#/components/responses/schemasSuccess'
        '401':
          $ref: '#/components/responses/unauthorizedError'
        '403':
          $ref: '#/components/responses/forbiddenError'
        '500':
          $ref: '#/components/responses/internalServerError'
  /Schemas/{id}:
    get:
      tags:
        - Schemas
      summary: Factset Get a schema.
      security:
        - basicAuth: []
      parameters:
        - $ref: '#/components/parameters/resourceId'
      responses:
        '200':
          $ref: '#/components/responses/schemaSuccess'
        '401':
          $ref: '#/components/responses/unauthorizedError'
        '404':
          description: Schema not found.
          content:
            application/scim+json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                schemas:
                  - urn:ietf:params:scim:api:messages:2.0:Error
                detail: >-
                  Schema urn:scim:schemas:extension:FactSet:Core:1.0:User not
                  found
                status: '404'
        '500':
          $ref: '#/components/responses/internalServerError'
  /Users:
    get:
      tags:
        - Users
      summary: Factset Get a list of users.
      security:
        - basicAuth: []
      parameters:
        - $ref: '#/components/parameters/filter'
        - $ref: '#/components/parameters/startIndex'
        - $ref: '#/components/parameters/count'
        - $ref: '#/components/parameters/attributes'
        - $ref: '#/components/parameters/excludedAttributes'
      responses:
        '200':
          $ref: '#/components/responses/usersSuccess'
        '400':
          $ref: '#/components/responses/invalidFilterError'
        '401':
          $ref: '#/components/responses/unauthorizedError'
        '403':
          $ref: '#/components/responses/forbiddenError'
        '500':
          $ref: '#/components/responses/internalServerError'
    post:
      tags:
        - Users
      summary: Factset Create a user.
      security:
        - basicAuth: []
      requestBody:
        $ref: '#/components/requestBodies/userResource'
      responses:
        '201':
          $ref: '#/components/responses/userSuccess'
        '400':
          $ref: '#/components/responses/invalidResourceProvidedError'
        '401':
          $ref: '#/components/responses/unauthorizedError'
        '403':
          $ref: '#/components/responses/forbiddenError'
        '500':
          $ref: '#/components/responses/internalServerError'
  /Users/{id}:
    get:
      tags:
        - Users
      summary: Factset Get a user.
      security:
        - basicAuth: []
      parameters:
        - $ref: '#/components/parameters/resourceId'
      responses:
        '200':
          $ref: '#/components/responses/userSuccess'
        '401':
          $ref: '#/components/responses/unauthorizedError'
        '403':
          $ref: '#/components/responses/forbiddenError'
        '404':
          $ref: '#/components/responses/userNotFoundError'
        '500':
          $ref: '#/components/responses/internalServerError'
    put:
      tags:
        - Users
      summary: Factset Replace a user.
      security:
        - basicAuth: []
      parameters:
        - $ref: '#/components/parameters/resourceId'
      requestBody:
        $ref: '#/components/requestBodies/userResource'
      responses:
        '200':
          $ref: '#/components/responses/userSuccess'
        '400':
          $ref: '#/components/responses/invalidResourceProvidedError'
        '401':
          $ref: '#/components/responses/unauthorizedError'
        '403':
          $ref: '#/components/responses/forbiddenError'
        '404':
          $ref: '#/components/responses/userNotFoundError'
        '500':
          $ref: '#/components/responses/internalServerError'
    patch:
      tags:
        - Users
      summary: Factset Patch a user (add, replace, or remove attributes of a user.)
      security:
        - basicAuth: []
      parameters:
        - $ref: '#/components/parameters/resourceId'
      requestBody:
        $ref: '#/components/requestBodies/patchUserResource'
      responses:
        '200':
          $ref: '#/components/responses/userSuccess'
        '400':
          $ref: '#/components/responses/invalidPatchRequestError'
        '401':
          $ref: '#/components/responses/unauthorizedError'
        '403':
          $ref: '#/components/responses/forbiddenError'
        '500':
          $ref: '#/components/responses/internalServerError'
    delete:
      tags:
        - Users
      summary: Factset Delete a user
      security:
        - basicAuth: []
      parameters:
        - $ref: '#/components/parameters/resourceId'
      responses:
        '204':
          description: User successfully deleted.
        '401':
          $ref: '#/components/responses/unauthorizedError'
        '403':
          $ref: '#/components/responses/forbiddenError'
        '404':
          $ref: '#/components/responses/userNotFoundError'
        '500':
          $ref: '#/components/responses/internalServerError'
  /Groups:
    get:
      tags:
        - Groups
      summary: Factset Get a list of groups.
      security:
        - basicAuth: []
      parameters:
        - $ref: '#/components/parameters/filter'
        - $ref: '#/components/parameters/startIndex'
        - $ref: '#/components/parameters/count'
        - $ref: '#/components/parameters/attributes'
        - $ref: '#/components/parameters/excludedAttributes'
      responses:
        '200':
          $ref: '#/components/responses/groupsSuccess'
        '400':
          $ref: '#/components/responses/invalidFilterError'
        '401':
          $ref: '#/components/responses/unauthorizedError'
        '403':
          $ref: '#/components/responses/forbiddenError'
        '500':
          $ref: '#/components/responses/internalServerError'
  /Group/{id}:
    get:
      tags:
        - Group
      summary: Factset Get a group.
      security:
        - basicAuth: []
      parameters:
        - $ref: '#/components/parameters/resourceId'
      responses:
        '200':
          $ref: '#/components/responses/groupSuccess'
        '401':
          $ref: '#/components/responses/unauthorizedError'
        '403':
          $ref: '#/components/responses/forbiddenError'
        '404':
          $ref: '#/components/responses/groupNotFoundError'
        '500':
          $ref: '#/components/responses/internalServerError'
    put:
      tags:
        - Group
      summary: Factset Replace a group.
      security:
        - basicAuth: []
      parameters:
        - $ref: '#/components/parameters/resourceId'
      requestBody:
        $ref: '#/components/requestBodies/groupResource'
      responses:
        '200':
          $ref: '#/components/responses/groupSuccess'
        '400':
          $ref: '#/components/responses/invalidResourceProvidedError'
        '401':
          $ref: '#/components/responses/unauthorizedError'
        '403':
          $ref: '#/components/responses/forbiddenError'
        '404':
          $ref: '#/components/responses/groupNotFoundError'
        '500':
          $ref: '#/components/responses/internalServerError'
    patch:
      tags:
        - Group
      summary: Factset Patch a group (add, replace, or remove attributes of a group.)
      security:
        - basicAuth: []
      parameters:
        - $ref: '#/components/parameters/resourceId'
      requestBody:
        $ref: '#/components/requestBodies/patchGroupResource'
      responses:
        '200':
          $ref: '#/components/responses/groupSuccess'
        '400':
          $ref: '#/components/responses/invalidPatchRequestError'
        '401':
          $ref: '#/components/responses/unauthorizedError'
        '403':
          $ref: '#/components/responses/forbiddenError'
        '500':
          $ref: '#/components/responses/internalServerError'
  /Locations:
    get:
      tags:
        - Locations
      summary: Factset Get a list of locations.
      security:
        - basicAuth: []
      parameters:
        - $ref: '#/components/parameters/filter'
        - $ref: '#/components/parameters/startIndex'
        - $ref: '#/components/parameters/count'
        - $ref: '#/components/parameters/attributes'
        - $ref: '#/components/parameters/excludedAttributes'
      responses:
        '200':
          $ref: '#/components/responses/locationsSuccess'
        '400':
          $ref: '#/components/responses/invalidFilterError'
        '401':
          $ref: '#/components/responses/unauthorizedError'
        '403':
          $ref: '#/components/responses/forbiddenError'
        '500':
          $ref: '#/components/responses/internalServerError'
  /Locations/{id}:
    get:
      tags:
        - Locations
      summary: Factset Get a location.
      security:
        - basicAuth: []
      parameters:
        - $ref: '#/components/parameters/resourceId'
      responses:
        '200':
          $ref: '#/components/responses/locationSuccess'
        '401':
          $ref: '#/components/responses/unauthorizedError'
        '403':
          $ref: '#/components/responses/forbiddenError'
        '404':
          $ref: '#/components/responses/locationNotFoundError'
        '500':
          $ref: '#/components/responses/internalServerError'
    put:
      tags:
        - Locations
      summary: Factset Replace a location.
      security:
        - basicAuth: []
      parameters:
        - $ref: '#/components/parameters/resourceId'
      requestBody:
        $ref: '#/components/requestBodies/locationResource'
      responses:
        '200':
          $ref: '#/components/responses/locationSuccess'
        '400':
          $ref: '#/components/responses/invalidResourceProvidedError'
        '401':
          $ref: '#/components/responses/unauthorizedError'
        '403':
          $ref: '#/components/responses/forbiddenError'
        '404':
          $ref: '#/components/responses/locationNotFoundError'
        '500':
          $ref: '#/components/responses/internalServerError'
    patch:
      tags:
        - Locations
      summary: Factset Patch a location (add, replace, or remove attributes of a location.)
      security:
        - basicAuth: []
      parameters:
        - $ref: '#/components/parameters/resourceId'
      requestBody:
        $ref: '#/components/requestBodies/patchLocationResource'
      responses:
        '200':
          $ref: '#/components/responses/locationSuccess'
        '400':
          $ref: '#/components/responses/invalidPatchRequestError'
        '401':
          $ref: '#/components/responses/unauthorizedError'
        '403':
          $ref: '#/components/responses/forbiddenError'
        '500':
          $ref: '#/components/responses/internalServerError'
  /Products:
    get:
      tags:
        - Products
      summary: Factset Get a list of products.
      security:
        - basicAuth: []
      parameters:
        - $ref: '#/components/parameters/filter'
        - $ref: '#/components/parameters/startIndex'
        - $ref: '#/components/parameters/count'
        - $ref: '#/components/parameters/attributes'
        - $ref: '#/components/parameters/excludedAttributes'
      responses:
        '200':
          $ref: '#/components/responses/productsSuccess'
        '400':
          $ref: '#/components/responses/invalidFilterError'
        '401':
          $ref: '#/components/responses/unauthorizedError'
        '403':
          $ref: '#/components/responses/forbiddenError'
        '500':
          $ref: '#/components/responses/internalServerError'
  /Products/{id}:
    get:
      tags:
        - Products
      summary: Factset Get a product.
      security:
        - basicAuth: []
      parameters:
        - $ref: '#/components/parameters/resourceId'
      responses:
        '200':
          $ref: '#/components/responses/productSuccess'
        '401':
          $ref: '#/components/responses/unauthorizedError'
        '403':
          $ref: '#/components/responses/forbiddenError'
        '404':
          $ref: '#/components/responses/productNotFoundError'
        '500':
          $ref: '#/components/responses/internalServerError'
  /FileManagerAudit:
    get:
      tags:
        - FileManagerAudit
      summary: Factset Get File Manager audit data.
      security:
        - basicAuth: []
      responses:
        '200':
          $ref: '#/components/responses/fileManagerAuditSuccess'
        '500':
          $ref: '#/components/responses/internalServerError'
components:
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
  parameters:
    resourceId:
      name: id
      description: ID of resource.
      in: path
      schema:
        type: string
      required: true
    filter:
      name: filter
      description: >-
        Resource filter string. See [RFC 7644 section
        3.4.2.2](https://tools.ietf.org/html/rfc7644#section-3.4.2.2) for
        syntax. Note this API implementation also supports a non-standard "re"
        operator for regular expression matching against strings.
      in: query
      schema:
        type: string
      required: false
    startIndex:
      name: startIndex
      description: >-
        Result start index. The one-based index of the first result to be
        returned in the list of resources. For example, to exclude the first two
        resources, use a *startIndex* value of 3. This parameter has a default
        value of 1. This index applies *after* any resource filtration has been
        applied as specified by the *filter* argument.
      in: query
      schema:
        type: integer
      required: false
    count:
      name: count
      description: >-
        Maximum resource count. The server will not return more resources than
        this value, although it may return fewer.
      in: query
      schema:
        type: integer
      required: false
    attributes:
      name: attributes
      description: >-
        Attribute whitelist filter string. A comma-separated list of resource
        attribute names to be returned in the response, overriding the set of
        attributes that would be returned by default. Attribute names must be
        specified in standard attribute notation (see [RFC 7644 section
        3.10](https://datatracker.ietf.org/doc/html/rfc7644#section-3.10).) This
        parameter cannot be used with the *excludedAttributes* parameter.
      in: query
      schema:
        type: string
      required: false
    excludedAttributes:
      name: excludedAttributes
      description: >-
        Attribute blacklist filter string. A comma-separated list of resource
        attribute names to be excluded in the response, overriding the set of
        attributes that would be returned by default. Attribute names must be
        specified in standard attribute notation (see [RFC 7644 section
        3.10](https://datatracker.ietf.org/doc/html/rfc7644#section-3.10).) This
        parameter cannot be used with the *attributes* parameter.
      in: query
      schema:
        type: string
      required: false
  requestBodies:
    userResource:
      description: User resource.
      required: true
      content:
        application/scim+json:
          schema:
            $ref: '#/components/schemas/UserResource'
          examples:
            Minimum:
              value:
                schemas:
                  - urn:ietf:params:scim:schemas:core:2.0:User
                  - urn:scim:schemas:extension:FactSet:Core:1.0:User
                name:
                  familyName: Doe
                  givenName: John
                email: [email protected]
                urn:scim:schemas:extension:FactSet:Core:1.0:User:
                  username: FIN_WEALTH
                  location:
                    value: '1598276'
            Expanded:
              value:
                schemas:
                  - urn:ietf:params:scim:schemas:core:2.0:User
                  - urn:scim:schemas:extension:FactSet:Core:1.0:User
                externalId: C3574707-FFF9-433C-A17F-DFF806C72A7F
                name:
                  familyName: Doe
                  givenName: John
                email: [email protected]
                urn:scim:schemas:extension:FactSet:Core:1.0:User:
                  username: FIN_WEALTH
                  location:
                    value: '1598276'
                  roleName: Wealth Manager
                  products:
                    - value: '1396'
                  assertionValue: exampleAssertionValue
    patchUserResource:
      content:
        application/scim+json:
          schema:
            $ref: '#/components/schemas/Patch'
          example:
            schemas:
              - urn:ietf:params:scim:api:messages:2.0:PatchOp
            Operations:
              - op: replace
                path: urn:scim:schemas:extension:FactSet:Core:1.0:User:roleName
                value: Wealth Manager
    groupResource:
      description: Group resource.
      required: true
      content:
        application/scim+json:
          schema:
            $ref: '#/components/schemas/GroupResource'
    patchGroupResource:
      content:
        application/scim+json:
          schema:
            $ref: '#/components/schemas/Patch'
          example:
            schemas:
              - urn:ietf:params:scim:api:messages:2.0:PatchOp
            Operations:
              - op: add
                path: members
                value:
                  - value: FIN_WEALTH-123456
    locationResource:
      description: Location resource.
      required: true
      content:
        application/scim+json:
          schema:
            $ref: '#/components/schemas/LocationResource'
    patchLocationResource:
      content:
        application/scim+json:
          schema:
            $ref: '#/components/schemas/Patch'
          example:
            schemas:
              - urn:ietf:params:scim:api:messages:2.0:PatchOp
            Operations:
              - op: replace
                path: externalId
                value:
                  - value: exampleExternalId
  responses:
    invalidFilterError:
      description: Invalid filter value provided.
      content:
        application/scim+json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            schemas:
              - urn:ietf:params:scim:api:messages:2.0:Error
            scimType: invalidFilter
            detail: Invalid filter value.
            status: '400'
    invalidResourceProvidedError:
      description: Provided resource contains invalid data.
      content:
        application/scim+json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            schemas:
              - urn:ietf:params:scim:api:messages:2.0:Error
            scimType: invalidValue
            detail: Provided resource contains invalid data.
            status: '400'
    invalidPatchRequestError:
      description: Patch request invalid.
      content:
        application/scim+json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            schemas:
              - urn:ietf:params:scim:api:messages:2.0:Error
            scimType: invalidValue
            detail: Provided resource contains invalid data.
            status: '400'
    unauthorizedError:
      description: User has not been authenticated.
      content:
        application/scim+json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            schemas:
              - urn:ietf:params:scim:api:messages:2.0:Error
            detail: FactSet.net credentials are missing or invalid.
            status: '401'
    forbiddenError:
      description: User is not authorized to use this API.
      content:
        application/scim+json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            schemas:
              - urn:ietf:params:scim:api:messages:2.0:Error
            detail: FIN_WEALTH-999999 is not authorized to use the FactSet SCIM API.
            status: '403'
    internalServerError:
      description: Internal server error.
      content:
        application/scim+json:
          schema:
            $ref: '#/components/schemas/Error'
    serviceProviderConfigSuccess:
      description: Success.
      content:
        application/scim+json:
          schema:
            $ref: '#/components/schemas/ServiceProviderConfig'
    schemaSuccess:
      description: Success.
      content:
        application/scim+json:
          schema:
            $ref: '#/components/schemas/Schema'
    schemasSuccess:
      description: Success.
      content:
        application/scim+json:
          schema:
            $ref: '#/components/schemas/SchemaList'
    userSuccess:
      description: Success.
      content:
        application/scim+json:
          schema:
            $ref: '#/components/schemas/UserResource'
    usersSuccess:
      description: Success.
      content:
        application/scim+json:
          schema:
            $ref: '#/components/schemas/UserResourceList'
    userNotFoundError:
      description: User not found.
      content:
        application/scim+json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            schemas:
              - urn:ietf:params:scim:api:messages:2.0:Error
            detail: User FIN_WEALTH-123456 was not found.
            status: '404'
    groupSuccess:
      description: Success.
      content:
        application/scim+json:
          schema:
            $ref: '#/components/schemas/GroupResource'
    groupsSuccess:
      description: Success.
      content:
        application/scim+json:
          schema:
            $ref: '#/components/schemas/GroupResourceList'
    groupNotFoundError:
      description: Group not found.
      content:
        application/scim+json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            schemas:
              - urn:ietf:params:scim:api:messages:2.0:Error
            detail: Group Domain btud - Pod 04 - CitrixApps - Cymba OMS was not found.
            status: '404'
    locationSuccess:
      description: Success.
      content:
        application/scim+json:
          schema:
            $ref: '#/components/schemas/LocationResource'
    locationsSuccess:
      description: Success.
      content:
        application/scim+json:
          schema:
            $ref: '#/components/schemas/LocationResourceList'
    locationNotFoundError:
      description: Location not found.
      content:
        application/scim+json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            schemas:
              - urn:ietf:params:scim:api:messages:2.0:Error
            detail: Location 1598276 was not found.
            status: '404'
    productSuccess:
      description: Success.
      content:
        application/scim+json:
          schema:
            $ref: '#/components/schemas/ProductResource'
    productsSuccess:
      description: Success.
      content:
        application/scim+json:
          schema:
            $ref: '#/components/schemas/ProductResourceList'
    productNotFoundError:
      description: Product not found.
      content:
        application/scim+json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            schemas:
              - urn:ietf:params:scim:api:messages:2.0:Error
            detail: Product 6781 was not found.
            status: '404'
    fileManagerAuditSuccess:
      description: Success.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/FileManagerAudit'
  schemas:
    ServiceProviderConfig:
      type: object
      properties:
        schemas:
          type: array
          items:
            type: string
          example:
            - urn:ietf:params:scim:schemas:core:2.0:ServiceProviderConfig
        documentationUri:
          type: string
          description: >-
            An HTTP-addressable URL pointing to the service provider's
            human-consumable help documentation.
          readOnly: true
          example: https://developer-staging.factset.com/api-catalog/scim-api
        patch:
          type: object
          description: A complex type that specifies PATCH configuration options.
          properties:
            supported:
              type: boolean
              description: >-
                A Boolean value specifying whether or not the operation is
                supported.
              readOnly: true
              example: false
          required:
            - supported
          readOnly: true
        bulk:
          type: object
          description: A complex type that specifies bulk configuration options.
          properties:
            supported:
              type: boolean
              description: >-
                A Boolean value specifying whether or not the operation is
                supported.
              readOnly: true
              example: false
            maxOperations:
              type: integer
              description: An integer value specifying the maximum number of operations.
              readOnly: true
              example: 0
            maxPayloadSize:
              type: integer
              description: An integer value specifying the maximum payload size in bytes.
              readOnly: true
              example: 0
          required:
            - supported
            - maxOperations
            - maxPayloadSize
        filter:
          type: object
          description: A complex type that specifies FILTER options.
          properties:
            supported:
              type: boolean
              description: >-
                A Boolean value specifying whether or not the operation is
                supported.
              readOnly: true
              example: false
            maxResults:
              type: integer
              description: >-
                An integer value specifying the maximum number of resources
                returned in a response.
              readOnly: true
              example: 0
          required:
            - supported
            - maxResults
        changePassword:
          type: object
          description: >-
            A complex type that specifies configuration options related to
            changing a password.
          properties:
            supported:
              type: boolean
              description: >-
                A Boolean value specifying whether or not the operation is
                supported.
              readOnly: true
              example: false
          required:
            - supported
        sort:
          type: object
          description: A complex type that specifies sort result options.
          properties:
            supported:
              type: boolean
              description: >-
                A Boolean value specifying whether or not the operation is
                supported.
              readOnly: true
              example: false
          required:
            - supported
        etag:
          type: object
          description: A complex type that specifies ETag configuration options.
          properties:
            supported:
              type: boolean
              description: >-
                A Boolean value specifying whether or not the operation is
                supported.
              readOnly: true
              example: false
          required:
            - supported
        authenticationSchemes:
          type: object
          description: >-
            A complex type that specifies supported authentication scheme
            properties.
          properties:
            type:
              type: string
              description: The authentication scheme.
              readOnly: true
              example: httpbasic
            name:
              type: string
              description: The common authentication scheme name, e.g., HTTP Basic.
              readOnly: true
              example: HTTP Basic
            description:
              type: string
              description: A description of the authentication scheme.
              readOnly: true
              example: FactSet API key authentication.
            specUri:
              type: string
              description: >-
                An HTTP-addressable URL pointing to the authentication scheme's
                specification.
              readOnly: true
              example: https://datatracker.ietf.org/doc/rfc7617/
            documentationUri:
              type: string
              description: >-
                An HTTP-addressable URL pointing to the authentication scheme's
                usage documentation.
              readOnly: true
              example: https://developer.factset.com/authentication
          required:
            - type
            - name
            - description
      required:
        - patch
        - bulk
        - filter
        - changePassword
        - sort
        - etag
        - authenticationSchemes
    Schema:
      type: object
      properties:
        id:
          type: string
          description: >-
            The unique URI of the schema. When applicable, service providers
            MUST specify the URI.
          readOnly: true
          example: urn:scim:schemas:extension:FactSet:Core:1.0:User
        name:
          type: string
          description: >-
            The schema's human-readable name.  When applicable, service
            providers MUST specify the name, e.g., 'User'.
          readOnly: true
          example: FactSet Core User
        description:
          type: string
          description: >-
            The schema's human-readable name.  When applicable, service
            providers MUST specify the name, e.g., 'User'.
          readOnly: true
          example: FactSet core user details
        attributes:
          type: array
          description: A complex attribute that includes the attributes of a schema.
          items:
            type: object
            properties:
              name:
                type: string
                description: The attribute's name.
                readOnly: true
              type:
                type: string
                description: >-
                  The attribute's data type. Valid values include 'string',
                  'complex', 'boolean', 'decimal', 'integer', 'dateTime',
                  'reference'.
                readOnly: true
              multiValued:
                type: boolean
                description: A Boolean value indicating an attribute's plurality.
                readOnly: true
              description:
                type: string
                description: A human-readable description of the attribute.
                readOnly: true
              required:
                type: boolean
                description: >-
                  A boolean value indicating whether or not the attribute is
                  required.
                readOnly: true
              canonicalValues:
                type: array
                description: >-
                  A collection of canonical values.  When applicable, service
                  providers MUST specify the canonical types, e.g.,  'work',
                  'home'.
                items:
                  type: string
                readOnly: true
              caseExact:
                type: boolean
                d

# --- truncated at 32 KB (64 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/factset/refs/heads/main/openapi/procure-to-pay-api-scim-openapi-original.yml