Symphony Profile Manager API

Profile Manager is a microservice to manage user profiles and groups in Symphony. Supports group creation, membership management, and profile retrieval for enterprise directory use cases.

OpenAPI Specification

profile-manager-openapi-original.yml Raw ↑
openapi: 3.0.0
info:
  version: 1.0.0
  title: Symphony Profile Manager
  description: Profile Manager is a microservice to manage users profile and groups
servers:
  - url: /profile-manager
paths:
  /v1/groups/{groupId}/member:
    post:
      summary: Symphony Add a New User to a an Existing Group
      parameters:
        - in: header
          name: X-Symphony-Host
          schema:
            type: string
            description: headers to indentify the origin
            nullable: false
            minLength: 1
            example: localhost.symphony.com
          required: true
        - in: path
          name: groupId
          schema:
            type: string
            nullable: false
            description: Group id
            example: WzEwMF1bU0RMXVtUZXN0IEdyb3VwXQ
          required: true
      description: Add a new user to a an existing group
      operationId: addMemberToGroup
      tags:
        - Groups
      requestBody:
        $ref: '#/components/requestBodies/AddMemberRequestBody'
      responses:
        '200':
          description: >-
            Successful response. Returns the group with the new add user as a
            member
          headers:
            Etag:
              schema:
                type: string
                example: e3a52e72-0854-4401-8c24-e0b17c0ca304
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReadGroup'
        '400':
          description: Returned if missing required parameters or wrong parameters
          $ref: ./symphony-common-definitions.yaml#/components/responses/BadRequest
        '401':
          description: Returned if wrong or missing JWT token
          $ref: >-
            ./symphony-common-definitions.yaml#/components/responses/Unauthorized
        '403':
          description: Returned if JWT token missing the required entitlement
          $ref: ./symphony-common-definitions.yaml#/components/responses/Forbidden
        '429':
          description: Returned if the backend is overloaded
          $ref: '#/components/responses/TooManyRequests'
        '452':
          description: >-
            Returned if there is a violation in info barrier rules. This error
            is not relevant in case of a Company group
          $ref: '#/components/responses/InfoBarrierViolation'
  /v1/groups:
    post:
      summary: Symphony Insert a New Group
      parameters:
        - in: header
          name: X-Symphony-Host
          schema:
            type: string
            description: headers to indentify the originator
            nullable: false
            minLength: 1
            example: localhost.symphony.com
          required: true
      description: Insert a new group into database
      operationId: insertGroup
      tags:
        - Groups
      requestBody:
        $ref: '#/components/requestBodies/CreateGroupBody'
      responses:
        '201':
          description: >-
            Successful response. Returns the group just created with the new
            added member
          headers:
            Etag:
              schema:
                type: string
                example: e3a52e72-0854-4401-8c24-e0b17c0ca304
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReadGroup'
        '400':
          description: >-
            Returned if missing required parameters, Trying to add a member
            which is already existing within the group list of members, or the
            requested user member is already a part of company group in case of
            a company group type
          $ref: ./symphony-common-definitions.yaml#/components/responses/BadRequest
        '401':
          description: Returned if wrong or missing JWT token
          $ref: >-
            ./symphony-common-definitions.yaml#/components/responses/Unauthorized
        '403':
          description: Returned if JWT token missing the required entitlement
          $ref: ./symphony-common-definitions.yaml#/components/responses/Forbidden
        '429':
          description: Returned if the backend is overloaded
          $ref: '#/components/responses/TooManyRequests'
        '452':
          description: >-
            Returned if there is a violation in info barrier rules. This error
            is not relevant in case of a Company group
          $ref: '#/components/responses/InfoBarrierViolation'
  /v1/groups/{groupId}:
    get:
      summary: Symphony Retrieve a Group
      parameters:
        - in: header
          name: X-Symphony-Host
          schema:
            type: string
            description: headers to indentify the originator
            nullable: false
            minLength: 1
            example: localhost.symphony.com
          required: true
        - in: path
          name: groupId
          schema:
            type: string
          required: true
          description: Group id
          example: WzEwMF1bU0RMXVtUZXN0IEdyb3VwXQ
      description: Retrieve a group
      operationId: getGroup
      tags:
        - Groups
      responses:
        '200':
          description: Successful response. Returns the group
          headers:
            Etag:
              schema:
                type: string
                example: e3a52e72-0854-4401-8c24-e0b17c0ca304
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReadGroup'
        '400':
          description: Returned if missing required parameters or wrong parameters
          $ref: ./symphony-common-definitions.yaml#/components/responses/BadRequest
        '401':
          description: Returned if wrong or missing JWT token
          $ref: >-
            ./symphony-common-definitions.yaml#/components/responses/Unauthorized
        '403':
          description: Returned if JWT token missing the required entitlement
          $ref: ./symphony-common-definitions.yaml#/components/responses/Forbidden
        '404':
          description: Returned if groupId is not found
          $ref: ./symphony-common-definitions.yaml#/components/responses/NotFound
        '429':
          description: Returned if the backend is overloaded
          $ref: '#/components/responses/TooManyRequests'
    put:
      summary: Symphony Update a Group
      parameters:
        - in: header
          name: X-Symphony-Host
          schema:
            type: string
            description: headers to indentify the originator
            nullable: false
            minLength: 1
            example: localhost.symphony.com
          required: true
        - in: header
          name: If-Match
          schema:
            type: string
            description: ETag of group to be updated
            example: e3a52e72-0854-4401-8c24-e0b17c0ca304
          required: true
        - in: path
          name: groupId
          schema:
            type: string
          required: true
          description: Group id
          example: 60af77fd294165466ccdf510
      description: Update an existing group
      operationId: updateGroup
      tags:
        - Groups
      requestBody:
        $ref: '#/components/requestBodies/UpdateGroupBody'
      responses:
        '200':
          description: Successful response. Returns the group just updated
          headers:
            Etag:
              schema:
                type: string
                example: e3a52e72-0854-4401-8c24-e0b17c0ca304
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReadGroup'
        '400':
          description: Returned if missing required parameters or wrong parameters
          $ref: ./symphony-common-definitions.yaml#/components/responses/BadRequest
        '401':
          description: Returned if wrong or missing JWT token
          $ref: >-
            ./symphony-common-definitions.yaml#/components/responses/Unauthorized
        '403':
          description: Returned if JWT token missing the required entitlement
          $ref: ./symphony-common-definitions.yaml#/components/responses/Forbidden
        '404':
          description: Returned if groupId is not found
          $ref: ./symphony-common-definitions.yaml#/components/responses/NotFound
        '412':
          description: The update is rejected because concurrent update
          $ref: >-
            ./symphony-common-definitions.yaml#/components/responses/PreconditionFailed
        '429':
          description: Returned if the backend is overloaded
          $ref: '#/components/responses/TooManyRequests'
        '452':
          description: >-
            Returned if there is a violation in info barrier rules. This error
            is not relevant in case of a Company group
          $ref: '#/components/responses/InfoBarrierViolation'
  /v1/groups/type/{typeId}:
    get:
      summary: Symphony List All Groups of Specified Type
      parameters:
        - in: header
          name: X-Symphony-Host
          schema:
            type: string
            description: headers to indentify the originator
            nullable: false
            minLength: 1
            example: localhost.symphony.com
          required: true
        - in: path
          name: typeId
          schema:
            type: string
          required: true
          description: Group type id
          example: SDL
        - in: query
          name: status
          schema:
            $ref: '#/components/schemas/Status'
          required: false
          description: >-
            filter by status, active or deleted. If not specified both are
            returned
          example: ACTIVE
        - in: query
          name: before
          schema:
            type: string
          required: false
          description: >-
            NOT SUPPORTED YET, currently ignored. Cursor that points to the
            start of the current page of data. If not present, the current page
            is the first page
        - in: query
          name: after
          schema:
            type: string
          required: false
          description: >-
            cursor that points to the end of the current page of data. If not
            present, the current page is the last page
        - in: query
          name: limit
          schema:
            type: integer
          required: false
          description: numbers of items to return
          example: 100
        - in: query
          name: sortOrder
          schema:
            $ref: '#/components/schemas/SortOrder'
          required: false
          description: items sorting direction (ordered by createdDate)
          example: ASC
      operationId: listGroups
      tags:
        - Groups
      responses:
        '200':
          description: Successful response. Returns the list of all groups
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GroupList'
        '400':
          description: Returned if missing required parameters or wrong parameters
          $ref: ./symphony-common-definitions.yaml#/components/responses/BadRequest
        '401':
          description: Returned if wrong or missing JWT token
          $ref: >-
            ./symphony-common-definitions.yaml#/components/responses/Unauthorized
        '403':
          description: Returned if JWT token missing the required entitlement
          $ref: ./symphony-common-definitions.yaml#/components/responses/Forbidden
        '404':
          description: Returned if typeId is not found
          $ref: ./symphony-common-definitions.yaml#/components/responses/NotFound
        '429':
          description: Returned if the backend is overloaded
          $ref: '#/components/responses/TooManyRequests'
  /v1/groups/{groupId}/avatar:
    post:
      summary: Symphony Update the Group Avatar
      parameters:
        - in: header
          name: X-Symphony-Host
          schema:
            type: string
            description: headers to indentify the originator
            nullable: false
            minLength: 1
            example: localhost.symphony.com
          required: true
        - in: path
          name: groupId
          schema:
            type: string
          required: true
          description: Group id
          example: 60af77fd294165466ccdf510
      description: Update the group account avatar
      operationId: updateAvatar
      tags:
        - Groups
      requestBody:
        $ref: '#/components/requestBodies/UpdateAvatar'
      responses:
        '200':
          description: Successful response. Returns the group with the avatar updated
          headers:
            Etag:
              schema:
                type: string
                example: e3a52e72-0854-4401-8c24-e0b17c0ca304
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReadGroup'
        '400':
          description: Returned if missing required parameters or wrong parameters
          $ref: ./symphony-common-definitions.yaml#/components/responses/BadRequest
        '401':
          description: Returned if wrong or missing JWT token
          $ref: >-
            ./symphony-common-definitions.yaml#/components/responses/Unauthorized
        '403':
          description: Returned if JWT token missing the required entitlement
          $ref: ./symphony-common-definitions.yaml#/components/responses/Forbidden
        '404':
          description: Returned if groupId is not found
          $ref: ./symphony-common-definitions.yaml#/components/responses/NotFound
        '429':
          description: Returned if the backend is overloaded
          $ref: '#/components/responses/TooManyRequests'
  /v1/groups/deleteAll:
    delete:
      summary: >-
        Symphony Delete all data related to the current pod (extracted from JWT). This endpoint is for maintenance/test and it is usually disabled or restricted
      parameters:
        - in: header
          name: X-Symphony-Host
          schema:
            type: string
            description: headers to indentify the originator
            nullable: false
            minLength: 1
            example: localhost.symphony.com
          required: true
      operationId: deleteAllGroups
      tags:
        - Groups
      responses:
        '200':
          description: >-
            Successful response. Returns the list of all groups (it should be
            empty)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GroupList'
        '400':
          description: Returned if missing required parameters or wrong parameters
          $ref: ./symphony-common-definitions.yaml#/components/responses/BadRequest
        '401':
          description: Returned if wrong or missing JWT token
          $ref: >-
            ./symphony-common-definitions.yaml#/components/responses/Unauthorized
        '403':
          description: Returned if JWT token missing the required entitlement
          $ref: ./symphony-common-definitions.yaml#/components/responses/Forbidden
        '429':
          description: Returned if the backend is overloaded
          $ref: '#/components/responses/TooManyRequests'
  /v1/types:
    get:
      summary: Symphony List All Types
      parameters:
        - in: header
          name: X-Symphony-Host
          schema:
            type: string
            description: headers to indentify the originator
            nullable: false
            minLength: 1
            example: localhost.symphony.com
          required: true
        - in: query
          name: status
          schema:
            $ref: '#/components/schemas/Status'
          required: false
          example: ACTIVE
        - in: query
          name: before
          schema:
            type: string
          required: false
          description: >-
            NOT SUPPORTED YET, currently ignored. Cursor that points to the
            start of the current page of data. If not present, the current page
            is the first page
        - in: query
          name: after
          schema:
            type: string
          required: false
          description: >-
            cursor that points to the end of the current page of data. If not
            present, the current page is the last page
        - in: query
          name: limit
          schema:
            type: integer
          required: false
          description: numbers of items to return
          example: 100
        - in: query
          name: sortOrder
          schema:
            $ref: '#/components/schemas/SortOrder'
          required: false
          description: items sorting direction (ordered by createdDate)
          example: ASC
      operationId: listTypes
      tags:
        - Types
      responses:
        '200':
          description: Successful response. Returns the list of all types
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TypeList'
        '401':
          description: Returned if wrong or missing JWT token
          $ref: >-
            ./symphony-common-definitions.yaml#/components/responses/Unauthorized
        '403':
          description: Returned if JWT token missing the required entitlement
          $ref: ./symphony-common-definitions.yaml#/components/responses/Forbidden
        '429':
          description: Returned if the backend is overloaded
          $ref: '#/components/responses/TooManyRequests'
  /v1/types/{typeId}:
    get:
      summary: Symphony Retrieve a Type
      parameters:
        - in: header
          name: X-Symphony-Host
          schema:
            type: string
            description: headers to indentify the originator
            nullable: false
            minLength: 1
            example: localhost.symphony.com
          required: true
        - in: path
          name: typeId
          schema:
            type: string
          required: true
          description: Type id
          example: SDL
      description: Retrieve a type
      operationId: getType
      tags:
        - Types
      responses:
        '200':
          description: Successful response. Returns the type
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Type'
        '400':
          description: Returned if missing required parameters or wrong parameters
          $ref: ./symphony-common-definitions.yaml#/components/responses/BadRequest
        '401':
          description: Returned if wrong or missing JWT token
          $ref: >-
            ./symphony-common-definitions.yaml#/components/responses/Unauthorized
        '403':
          description: Returned if JWT token missing the required entitlement
          $ref: ./symphony-common-definitions.yaml#/components/responses/Forbidden
        '404':
          description: Returned if type id is not found
          $ref: ./symphony-common-definitions.yaml#/components/responses/NotFound
        '429':
          description: Returned if the backend is overloaded
          $ref: '#/components/responses/TooManyRequests'
components:
  schemas:
    BaseGroup:
      description: A reduced set Group object, for retrieving list of group purpose
      properties:
        type:
          type: string
          nullable: false
          minLength: 1
          description: Group type identifier
          example: SDL
        ownerType:
          $ref: '#/components/schemas/Owner'
          nullable: false
        ownerId:
          type: integer
          format: int64
          description: >-
            Owner id if the owner type is tenant (podId) or user (userId),
            otherwise null
          example: 100
        name:
          type: string
          nullable: false
          minLength: 1
          description: Group's name
          example: Test Group
      required:
        - type
        - ownerType
        - ownerId
        - name
    ReadGroup:
      allOf:
        - $ref: '#/components/schemas/BaseGroup'
        - type: object
          required:
            - rootCause
          properties:
            id:
              type: string
              description: Group's unique identifier
            createdDate:
              type: string
              format: date-time
            createdBy:
              type: string
            updatedDate:
              type: string
              format: date-time
            updatedBy:
              type: string
            status:
              $ref: '#/components/schemas/Status'
            eTag:
              type: string
              example: e3a52e72-0854-4401-8c24-e0b17c0ca304
            subType:
              type: string
              enum:
                - COMMUNITY
                - CHANNEL
              description: >-
                The type of the company group, This field is mandatory in case
                of a company group type, but not applicable for Symphony
                Distribution List
              example: COMMUNITY
            referrer:
              type: string
              description: >-
                The referring company name. This field is mandatory in case of a
                company group type, but not applicable for Symphony Distribution
                List
              example: Symphony, referring company name, referring channel partner name
            members:
              type: array
              items:
                $ref: '#/components/schemas/ReadMember'
            profile:
              $ref: '#/components/schemas/Profile'
              description: >-
                The profile is not supported for company group, but only works
                with SDL as group type
            visibilityRestriction:
              $ref: '#/components/schemas/GroupVisibilityRestriction'
            implicitConnection:
              $ref: '#/components/schemas/GroupImplicitConnection'
            interactionTransfer:
              $ref: '#/components/schemas/GroupInteractionTransfer'
    CreateGroup:
      allOf:
        - $ref: '#/components/schemas/BaseGroup'
        - type: object
          required:
            - rootCause
          properties:
            subType:
              type: string
              enum:
                - COMMUNITY
                - CHANNEL
              description: >-
                The type of the company group, This field is mandatory in case
                of a company group type, but not applicable for Symphony
                Distribution List
              example: COMMUNITY
            referrer:
              type: string
              description: >-
                The referring company name. This field is mandatory in case of a
                company group type, but not applicable for Symphony Distribution
                List
              example: Symphony, referring company name, referring channel partner name
            members:
              type: array
              items:
                $ref: '#/components/schemas/Member'
            profile:
              $ref: '#/components/schemas/BaseProfile'
              description: >-
                The profile is not supported for company group, but only works
                with SDL as group type
              required: true
            visibilityRestriction:
              $ref: '#/components/schemas/GroupVisibilityRestriction'
            implicitConnection:
              $ref: '#/components/schemas/GroupImplicitConnection'
            interactionTransfer:
              $ref: '#/components/schemas/GroupInteractionTransfer'
    UpdateGroup:
      allOf:
        - $ref: '#/components/schemas/CreateGroup'
        - type: object
          required:
            - rootCause
          properties:
            id:
              type: string
              description: Group's unique identifier
              nullable: false
              minLength: 1
              example: 60af77fd294165466ccdf510
            status:
              $ref: '#/components/schemas/Status'
            eTag:
              type: string
              example: e3a52e72-0854-4401-8c24-e0b17c0ca304
              nullable: false
              minLength: 1
    Member:
      description: A Group member.
      properties:
        memberTenant:
          type: integer
          description: Member's tenant id
          nullable: false
          example: 100
        memberId:
          type: integer
          format: int64
          description: Member's user id
          nullable: false
          example: 12345678900000
    ReadMember:
      allOf:
        - $ref: '#/components/schemas/Member'
        - type: object
          required:
            - rootCause
          properties:
            addedDate:
              description: >-
                Date/time when the member has been added in the group in
                ISO-8601 format (YYYY-MM-DDThh:mm:ss.sZ)
              type: string
              format: date-time
            status:
              description: >-
                Some group types (e.g. COMPANY) keep disabled users, flagging
                them as DISABLED. However, this attribute is not relevant for
                group types (e.g. SDL) that remove (instead of flag) disabled
                user from group
              type: string
              enum:
                - ENABLED
                - DISABLED
              example: ENABLED
    GroupVisibilityRestriction:
      description: Group visibility restriction.
      properties:
        restrictedTenantsList:
          type: array
          items:
            type: integer
          example:
            - 100
        restrictedUsersList:
          type: array
          items:
            type: integer
            format: int64
          example:
            - 12345678900000
    GroupImplicitConnection:
      description: Group implicit connections.
      properties:
        connectedTenantsList:
          type: array
          items:
            type: integer
          example:
            - 100
        connectedUsersList:
          type: array
          items:
            type: integer
            format: int64
          example:
            - 12345678900000
    GroupInteractionTransfer:
      description: Group interaction transfer.
      properties:
        restrictedTenantsList:
          type: array
          items:
            type: integer
          example:
            - 100
        restrictedUsersList:
          type: array
          items:
            type: integer
            format: int64
          example:
            - 12345678900000
    BaseProfile:
      description: >-
        The group's profile. Please note that in case of a company group type,
        the profile shouldn't be provided when creating a new company and do not
        exist in case of an existing company group
      properties:
        displayName:
          type: string
          description: >-
            The display name in Directory, it is expected to be the same as
            group name
          nullable: false
          minLength: 1
          example: Test Group
        companyName:
          type: string
          description: The company name is expected to be the same as group company owner
          example: Acme Corporation
        email:
          type: string
          example: [email protected]
        mobile:
          type: string
          example: +33(0)600000000
        jobTitle:
          type: string
        jobRole:
          type: string
          example: Director
        jobDepartment:
          type: string
        jobDivision:
          type: string
        jobPhone:
          type: string
        jobCity:
          type: string
        industryOfInterest:
          type: array
          items:
            type: string
          example:
            - Services
        assetClassesOfInterest:
          type: array
          items:
            type: string
          example:
            - Equities
        marketCoverage:
          type: array
          uniqueItems: true
          items:
            type: string
          example:
            - EMEA
        responsibility:
          type: array
          uniqueItems: true
          items:
            type: string
          example:
            - Escalation
        function:
          type: array
          uniqueItems: true
          items:
            type: string
          example:
            - Collateral
        instrument:
          type: array
          uniqueItems: true
          items:
            type: string
          example:
            - Equities
    Profile:
      allOf:
        - $ref: '#/components/schemas/BaseProfile'
        - type: object
          required:
            - rootCause
          properties:
            id:
              type: string
              description: Profile unique identifier
            avatars:
              type: array
              items:
                $ref: '#/components/schemas/Avatar'
    Avatar:
      properties:
        size:
          type: string
        url:
          type: string
    BaseType:
      description: A reduced set Type object, for retrieving list of types purpose
      properties:
        id:
          type: string
          description: Type identifier
          example: SDL
        ownerType:
          $ref: '#/components/schemas/Owner'
          example: TENANT
        name:
          type: string
          description: Type's name
          example: Symphony Distribution List
        status:
          $ref: '#/components/schemas/Status'
    Type:
      allOf:
        - $ref: '#/components/schemas/BaseType'
        - type: object
          required:
            - rootCause
          properties:
            profileControl:
              $ref: '#/components/schemas/ProfileControl'
            membershipControl:
              $ref: '#/components/schemas/MembershipControl'
            interactionControl:
              $ref: '#/components/schemas/InteractionControl'
    ProfileControl:
      properties:
        visibilityRestriction:
          $ref: '#/components/schemas/VisibilityRestriction'
        implicitConnection:
          $ref: '#/components/schemas/ImplicitConnection'
        wallSupport:
          type: boolean
          description: Not supported yet
        profileFields:
          type: array
          uniqueItems: true
          items:
            type: string
        searchFields:
          type: array
          uniqueItems: true
          items:
            type: string
        canHavePublicProfile:
          type: boolean
          description: >-
            For the SDL groupe type this flag is true, for the company groupe
            type it is false
          default: true
    MembershipControl:
      properties:
        entitlements:
          type: array
          uniqueItems: true
          items:
            type: string
        manualMembership:
          type: boolean
        ruleMembership:
          type: boolean
          description: Not supported yet
        updateMembershipOnRuleUpdate:
          type: boolean
          description: Not supported yet
        notifyMembersOnUpdate:
          type: boolean
        canBelongToMultipleGroup:
          type: boolean
          description: >-
            For the SDL groupe type this flag is true, for the company groupe
            type it is false
          default: true
    InteractionControl:
      properties:
        allowIMs:
          type: boolean
        allowRooms:
          type: boolean
        interactionTransfer:
          $ref: '#/components/schemas/InteractionTransfer'
        tagStream:
          type: string
        canHaveInteraction:
          type: boolean
          description: >-
            For the SDL groupe type this flag is true, for the company groupe
            type it is false
          default: true
    VisibilityRestriction:
      properties:
        visible:
          type: boolean
        restrictToTenants:
          type: boolean
          description: Not supported yet
        restrictToUsers:
          type: boolean
          description: Not supported yet
    ImplicitConnection:
      properties:
        all:
          type: boolean
        connectToTenants:
          type: boolean
          description: Not supported yet
        connectToUsers:
          type: boolean
          description: Not supported yet
    InteractionTransfer:
      properties:
        target:
          type: string
          enum:
            - TO_USER
           

# --- truncated at 32 KB (35 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/symphony/refs/heads/main/openapi/profile-manager-openapi-original.yml