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.
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: 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